From 4420e1450ff8a04ec76faabe0b10e9b618f661df Mon Sep 17 00:00:00 2001 From: Max Schwinghammer Date: Thu, 21 Aug 2025 14:44:38 +0200 Subject: [PATCH 1/2] Ensure inventory items reference current household --- .../service/product/ProductServiceImpl.kt | 97 ++++++++++--------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt b/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt index 57a70ff..265cd67 100644 --- a/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt +++ b/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt @@ -20,6 +20,7 @@ import com.google.firebase.firestore.FirebaseFirestore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.tasks.await import kotlinx.coroutines.withContext import java.io.File import java.time.Instant @@ -38,12 +39,10 @@ class ProductServiceImpl val coroutineScope = CoroutineScope(Dispatchers.IO) var user: User = User() - var householdId: String? = null init { coroutineScope.launch { user = accountService.getUserObject() - householdId = householdService.getHouseholdId() } } @@ -81,6 +80,8 @@ class ProductServiceImpl else -> null } + val householdId = householdService.getHouseholdId() + val foodItem = FoodItem( barcode = barcode, @@ -106,7 +107,7 @@ class ProductServiceImpl .update("id", documentReference.id) .addOnSuccessListener { coroutineScope.launch { - if (user.householdId != null) { + if (householdId != null) { logActivity( foodItem.copy(id = documentReference.id), productName, @@ -238,58 +239,56 @@ class ProductServiceImpl ) onSuccess(updatedFoodItem) - if (user.householdId != null) { - firestore - .collection("households") - .document(user.householdId!!) - .get() - .addOnSuccessListener { householdDoc -> + coroutineScope.launch { + val householdId = householdService.getHouseholdId() + if (householdId != null) { + try { + val householdDoc = + firestore + .collection("households") + .document(householdId) + .get() + .await() val household = - householdDoc.toObject( - Household::class.java, - ) + householdDoc.toObject(Household::class.java) if (household != null && household.type != HouseholdType.SINGLE ) { - coroutineScope.launch { - val changedFields = mutableListOf() - if (foodItem.name != productName) { - changedFields.add(EventType.NAME) - } - if (foodItem.quantity != quantity) { - changedFields.add(EventType.QUANTITY) - } - if (foodItem.expiryTimestamp != expiryTimestamp) { - changedFields.add(EventType.EXPIRY) - } - if (foodItem.storageLocation != storageLocation) { - changedFields.add(EventType.STORAGE) - } - if (foodItem.category != category) { - changedFields.add(EventType.CATEGORY) - } - val activityType = - when { - isConsumedChecked -> - EventType.CONSUMED - isThrownAwayChecked -> - EventType.THROWN_AWAY - changedFields.size == 1 -> - changedFields.first() - else -> EventType.EDIT - } - logActivity( - updatedFoodItem, - productName, - activityType, - oldName = foodItem.name, - oldQuantity = foodItem.quantity, - ) + val changedFields = mutableListOf() + if (foodItem.name != productName) { + changedFields.add(EventType.NAME) + } + if (foodItem.quantity != quantity) { + changedFields.add(EventType.QUANTITY) } + if (foodItem.expiryTimestamp != expiryTimestamp) { + changedFields.add(EventType.EXPIRY) + } + if (foodItem.storageLocation != storageLocation) { + changedFields.add(EventType.STORAGE) + } + if (foodItem.category != category) { + changedFields.add(EventType.CATEGORY) + } + val activityType = + when { + isConsumedChecked -> EventType.CONSUMED + isThrownAwayChecked -> EventType.THROWN_AWAY + changedFields.size == 1 -> changedFields.first() + else -> EventType.EDIT + } + logActivity( + updatedFoodItem, + productName, + activityType, + oldName = foodItem.name, + oldQuantity = foodItem.quantity, + ) } - }.addOnFailureListener { e -> + } catch (e: Exception) { Log.e("Firestore", "Error retrieving household", e) } + } } }.addOnFailureListener { e -> Log.e("Firestore", "Error when updating the product", e) @@ -321,10 +320,12 @@ class ProductServiceImpl else -> activityType } + val currentHouseholdId = householdService.getHouseholdId() + val activity = Activity( userId = user.id, - householdId = householdId, + householdId = currentHouseholdId, type = resolvedType, userName = user.displayName!!, timestamp = System.currentTimeMillis(), From faec4a95fedc8d6daf6a6534736bd6d126ac173e Mon Sep 17 00:00:00 2001 From: Max Schwinghammer Date: Wed, 29 Oct 2025 20:35:16 +0100 Subject: [PATCH 2/2] Update app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../java/com/freshkeeper/service/product/ProductServiceImpl.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt b/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt index 265cd67..c6d01e7 100644 --- a/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt +++ b/app/src/main/java/com/freshkeeper/service/product/ProductServiceImpl.kt @@ -240,7 +240,6 @@ class ProductServiceImpl onSuccess(updatedFoodItem) coroutineScope.launch { - val householdId = householdService.getHouseholdId() if (householdId != null) { try { val householdDoc =