Files
eatvio_app/lib/features/feed/models/plan_pagination_model.dart

85 lines
3.3 KiB
Dart

import 'package:eatvio_app/core/models/pagination_model.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'plan_pagination_model.freezed.dart';
part 'plan_pagination_model.g.dart';
@freezed
class PlanPaginationModel with _$PlanPaginationModel {
const factory PlanPaginationModel({
@JsonKey(name: "data") required List<PlanModel> data,
@JsonKey(name: "links") required Links links,
@JsonKey(name: "meta") required Meta meta,
}) = _PlanPaginationModel;
factory PlanPaginationModel.fromJson(Map<String, dynamic> json) => _$PlanPaginationModelFromJson(json);
}
@freezed
class PlanModel with _$PlanModel {
const factory PlanModel({
@JsonKey(name: "id") required int id,
@JsonKey(name: "slug") required String slug,
@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", fromJson: planTypeFromJson) required PlanType type,
@JsonKey(name: "description_md") required String details,
@JsonKey(name: "packets_count") required int packetsCount,
@JsonKey(name: "packet1_options") PacketOptions? packet1Options,
@JsonKey(name: "packet2_options") PacketOptions? packet2Options,
@JsonKey(name: "packet3_options") PacketOptions? packet3Options,
@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: "is_favorite") required bool isFavorite,
@JsonKey(name: "min_price_of_options") required double minPriceOfOptions,
@JsonKey(name: "max_price_of_options") required double maxPriceOfOptions,
@JsonKey(name: "was_liked_by_me") required bool wasLikedByMe,
}) = _PlanModel;
factory PlanModel.fromJson(Map<String, dynamic> json) => _$PlanModelFromJson(json);
}
PlanType planTypeFromJson(dynamic json) {
if (json is List<dynamic>) {
return PlanType(fit: false, slim: false, behavior: false, wellness: false);
}
return PlanType.fromJson(json);
}
@freezed
class PacketOptions with _$PacketOptions {
const factory PacketOptions({
@JsonKey(name: "items") required List<String> items,
@JsonKey(name: "price") required dynamic price,
@JsonKey(name: "short") required String short,
@JsonKey(name: "description_md") required String description,
}) = _PacketOptions;
factory PacketOptions.fromJson(Map<String, dynamic> json) => _$PacketOptionsFromJson(json);
factory PacketOptions.empty() => PacketOptions(items: [], price: 1200, short: '', description: '');
}
@freezed
class PlanType with _$PlanType {
const PlanType._();
const factory PlanType({
@JsonKey(name: "fit") required bool? fit,
@JsonKey(name: "slim") required bool? slim,
@JsonKey(name: "behavior") required bool? behavior,
@JsonKey(name: "wellness") required bool? wellness,
}) = _PlanType;
factory PlanType.fromJson(Map<String, dynamic> json) => _$PlanTypeFromJson(json);
bool hasAtLeastOneType() {
return (fit ?? false) || (slim ?? false) || (behavior ?? false) || (wellness ?? false);
}
}