update review api.
This commit is contained in:
24
lib/features/reviews/domain/usecases/delete_review.dart
Normal file
24
lib/features/reviews/domain/usecases/delete_review.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
/// Use Case: Delete Review
|
||||
///
|
||||
/// Deletes a product review.
|
||||
library;
|
||||
|
||||
import 'package:worker/features/reviews/domain/repositories/reviews_repository.dart';
|
||||
|
||||
/// Use case for deleting a product review
|
||||
class DeleteReview {
|
||||
const DeleteReview(this._repository);
|
||||
|
||||
final ReviewsRepository _repository;
|
||||
|
||||
/// Execute the use case
|
||||
///
|
||||
/// [name] - Review ID to delete (format: ITEM-{item_id}-{user_email})
|
||||
Future<void> call({required String name}) async {
|
||||
if (name.trim().isEmpty) {
|
||||
throw ArgumentError('Review ID cannot be empty');
|
||||
}
|
||||
|
||||
await _repository.deleteReview(name: name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/// Use Case: Get Product Reviews
|
||||
///
|
||||
/// Fetches reviews for a specific product with pagination.
|
||||
library;
|
||||
|
||||
import 'package:worker/features/reviews/domain/entities/review.dart';
|
||||
import 'package:worker/features/reviews/domain/repositories/reviews_repository.dart';
|
||||
|
||||
/// Use case for getting product reviews
|
||||
class GetProductReviews {
|
||||
const GetProductReviews(this._repository);
|
||||
|
||||
final ReviewsRepository _repository;
|
||||
|
||||
/// Execute the use case
|
||||
///
|
||||
/// [itemId] - Product item code
|
||||
/// [limitPageLength] - Number of reviews per page (default: 10)
|
||||
/// [limitStart] - Pagination offset (default: 0)
|
||||
///
|
||||
/// Returns a list of [Review] entities sorted by date (newest first)
|
||||
Future<List<Review>> call({
|
||||
required String itemId,
|
||||
int limitPageLength = 10,
|
||||
int limitStart = 0,
|
||||
}) async {
|
||||
return await _repository.getProductReviews(
|
||||
itemId: itemId,
|
||||
limitPageLength: limitPageLength,
|
||||
limitStart: limitStart,
|
||||
);
|
||||
}
|
||||
}
|
||||
61
lib/features/reviews/domain/usecases/submit_review.dart
Normal file
61
lib/features/reviews/domain/usecases/submit_review.dart
Normal file
@@ -0,0 +1,61 @@
|
||||
/// Use Case: Submit Review
|
||||
///
|
||||
/// Submits a new product review or updates an existing one.
|
||||
library;
|
||||
|
||||
import 'package:worker/features/reviews/domain/repositories/reviews_repository.dart';
|
||||
|
||||
/// Use case for submitting a product review
|
||||
class SubmitReview {
|
||||
const SubmitReview(this._repository);
|
||||
|
||||
final ReviewsRepository _repository;
|
||||
|
||||
/// Execute the use case
|
||||
///
|
||||
/// [itemId] - Product item code
|
||||
/// [rating] - Rating value (0-1 scale for API)
|
||||
/// [comment] - Review comment text
|
||||
/// [name] - Optional review ID for updates
|
||||
///
|
||||
/// Note: The rating should be in 0-1 scale for the API.
|
||||
/// If you have a 1-5 star rating, convert it first: `stars / 5.0`
|
||||
Future<void> call({
|
||||
required String itemId,
|
||||
required double rating,
|
||||
required String comment,
|
||||
String? name,
|
||||
}) async {
|
||||
// Validate rating range (0-1)
|
||||
if (rating < 0 || rating > 1) {
|
||||
throw ArgumentError(
|
||||
'Rating must be between 0 and 1. Got: $rating. '
|
||||
'If you have a 1-5 star rating, convert it first: stars / 5.0',
|
||||
);
|
||||
}
|
||||
|
||||
// Validate comment length
|
||||
if (comment.trim().isEmpty) {
|
||||
throw ArgumentError('Review comment cannot be empty');
|
||||
}
|
||||
|
||||
if (comment.trim().length < 20) {
|
||||
throw ArgumentError(
|
||||
'Review comment must be at least 20 characters. Got: ${comment.trim().length}',
|
||||
);
|
||||
}
|
||||
|
||||
if (comment.length > 1000) {
|
||||
throw ArgumentError(
|
||||
'Review comment must not exceed 1000 characters. Got: ${comment.length}',
|
||||
);
|
||||
}
|
||||
|
||||
await _repository.submitReview(
|
||||
itemId: itemId,
|
||||
rating: rating,
|
||||
comment: comment.trim(),
|
||||
name: name,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user