fix(inkop+recept): delvis-kop, radera-vara, bort med plattformen-taggen

- Inkopslista /complete: kopte (markerade) varor laggs i lagret OCH tas bort
  ur listan; OMARKERADE varor blir kvar (handla i flera butiker). Listan
  arkiveras forst nar den ar tom. Tidigare markerades HELA listan completed
  sa allt forsvann.
- Ny radera-knapp (x) per vara med bekraftelse - ta bort nagot man angrat
  utan att kopa det (DELETE-endpointen fanns redan).
- Bort med '✓ plattformen'-taggen pa recept + bladdra (satt pa nastan alla
  editorial-recept och sag efterblivet ut). Namn visas fortfarande bara for
  anvandarskapade recept (creatorDisplayName).

Typecheck: api + mobil gron.
This commit is contained in:
Claude
2026-08-19 00:52:10 +00:00
parent 242e09d59b
commit fab8fa5ba9
4 changed files with 60 additions and 21 deletions
+23 -4
View File
@@ -258,10 +258,29 @@ export async function shoppingRoutes(app: FastifyInstance) {
}
}
// Ta bort de köpta (markerade) varorna de ligger nu i lagret. OMARKERADE
// varor blir kvar i listan (man kan handla i flera butiker och radera själv).
await app.db
.update(schema.shoppingLists)
.set({ status: "completed", updatedAt: new Date() })
.where(eq(schema.shoppingLists.id, id));
.delete(schema.shoppingListItems)
.where(
and(
eq(schema.shoppingListItems.shoppingListId, id),
eq(schema.shoppingListItems.checked, true),
),
);
// Markera hela listan som klar först när den är tömd; annars aktiv för fortsatt handling.
const remainingItems = await app.db
.select({ id: schema.shoppingListItems.id })
.from(schema.shoppingListItems)
.where(eq(schema.shoppingListItems.shoppingListId, id));
const remaining = remainingItems.length;
if (remaining === 0) {
await app.db
.update(schema.shoppingLists)
.set({ status: "completed", updatedAt: new Date() })
.where(eq(schema.shoppingLists.id, id));
}
await emitEvent(app.db, {
type: "SHOPPING_COMPLETED",
@@ -270,7 +289,7 @@ export async function shoppingRoutes(app: FastifyInstance) {
householdId: list.householdId,
correlationId: req.correlationId,
});
return { ok: true, itemsAddedToInventory: added };
return { ok: true, itemsAddedToInventory: added, remaining };
});
}