Files
eatvio_app/lib/features/diary/repositories/diary_repository.dart
2025-01-29 13:14:20 +03:00

223 lines
5.2 KiB
Dart

import 'dart:io';
import 'package:eatvio_app/features/diary/models/diary_day_model.dart';
import 'package:eatvio_app/features/diary/models/finish_diary_day_model.dart';
import 'package:eatvio_app/features/diary/models/nutrition_model.dart';
import 'package:eatvio_app/features/diary/models/product_moderation_model.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
import 'package:eatvio_app/features/glossary/models/glossary_model.dart';
class DiaryRepository {
final DiaryService diaryService;
DiaryRepository({
required this.diaryService,
});
Future<DiaryDayModel> getDiaryByDate(String date) async {
try {
return (await getDiaryIndexByDate(date)).last;
} catch (e) {
rethrow;
}
}
Future<List<DiaryDayModel>> getDiaryIndexByDate(String date) async {
return (await diaryService.getDiaryIndexByDate(date: date));
}
Future<NutritionDataModel> getNutritionData(int index) async {
return await diaryService.getNutrition(diary: index);
}
Future<void> addPortionToMeal({
required int diaryId,
required int mealId,
required String productName,
required String portion,
required int quantity,
int? productNutritionalValueId,
}) async {
return await diaryService.addProductToMeal(
diary: diaryId,
typeNo: mealId,
productName: productName,
portion: portion,
quantity: quantity,
productNutritionalValueId: productNutritionalValueId,
);
}
Future<void> updateProductInMeal({
required int diaryId,
required int mealId,
required int portionId,
required String productName,
required String portion,
required int quantity,
int? productNutritionalValueId,
required PortionState portionState,
}) async {
Map<String, Object?> data = ProductInMeal(
productName: productName,
portion: portion,
quantity: quantity,
).toJson();
data['product_nutritional_value_id'] = productNutritionalValueId;
data['state'] = portionState.name;
return await diaryService.updateProductInMeal(
diary: diaryId,
typeNo: mealId,
portionModel: portionId,
productInMeal: data,
);
}
Future<void> markEaten({
required int diaryId,
required int mealId,
required int portionId,
}) async {
return await diaryService.markEaten(
diary: diaryId,
typeNo: mealId,
portionModel: portionId,
);
}
Future<void> unmarkEaten({
required int diaryId,
required int mealId,
required int portionId,
}) async {
return await diaryService.unmarkEaten(
diary: diaryId,
typeNo: mealId,
portionModel: portionId,
);
}
Future<void> restore({
required int diaryId,
required int mealId,
required int portionId,
}) async {
return await diaryService.restore(
diary: diaryId,
typeNo: mealId,
portionModel: portionId,
);
}
Future<void> deleteProductFromMeal({
required int diaryId,
required int mealId,
required int portionId,
}) async {
return await diaryService.deleteProductFromMeal(
diary: diaryId,
typeNo: mealId,
portionModel: portionId,
);
}
Future<void> uploadPhotos({
required int diaryId,
required int mealId,
required List<File> files,
}) async {
try {
for (int i = 0; i < files.length; i++) {
await diaryService.uploadPhotoOfMeal(
diary: diaryId,
typeNo: mealId,
photo: files[i],
);
}
} catch (e) {
rethrow;
}
}
Future<void> deletePhoto({
required int diaryId,
required int mealId,
required DiaryPhotoModel photo,
}) async {
try {
await diaryService.deletePhotoOfMeal(
diaryId: diaryId,
typeNo: mealId,
userAttachment: photo.id,
);
} catch (e) {
rethrow;
}
}
Future<void> finishDiaryDay({
required int diaryId,
required String wakeUp,
required String retire,
required String comment,
}) async {
return await diaryService.finishDiaryDay(
diary: diaryId,
finishDiaryDayModel: FinishDiaryDayModel(
wakeUp: wakeUp,
retire: retire,
comment: comment,
),
);
}
Future<GlossaryModerationModel> sendProductToModeration({
required String name,
required double energy,
required double proteins,
required double fats,
required double carbohydrates,
}) async {
return await diaryService.sendProductToModeration(
data: ProductModerationModel(
name: name,
energy: energy,
proteins: proteins,
fats: fats,
carbohydrates: carbohydrates,
).toJson(),
);
}
Future<void> fillSatiety({
required int diaryId,
required int mealId,
required int satiety,
}) async {
try {
return await diaryService.fillSatiety(
diary: diaryId,
typeNo: mealId,
satiety: satiety,
);
} catch (e) {
rethrow;
}
}
Future<void> fillTime({
required int diaryId,
required int mealId,
required String time,
}) async {
try {
return await diaryService.fillTime(
diary: diaryId,
typeNo: mealId,
time: time,
);
} catch (e) {
rethrow;
}
}
}