import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart'; import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'consultation_model.freezed.dart'; part 'consultation_model.g.dart'; @freezed abstract class ConsultationModel with _$ConsultationModel { factory ConsultationModel({ required int id, @JsonKey(name: 'last_state') required ChosenPlanStateEnum chosenPlanState, @JsonKey(name: 'plan_title') required String planTitle, @JsonKey(name: 'user_name') required String userName, @JsonKey(name: 'user_slug') required String userSlug, @JsonKey(name: 'consultant_payment') required double consultantPayment, required int duration, @JsonKey(name: 'current_diary_day') required int currentDiaryDay, @JsonKey(name: 'user_profile_photo_url') required String userProfilePhotoUrl, @JsonKey(name: 'consultation_option_price') required int consultationOptionPrice, @JsonKey(name: 'start_date', fromJson: parseDate) required DateTime startDate, @JsonKey(name: 'end_date', fromJson: parseDate) required DateTime endDate, @JsonKey(name: 'consultant_id') required int consultantId, required List diaries, }) = _ConsultationModel; factory ConsultationModel.fromJson(Map json) => _$ConsultationModelFromJson(json); } @freezed abstract class DiaryModel with _$DiaryModel { factory DiaryModel({ required int id, required DiaryStateEnum state, @JsonKey(fromJson: parseUnformattedDate) required DateTime date, }) = _DiaryModel; factory DiaryModel.fromJson(Map json) => _$DiaryModelFromJson(json); } DateTime parseUnformattedDate(String date) { final dateChunks = date.split('-').map(int.parse).toList(); return DateTime(dateChunks.first, dateChunks[1], dateChunks.last); } enum DiaryStateEnum { init, started, finished, commented, @JsonValue('reviewed_by_user') reviewedByUser, @JsonValue('last_day_started') lastDayStarted, @JsonValue('last_day_finished') lastDayFinished, @JsonValue('last_day_commented') lastDayCommented, } @freezed abstract class ConsultationPaginationModel with _$ConsultationPaginationModel { factory ConsultationPaginationModel({required List data}) = _ConsultationPaginationModel; factory ConsultationPaginationModel.fromJson(Map json) => _$ConsultationPaginationModelFromJson(json); }