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 getDiaryByDate(String date) async { try { return (await getDiaryIndexByDate(date)).last; } catch (e) { rethrow; } } Future> getDiaryIndexByDate(String date) async { return (await diaryService.getDiaryIndexByDate(date: date)); } Future getNutritionData(int index) async { return await diaryService.getNutrition(diary: index); } Future 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 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 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 markEaten({ required int diaryId, required int mealId, required int portionId, }) async { return await diaryService.markEaten( diary: diaryId, typeNo: mealId, portionModel: portionId, ); } Future unmarkEaten({ required int diaryId, required int mealId, required int portionId, }) async { return await diaryService.unmarkEaten( diary: diaryId, typeNo: mealId, portionModel: portionId, ); } Future restore({ required int diaryId, required int mealId, required int portionId, }) async { return await diaryService.restore( diary: diaryId, typeNo: mealId, portionModel: portionId, ); } Future deleteProductFromMeal({ required int diaryId, required int mealId, required int portionId, }) async { return await diaryService.deleteProductFromMeal( diary: diaryId, typeNo: mealId, portionModel: portionId, ); } Future uploadPhotos({ required int diaryId, required int mealId, required List 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 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 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 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 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 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; } } }