Files
eatvio_app/lib/features/consultations/models/consultation_model.dart
2025-05-21 17:42:43 +03:00

66 lines
2.1 KiB
Dart

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,
required String planTitle,
required String userName,
required String userSlug,
required double consultantPayment,
required int duration,
required int currentDiaryDay,
@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<DiaryModel> diaries,
}) = _ConsultationModel;
factory ConsultationModel.fromJson(Map<String, dynamic> 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<String, dynamic> 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<ConsultationModel> data}) = _ConsultationPaginationModel;
factory ConsultationPaginationModel.fromJson(Map<String, dynamic> json) => _$ConsultationPaginationModelFromJson(json);
}