import 'package:freezed_annotation/freezed_annotation.dart'; part 'insights_payload_model.freezed.dart'; part 'insights_payload_model.g.dart'; /// Структура повторяет веб-`UserInsightsService::chartPayload()`, чтобы во второй /// итерации заменить только источник данных. @freezed abstract class InsightsPayloadModel with _$InsightsPayloadModel { const factory InsightsPayloadModel({ required WeightChartModel weight, required BmiChartModel bmi, required MeasureChartModel measure, DailyChartModel? daily, IntraChartModel? intra, }) = _InsightsPayloadModel; factory InsightsPayloadModel.fromJson(Map json) => _$InsightsPayloadModelFromJson(json); } @freezed abstract class WeightChartModel with _$WeightChartModel { const factory WeightChartModel({ @Default([]) List labels, @Default([]) List values, double? last, double? delta, @Default('') String headline, @Default('') String unit, @Default('') String deltaText, }) = _WeightChartModel; factory WeightChartModel.fromJson(Map json) => _$WeightChartModelFromJson(json); } @freezed abstract class BmiChartModel with _$BmiChartModel { const factory BmiChartModel({ @Default([]) List labels, @Default([]) List values, double? last, double? delta, @Default('') String headline, String? category, @Default('') String deltaText, @Default('') String hint, }) = _BmiChartModel; factory BmiChartModel.fromJson(Map json) => _$BmiChartModelFromJson(json); } @freezed abstract class MeasureChartModel with _$MeasureChartModel { const factory MeasureChartModel({ @Default([]) List labels, @Default([]) List waist, @Default([]) List chest, @Default([]) List hips, @Default('') String headline, @Default('') String deltaText, }) = _MeasureChartModel; factory MeasureChartModel.fromJson(Map json) => _$MeasureChartModelFromJson(json); } @freezed abstract class DailyChartModel with _$DailyChartModel { const factory DailyChartModel({ @Default([]) List labels, @Default([]) List kcal, @Default([]) List proteins, @Default([]) List fats, @Default([]) List carbs, double? average, double? percent, @Default('') String headline, @Default('') String deltaText, }) = _DailyChartModel; factory DailyChartModel.fromJson(Map json) => _$DailyChartModelFromJson(json); } @freezed abstract class IntraChartModel with _$IntraChartModel { const factory IntraChartModel({ @Default([]) List bars, @Default([]) List satiety, @Default([]) List mood, double? wake, double? sleep, String? wakeLabel, String? sleepLabel, String? wakeText, String? sleepText, @Default('') String date, @Default('') String maxDate, @Default('') String dateLabel, @Default(false) bool isToday, }) = _IntraChartModel; factory IntraChartModel.fromJson(Map json) => _$IntraChartModelFromJson(json); } /// Приём пищи: время `x` (часы 0–24) и калории из белков/жиров/углеводов. @freezed abstract class IntraBarModel with _$IntraBarModel { const factory IntraBarModel({ required double x, @Default(0) double p, @Default(0) double f, @Default(0) double c, }) = _IntraBarModel; factory IntraBarModel.fromJson(Map json) => _$IntraBarModelFromJson(json); } /// Точка шкалы 0–5 (сытость/настроение) в момент времени `x`. @freezed abstract class ScalePointModel with _$ScalePointModel { const factory ScalePointModel({required double x, required double y}) = _ScalePointModel; factory ScalePointModel.fromJson(Map json) => _$ScalePointModelFromJson(json); }