From b8227a492d6494b497da9c2264f9b233f98fc255 Mon Sep 17 00:00:00 2001 From: maxxkim Date: Mon, 15 Jul 2024 15:06:14 +0300 Subject: [PATCH] fix(diary): Satiety and mood change API method call fix --- .../diary/presentation/bloc/diary_bloc.dart | 131 ++++-------------- .../bloc/diary_state.freezed.dart | 92 ++++++------ .../diary/repositories/diary_repository.dart | 29 ++++ .../diary/services/diary_service.dart | 20 +-- .../diary/services/diary_service.g.dart | 28 ++-- 5 files changed, 127 insertions(+), 173 deletions(-) diff --git a/lib/features/diary/presentation/bloc/diary_bloc.dart b/lib/features/diary/presentation/bloc/diary_bloc.dart index 6bef4932..4691b34f 100644 --- a/lib/features/diary/presentation/bloc/diary_bloc.dart +++ b/lib/features/diary/presentation/bloc/diary_bloc.dart @@ -18,8 +18,7 @@ part 'diary_event.dart'; class DiaryBloc extends Bloc { final DiaryRepository diaryRepository; - DiaryBloc({required this.diaryRepository}) - : super(const DiaryState.loading()) { + DiaryBloc({required this.diaryRepository}) : super(const DiaryState.loading()) { on(loadDiary); on(_changeSatiety); // пользователь нажимает на шкалу сытости on(_changeMood); // пользователь нажимает на шкалу настроения @@ -58,10 +57,7 @@ class DiaryBloc extends Bloc { final int? diaryID = data['id']; final DiaryModel diary = await diaryRepository.getDiary(diaryID ?? 45); final Meal currentMeal = diary.meals[0]; - List portions = [ - SelectionPopupModel(title: "gr"), - SelectionPopupModel(title: "pcs") - ]; + List portions = [SelectionPopupModel(title: "gr"), SelectionPopupModel(title: "pcs")]; emit(DiaryState.loaded( diary: diary, currentMeal: currentMeal, @@ -69,8 +65,8 @@ class DiaryBloc extends Bloc { photos: currentMeal.photos, portionList: portions, portionController: portions[0], - selectedMood: 3, - selectedSatiety: 3, + selectedMood: currentMeal.mood, + selectedSatiety: currentMeal.satiety, commentController: TextEditingController(), productNameController: TextEditingController(), productQuantityController: TextEditingController(), @@ -88,7 +84,6 @@ class DiaryBloc extends Bloc { consumedChartValues: [1, 1, 1, 1])); } catch (e) { emit(DiaryState.error(errorMessage: e.toString())); - print(e); } } @@ -110,22 +105,14 @@ class DiaryBloc extends Bloc { if (responseChart.statusCode == 200) { final responseBody = jsonDecode(responseChart.body); - final recommendedChartValues = - responseBody['dailyNutritionRecommendation'] - .values - .map((value) => convertToInt(value)) - .toList(); + final recommendedChartValues = responseBody['dailyNutritionRecommendation'].values.map((value) => convertToInt(value)).toList(); - final consumedChartValues = responseBody['dailyNutritionIntake'] - .values - .map((value) => convertToInt(value)) - .toList(); + final consumedChartValues = responseBody['dailyNutritionIntake'].values.map((value) => convertToInt(value)).toList(); print([recommendedChartValues, consumedChartValues]); return [recommendedChartValues, consumedChartValues]; } else { - emit(DiaryStateError( - errorMessage: 'Ошибка при декодировании данных КБЖУ')); + emit(DiaryStateError(errorMessage: 'Ошибка при декодировании данных КБЖУ')); print('fail'); return [[], []]; // Return empty lists instead of -1 } @@ -152,69 +139,23 @@ class DiaryBloc extends Bloc { ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - var updatedState = - currentState.copyWith(selectedMood: event.selectedElement); - - // Отправляем данные по HTTP маршруту и ждем ответ - var response = await sendSatietyData( - event.selectedElement, - currentState.currentMeal.id, - currentState.diary.id, - ); - - if (response.statusCode == 200) { - print( - 'Satiety change success! meal_id: ${currentState.currentMeal.id}, mood: ${event.selectedElement}', - ); - emit(updatedState); // Передаем обновленное состояние в emit - } else - print("dad"); + var updatedState = currentState.copyWith(selectedSatiety: event.selectedElement); + diaryRepository.changeSatiety(event.selectedElement, currentState.currentMeal.id, currentState.diary.id); + emit(updatedState); } } - Future sendSatietyData( - int selectedSatiety, - int? mealID, - int diaryID, - ) async { - String url = dotenv.env['SERVER_ROOT']! + - '/diary/$diaryID/meal/$mealID/satiety/fill'; - final Map credentials = { - 'satiety': selectedSatiety, - }; - var response = await http.post( - Uri.parse(url), - headers: { - 'Content-Type': 'application/json', - }, - body: json.encode(credentials), - encoding: utf8, - ); - return response; - } - Future _changeMood( ChangeMood event, Emitter emit, ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - var updatedState = - currentState.copyWith(selectedMood: event.selectedElement); + var updatedState = currentState.copyWith(selectedMood: event.selectedElement); - // Отправляем данные по HTTP маршруту и ждем ответ - var response = await sendMoodData( - event.selectedElement, - currentState.currentMeal.id, - currentState.diary.id, - ); + diaryRepository.changeMood(event.selectedElement, currentState.currentMeal.id, currentState.diary.id); - if (response.statusCode == 200) { - print( - 'Mood change success! meal_id: ${currentState.currentMeal.id}, mood: ${event.selectedElement}', - ); - emit(updatedState); // Передаем обновленное состояние в emit - } + emit(updatedState); // Передаем обновленное состояние в emit } } @@ -223,8 +164,7 @@ class DiaryBloc extends Bloc { int? mealID, int diaryID, ) async { - String url = - dotenv.env['SERVER_ROOT']! + '/diary/$diaryID/meal/$mealID/mood/fill'; + String url = dotenv.env['SERVER_ROOT']! + '/diary/$diaryID/meal/$mealID/mood/fill'; final Map credentials = { 'mood': selectedMood, }; @@ -253,8 +193,7 @@ class DiaryBloc extends Bloc { ); if (response.statusCode == 200) { await reloadScreen(event, emit); - var updatedState = - currentState.copyWith(wakeupController: event.selectedTime); + var updatedState = currentState.copyWith(wakeupController: event.selectedTime); print("Wakeup time changed to ${event.selectedTime}"); emit(updatedState); // Передаем обновленное состояние в emit } else @@ -274,8 +213,7 @@ class DiaryBloc extends Bloc { ); if (response.statusCode == 200) { await reloadScreen(event, emit); - var updatedState = - currentState.copyWith(retireController: event.selectedTime); + var updatedState = currentState.copyWith(retireController: event.selectedTime); print("Retire time changed to ${event.selectedTime}"); emit(updatedState); // Передаем обновленное состояние в emit } else @@ -289,8 +227,7 @@ class DiaryBloc extends Bloc { ) async { String url = dotenv.env['SERVER_ROOT']! + '/diary/$diaryID/wakeUp/fill'; final formatter = DateFormat('HH:mm'); - final wakeupString = - formatter.format(DateTime(2022, 1, 1, wakeup.hour, wakeup.minute)); + final wakeupString = formatter.format(DateTime(2022, 1, 1, wakeup.hour, wakeup.minute)); final Map credentials = { 'wakeUp': wakeupString, }; @@ -313,8 +250,7 @@ class DiaryBloc extends Bloc { ) async { String url = dotenv.env['SERVER_ROOT']! + '/diary/$diaryID/retire/fill'; final formatter = DateFormat('HH:mm'); - final retireString = - formatter.format(DateTime(2022, 1, 1, retire.hour, retire.minute)); + final retireString = formatter.format(DateTime(2022, 1, 1, retire.hour, retire.minute)); final Map credentials = { 'retire': retireString, }; @@ -375,8 +311,7 @@ class DiaryBloc extends Bloc { ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - Meal? meal = - currentState.diary.meals.firstWhere((meal) => meal.id == event.value); + Meal? meal = currentState.diary.meals.firstWhere((meal) => meal.id == event.value); DiaryStateLoaded updatedState = currentState.copyWith( currentMeal: event.value, @@ -469,8 +404,7 @@ class DiaryBloc extends Bloc { int? mealID, int diaryID, ) async { - String url = - '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/portions/create'; + String url = '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/portions/create'; final Map credentials = { 'product_name': name, @@ -509,16 +443,13 @@ class DiaryBloc extends Bloc { }, ); - final productNutritionalValues = - jsonDecode(response.body)['product_nutritional_value']; + final productNutritionalValues = jsonDecode(response.body)['product_nutritional_value']; if (productNutritionalValues is List) { // Create a new controller with the input text and update the autocomplete list var updatedState = currentState.copyWith( productNameController: TextEditingController(text: event.input), - autocompleteList: productNutritionalValues - .map((product) => product['name']) - .toList(), + autocompleteList: productNutritionalValues.map((product) => product['name']).toList(), ); if (event.input.length > 3) { updatedState = updatedState.copyWith(moderationExpanded: true); @@ -538,8 +469,7 @@ class DiaryBloc extends Bloc { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - int? mealId = - currentState.currentMeal.id; // Rename id to mealId for clarity + int? mealId = currentState.currentMeal.id; // Rename id to mealId for clarity var response = await sendRemovePortion( event.portionId, @@ -562,8 +492,7 @@ class DiaryBloc extends Bloc { int? mealID, int diaryID, ) async { - String url = - '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/portions/$portionID/delete'; + String url = '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/portions/$portionID/delete'; var response = await http.delete( Uri.parse(url), @@ -606,8 +535,7 @@ class DiaryBloc extends Bloc { int? mealID, int diaryID, ) async { - String url = - '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/photo/delete'; + String url = '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/photo/delete'; final Map credentials = { 'id': photoID, 'path': path, @@ -648,10 +576,8 @@ class DiaryBloc extends Bloc { String? comment, ) async { final formatter = DateFormat('HH:mm'); - final wakeupString = - formatter.format(DateTime(2022, 1, 1, wakeup!.hour, wakeup.minute)); - final retireString = - formatter.format(DateTime(2022, 1, 1, retire!.hour, retire.minute)); + final wakeupString = formatter.format(DateTime(2022, 1, 1, wakeup!.hour, wakeup.minute)); + final retireString = formatter.format(DateTime(2022, 1, 1, retire!.hour, retire.minute)); final Map credentials = { 'wakeup': wakeupString, @@ -695,8 +621,7 @@ class DiaryBloc extends Bloc { int diaryID, int mealId, ) async { - String url = - '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealId/photo/upload'; + String url = '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealId/photo/upload'; var request = http.MultipartRequest('POST', Uri.parse(url)); diff --git a/lib/features/diary/presentation/bloc/diary_state.freezed.dart b/lib/features/diary/presentation/bloc/diary_state.freezed.dart index 5acd8d21..32931040 100644 --- a/lib/features/diary/presentation/bloc/diary_state.freezed.dart +++ b/lib/features/diary/presentation/bloc/diary_state.freezed.dart @@ -41,8 +41,8 @@ mixin _$DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -77,8 +77,8 @@ mixin _$DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -113,8 +113,8 @@ mixin _$DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -231,8 +231,8 @@ class _$DiaryStateImpl implements _DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -270,8 +270,8 @@ class _$DiaryStateImpl implements _DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -309,8 +309,8 @@ class _$DiaryStateImpl implements _DiaryState { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -429,8 +429,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -468,8 +468,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -507,8 +507,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -593,8 +593,8 @@ abstract class _$$DiaryStateLoadedImplCopyWith<$Res> { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -636,8 +636,8 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> Object? fatsController = null, Object? proteinsController = null, Object? carbsController = null, - Object? selectedMood = freezed, - Object? selectedSatiety = freezed, + Object? selectedMood = null, + Object? selectedSatiety = null, Object? wakeupExpanded = null, Object? moderationExpanded = null, Object? moodExpanded = null, @@ -725,14 +725,14 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> ? _value.carbsController : carbsController // ignore: cast_nullable_to_non_nullable as TextEditingController, - selectedMood: freezed == selectedMood + selectedMood: null == selectedMood ? _value.selectedMood : selectedMood // ignore: cast_nullable_to_non_nullable - as int?, - selectedSatiety: freezed == selectedSatiety + as int, + selectedSatiety: null == selectedSatiety ? _value.selectedSatiety : selectedSatiety // ignore: cast_nullable_to_non_nullable - as int?, + as int, wakeupExpanded: null == wakeupExpanded ? _value.wakeupExpanded : wakeupExpanded // ignore: cast_nullable_to_non_nullable @@ -797,8 +797,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { required this.fatsController, required this.proteinsController, required this.carbsController, - this.selectedMood, - this.selectedSatiety, + required this.selectedMood, + required this.selectedSatiety, required this.wakeupExpanded, required this.moderationExpanded, required this.moodExpanded, @@ -891,9 +891,9 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { @override final TextEditingController carbsController; @override - final int? selectedMood; + final int selectedMood; @override - final int? selectedSatiety; + final int selectedSatiety; @override final bool wakeupExpanded; @override @@ -1033,8 +1033,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -1099,8 +1099,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -1165,8 +1165,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -1269,8 +1269,8 @@ abstract class DiaryStateLoaded implements DiaryState { required final TextEditingController fatsController, required final TextEditingController proteinsController, required final TextEditingController carbsController, - final int? selectedMood, - final int? selectedSatiety, + required final int selectedMood, + required final int selectedSatiety, required final bool wakeupExpanded, required final bool moderationExpanded, required final bool moodExpanded, @@ -1297,8 +1297,8 @@ abstract class DiaryStateLoaded implements DiaryState { TextEditingController get fatsController; TextEditingController get proteinsController; TextEditingController get carbsController; - int? get selectedMood; - int? get selectedSatiety; + int get selectedMood; + int get selectedSatiety; bool get wakeupExpanded; bool get moderationExpanded; bool get moodExpanded; @@ -1398,8 +1398,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -1437,8 +1437,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, @@ -1476,8 +1476,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError { TextEditingController fatsController, TextEditingController proteinsController, TextEditingController carbsController, - int? selectedMood, - int? selectedSatiety, + int selectedMood, + int selectedSatiety, bool wakeupExpanded, bool moderationExpanded, bool moodExpanded, diff --git a/lib/features/diary/repositories/diary_repository.dart b/lib/features/diary/repositories/diary_repository.dart index 25903f14..c915d600 100644 --- a/lib/features/diary/repositories/diary_repository.dart +++ b/lib/features/diary/repositories/diary_repository.dart @@ -1,5 +1,10 @@ +import 'package:eatvio_app/core/app_export.dart'; import 'package:eatvio_app/features/diary/models/diary_model.dart'; +import 'package:eatvio_app/features/diary/models/meal.dart'; +import 'package:eatvio_app/features/diary/presentation/bloc/diary_bloc.dart'; +import 'package:eatvio_app/features/diary/presentation/bloc/diary_state.dart'; import 'package:eatvio_app/features/diary/services/diary_service.dart'; +import 'package:flutter/widgets.dart'; class DiaryRepository { final DiaryService diaryService; @@ -21,4 +26,28 @@ class DiaryRepository { rethrow; } } + + Future changeSatiety(int satiety, int mealID, int diaryID) async { + try { + await diaryService.sendSatietyData( + diaryID, + mealID, + satiety, + ); + } catch (e) { + rethrow; + } + } + + Future changeMood(int mood, int mealID, int diaryID) async { + try { + await diaryService.sendMoodData( + diaryID, + mealID, + mood, + ); + } catch (e) { + rethrow; + } + } } diff --git a/lib/features/diary/services/diary_service.dart b/lib/features/diary/services/diary_service.dart index e047b5e6..ad025394 100644 --- a/lib/features/diary/services/diary_service.dart +++ b/lib/features/diary/services/diary_service.dart @@ -18,18 +18,18 @@ abstract class DiaryService { @GET('/diary/{id}/dailyNutritionData/') Future getChart(@Path() String id); - @POST('/diary/{diaryID}/meal/{mealID}/satiety/fill') - Future sendSatiety( - @Path() String diaryID, - String mealID, - int satiety, + @POST('/diary/{diary_id}/meal/{meal_id}/satiety/fill') + Future> sendSatietyData( + @Path() int diary_id, + @Path() int meal_id, + @Query('satiety') int satiety, ); - @POST('/diary/{diaryID}/meal/{mealID}/mood/fill') - Future sendMood( - @Path() String diaryID, - String mealID, - int mood, + @POST('/diary/{diary_id}/meal/{meal_id}/mood/fill') + Future> sendMoodData( + @Path() int diary_id, + @Path() int meal_id, + @Query('mood') int mood, ); @POST('/diary/{diaryID}/wakeup/fill') diff --git a/lib/features/diary/services/diary_service.g.dart b/lib/features/diary/services/diary_service.g.dart index 3ea7bd1b..ddbf2199 100644 --- a/lib/features/diary/services/diary_service.g.dart +++ b/lib/features/diary/services/diary_service.g.dart @@ -101,24 +101,24 @@ class _DiaryService implements DiaryService { } @override - Future sendSatiety( - String diaryID, - String mealID, + Future> sendSatietyData( + int diary_id, + int meal_id, int satiety, ) async { final _extra = {}; - final queryParameters = {}; + final queryParameters = {r'satiety': satiety}; final _headers = {}; const Map? _data = null; final _result = await _dio - .fetch>(_setStreamType(Options( + .fetch>(_setStreamType>(Options( method: 'POST', headers: _headers, extra: _extra, ) .compose( _dio.options, - '/diary/${diaryID}/meal/{mealID}/satiety/fill', + '/diary/${diary_id}/meal/${meal_id}/satiety/fill', queryParameters: queryParameters, data: _data, ) @@ -127,29 +127,29 @@ class _DiaryService implements DiaryService { _dio.options.baseUrl, baseUrl, )))); - final _value = DiaryModel.fromJson(_result.data!); + final _value = _result.data!.cast(); return _value; } @override - Future sendMood( - String diaryID, - String mealID, + Future> sendMoodData( + int diary_id, + int meal_id, int mood, ) async { final _extra = {}; - final queryParameters = {}; + final queryParameters = {r'mood': mood}; final _headers = {}; const Map? _data = null; final _result = await _dio - .fetch>(_setStreamType(Options( + .fetch>(_setStreamType>(Options( method: 'POST', headers: _headers, extra: _extra, ) .compose( _dio.options, - '/diary/${diaryID}/meal/{mealID}/mood/fill', + '/diary/${diary_id}/meal/${meal_id}/mood/fill', queryParameters: queryParameters, data: _data, ) @@ -158,7 +158,7 @@ class _DiaryService implements DiaryService { _dio.options.baseUrl, baseUrl, )))); - final _value = DiaryModel.fromJson(_result.data!); + final _value = _result.data!.cast(); return _value; }