From d5dddf92a30238d8555ed784037e81f383fda159 Mon Sep 17 00:00:00 2001 From: Tom Bursch Date: Fri, 20 Dec 2024 00:54:11 +0100 Subject: [PATCH] fix: Switch household on request forbidden --- .../household_update_cubit.dart | 5 +++-- .../lib/cubits/household_member_cubit.dart | 6 +++++- kitchenowl/lib/services/api/household.dart | 11 ++++++++--- .../lib/services/transactions/household.dart | 18 ++++++++++++------ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart b/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart index 56718838..a56e2eae 100644 --- a/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart +++ b/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart @@ -48,8 +48,9 @@ class HouseholdUpdateCubit } Future refresh() async { - Future fHousehold = - ApiService.getInstance().getHousehold(this.household); + Future fHousehold = ApiService.getInstance() + .getHousehold(this.household) + .then((res) => res.household); Future?> shoppingLists = ApiService.getInstance().getShoppingLists(this.household); diff --git a/kitchenowl/lib/cubits/household_member_cubit.dart b/kitchenowl/lib/cubits/household_member_cubit.dart index 4f6ad0da..aa8f61e9 100644 --- a/kitchenowl/lib/cubits/household_member_cubit.dart +++ b/kitchenowl/lib/cubits/household_member_cubit.dart @@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:kitchenowl/models/household.dart'; import 'package:kitchenowl/models/member.dart'; import 'package:kitchenowl/services/api/api_service.dart'; +import 'package:kitchenowl/services/transaction_handler.dart'; +import 'package:kitchenowl/services/transactions/household.dart'; class HouseholdMemberCubit extends Cubit { final Household household; @@ -16,7 +18,9 @@ class HouseholdMemberCubit extends Cubit { Future refresh() async { Future fHousehold = - ApiService.getInstance().getHousehold(this.household); + TransactionHandler.getInstance().runTransaction( + TransactionHouseholdGet(household: this.household), + ); Household household = await fHousehold ?? this.household; diff --git a/kitchenowl/lib/services/api/household.dart b/kitchenowl/lib/services/api/household.dart index b11d0ed8..59622023 100644 --- a/kitchenowl/lib/services/api/household.dart +++ b/kitchenowl/lib/services/api/household.dart @@ -16,11 +16,16 @@ extension HouseholdApi on ApiService { return body.map((e) => Household.fromJson(e)).toList(); } - Future getHousehold(Household household) async { + Future<({Household? household, int statusCode})> getHousehold( + Household household) async { final res = await get("$baseRoute/${household.id}"); - if (res.statusCode != 200) return null; + if (res.statusCode != 200) + return (household: null, statusCode: res.statusCode); - return Household.fromJson(jsonDecode(res.body)); + return ( + household: Household.fromJson(jsonDecode(res.body)), + statusCode: 200, + ); } Future updateHousehold(Household household) async { diff --git a/kitchenowl/lib/services/transactions/household.dart b/kitchenowl/lib/services/transactions/household.dart index 5ddd5318..e0058feb 100644 --- a/kitchenowl/lib/services/transactions/household.dart +++ b/kitchenowl/lib/services/transactions/household.dart @@ -44,19 +44,25 @@ class TransactionHouseholdGet extends Transaction { @override Future runOnline() async { - final household = - await ApiService.getInstance().getHousehold(this.household); - if (household != null) { + final res = await ApiService.getInstance().getHousehold(this.household); + if (res.household != null) { final households = await MemStorage.getInstance().readHouseholds() ?? []; final i = households.indexWhere((e) => e.id == household.id); if (i >= 0) { - households[i] = household; + households[i] = res.household!; } else { - households.add(household); + households.add(res.household!); } MemStorage.getInstance().writeHouseholds(households); + } else if (res.statusCode == 403) { + final households = await MemStorage.getInstance().readHouseholds() ?? []; + final i = households.indexWhere((e) => e.id == household.id); + if (i >= 0) { + households.removeAt(i); + MemStorage.getInstance().writeHouseholds(households); + } } - return household; + return res.household; } }