forked from eatvio/eatvio_app
138 lines
4.5 KiB
Dart
138 lines
4.5 KiB
Dart
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<Diet> data,
|
|
@JsonKey(name: "links") required Links links,
|
|
@JsonKey(name: "meta") required Meta meta,
|
|
}) = _DietsPagination;
|
|
|
|
factory DietsPagination.fromJson(Map<String, dynamic> 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<List<List<DailySchedule>>> 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> dailyNutrition,
|
|
}) = _Diet;
|
|
|
|
factory Diet.fromJson(Map<String, dynamic> json) => _$DietFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
class CreatedDiet with _$CreatedDiet {
|
|
const factory CreatedDiet({
|
|
@JsonKey(name: "id") required int id,
|
|
}) = _CreatedDiet;
|
|
|
|
factory CreatedDiet.fromJson(Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<String, dynamic> json) => _$DietTypeFromJson(json);
|
|
|
|
bool hasAtLeastOneType() {
|
|
return light ?? false || (veg ?? false) || (carb ?? false) || (meat ?? false);
|
|
}
|
|
}
|
|
|
|
class EnumValues<T> {
|
|
Map<String, T> map;
|
|
late Map<T, String> reverseMap;
|
|
|
|
EnumValues(this.map);
|
|
|
|
Map<T, String> 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<String, dynamic> json) => _$DailyNutritionFromJson(json);
|
|
}
|