80 lines
2.0 KiB
Dart
80 lines
2.0 KiB
Dart
/// Data Model: Review Statistics
|
|
///
|
|
/// JSON serializable model for review statistics from API.
|
|
library;
|
|
|
|
import 'package:worker/features/reviews/domain/entities/review_statistics.dart';
|
|
|
|
/// Review statistics data model
|
|
///
|
|
/// Handles JSON serialization/deserialization for review statistics.
|
|
///
|
|
/// API Response format:
|
|
/// ```json
|
|
/// {
|
|
/// "total_feedback": 2,
|
|
/// "average_rating": 2.25
|
|
/// }
|
|
/// ```
|
|
class ReviewStatisticsModel {
|
|
const ReviewStatisticsModel({
|
|
required this.totalFeedback,
|
|
required this.averageRating,
|
|
});
|
|
|
|
/// Total number of reviews/feedbacks
|
|
final int totalFeedback;
|
|
|
|
/// Average rating (0-5 scale from API)
|
|
final double averageRating;
|
|
|
|
/// Create model from JSON
|
|
factory ReviewStatisticsModel.fromJson(Map<String, dynamic> json) {
|
|
return ReviewStatisticsModel(
|
|
totalFeedback: json['total_feedback'] as int? ?? 0,
|
|
averageRating: (json['average_rating'] as num?)?.toDouble() ?? 0.0,
|
|
);
|
|
}
|
|
|
|
/// Convert model to JSON
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'total_feedback': totalFeedback,
|
|
'average_rating': averageRating,
|
|
};
|
|
}
|
|
|
|
/// Convert to domain entity
|
|
ReviewStatistics toEntity() {
|
|
return ReviewStatistics(
|
|
totalFeedback: totalFeedback,
|
|
averageRating: averageRating,
|
|
);
|
|
}
|
|
|
|
/// Create model from domain entity
|
|
factory ReviewStatisticsModel.fromEntity(ReviewStatistics entity) {
|
|
return ReviewStatisticsModel(
|
|
totalFeedback: entity.totalFeedback,
|
|
averageRating: entity.averageRating,
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
|
|
return other is ReviewStatisticsModel &&
|
|
other.totalFeedback == totalFeedback &&
|
|
other.averageRating == averageRating;
|
|
}
|
|
|
|
@override
|
|
int get hashCode => Object.hash(totalFeedback, averageRating);
|
|
|
|
@override
|
|
String toString() {
|
|
return 'ReviewStatisticsModel(totalFeedback: $totalFeedback, averageRating: $averageRating)';
|
|
}
|
|
}
|