Initialer Commit: Projekt Start

This commit is contained in:
Tim Leikauf
2026-01-03 15:24:36 +01:00
commit 3773f94303
168 changed files with 228080 additions and 0 deletions

80
lib/models/review.dart Normal file
View File

@@ -0,0 +1,80 @@
class Review {
final int id;
final int productId;
final String reviewer;
final String reviewerEmail;
final String review;
final int rating;
final bool verified;
final DateTime dateCreated;
final String? reviewerAvatarUrl;
Review({
required this.id,
required this.productId,
required this.reviewer,
required this.reviewerEmail,
required this.review,
required this.rating,
this.verified = false,
required this.dateCreated,
this.reviewerAvatarUrl,
});
factory Review.fromJson(Map<String, dynamic> json) {
return Review(
id: json['id'] ?? 0,
productId: json['product_id'] ?? 0,
reviewer: json['reviewer'] ?? '',
reviewerEmail: json['reviewer_email'] ?? '',
review: json['review'] ?? '',
rating: json['rating'] ?? 0,
verified: json['verified'] ?? false,
dateCreated: json['date_created'] != null
? DateTime.parse(json['date_created'])
: DateTime.now(),
reviewerAvatarUrl: json['reviewer_avatar_urls']?['96'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'product_id': productId,
'reviewer': reviewer,
'reviewer_email': reviewerEmail,
'review': review,
'rating': rating,
'verified': verified,
'date_created': dateCreated.toIso8601String(),
};
}
}
class ProductRating {
final double averageRating;
final int ratingCount;
final Map<int, int> ratingBreakdown; // rating -> count
ProductRating({
required this.averageRating,
required this.ratingCount,
required this.ratingBreakdown,
});
factory ProductRating.fromJson(Map<String, dynamic> json) {
final breakdown = <int, int>{};
if (json['rating_breakdown'] != null) {
(json['rating_breakdown'] as Map).forEach((key, value) {
breakdown[int.parse(key.toString())] = value as int;
});
}
return ProductRating(
averageRating: (json['average_rating'] ?? 0.0).toDouble(),
ratingCount: json['rating_count'] ?? 0,
ratingBreakdown: breakdown,
);
}
}