import 'package:eatvio_app/core/models/pagination_model.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'diets_pagination_model.freezed.dart'; part 'diets_pagination_model.g.dart'; @freezed class DietsPagination with _$DietsPagination { const factory DietsPagination({ @JsonKey(name: "data") required List data, @JsonKey(name: "links") required Links links, @JsonKey(name: "meta") required Meta meta, }) = _DietsPagination; factory DietsPagination.fromJson(Map json) => _$DietsPaginationFromJson(json); } @freezed class Diet with _$Diet { const factory Diet({ @JsonKey(name: "id") required int id, @JsonKey(name: "name") required String name, @JsonKey(name: "image") required String image, @JsonKey(name: "duration") required int duration, @JsonKey(name: "state") required String state, @JsonKey(name: "type") required DietType type, @JsonKey(name: "details") required String details, @JsonKey(name: "daily_schedule") required List>> dailySchedule, @JsonKey(name: "author") required Author author, @JsonKey(name: "total_likes") required int totalLikes, @JsonKey(name: "total_views") required int totalViews, @JsonKey(name: "total_comments") required int totalComments, @JsonKey(name: "was_liked_by_me") required bool wasLikedByMe, @JsonKey(name: "is_favorite") required bool isFavorite, @JsonKey(name: "daily_nutrition") required List dailyNutrition, }) = _Diet; factory Diet.fromJson(Map json) => _$DietFromJson(json); } @freezed class CreatedDiet with _$CreatedDiet { const factory CreatedDiet({ @JsonKey(name: "id") required int id, }) = _CreatedDiet; factory CreatedDiet.fromJson(Map json) => _$CreatedDietFromJson(json); } int parseDuration(dynamic duration) { if (duration is String) { return int.parse(duration); }else { return duration; } } @freezed class Author with _$Author { const factory Author({ @JsonKey(name: "author_slug") required String authorSlug, @JsonKey(name: "author_name") required String authorName, @JsonKey(name: "author_profile_icon") required String authorProfileIcon, @JsonKey(name: "author_is_me") required bool authorIsMe, @JsonKey(name: "is_entity_subscribed_by_me") bool? isEntitySubscribedByMe, @JsonKey(name: "author_place_in_rating") int? authorPlaceInRating, }) = _Author; factory Author.fromJson(Map json) => _$AuthorFromJson(json); } @freezed class DailySchedule with _$DailySchedule { const factory DailySchedule({ @JsonKey(name: "name") required String name, @JsonKey(name: "uniq", includeToJson: false) required String uniq, @JsonKey(name: "portion") required Portion portion, @JsonKey(name: "quantity") required int quantity, @JsonKey(includeToJson: false, includeFromJson: false) DailyNutrition? dailyNutrition, @JsonKey(name: 'product_nutritional_value_id', includeToJson: true, includeFromJson: false, includeIfNull: false) String? productNutritionalValueId, }) = _DailySchedule; factory DailySchedule.fromJson(Map json) => _$DailyScheduleFromJson(json); } enum Portion { @JsonValue("grams") GRAMS, @JsonValue("milliliters") MILLILITERS, @JsonValue("pcs") PCS } final portionValues = EnumValues({"grams": Portion.GRAMS, "milliliters": Portion.MILLILITERS, "pcs": Portion.PCS}); @freezed class DietType with _$DietType { const DietType._(); const factory DietType({ @JsonKey(name: "light") bool? light, @JsonKey(name: "veg") bool? veg, @JsonKey(name: "carb") bool? carb, @JsonKey(name: "meat") bool? meat, }) = _DietType; factory DietType.fromJson(Map json) => _$DietTypeFromJson(json); bool hasAtLeastOneType() { return light ?? false || (veg ?? false) || (carb ?? false) || (meat ?? false); } } class EnumValues { Map map; late Map reverseMap; EnumValues(this.map); Map get reverse { reverseMap = map.map((k, v) => MapEntry(v, k)); return reverseMap; } } @freezed class DailyNutrition with _$DailyNutrition { const factory DailyNutrition({ @JsonKey(name: 'energy') required double energy, @JsonKey(name: 'proteins') required double proteins, @JsonKey(name: 'fats') required double fats, @JsonKey(name: 'carbohydrates') required double carbohydrates, }) = _DailyNutrition; factory DailyNutrition.fromJson(Map json) => _$DailyNutritionFromJson(json); }