From 44b4e7ad7378819064afdcb9fa11305875be01c0 Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Wed, 22 Apr 2026 18:17:41 +0200 Subject: [PATCH] feat: update pantry and meal plan to be user-specific; outline required backend changes --- NEXT_STEPS.md | 38 +++++++++++++++++++++++++++++++++++++- next_steps_flutter.md | 23 ++++++++++++++++++----- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/NEXT_STEPS.md b/NEXT_STEPS.md index f5ce359c..004cdb7e 100644 --- a/NEXT_STEPS.md +++ b/NEXT_STEPS.md @@ -19,7 +19,7 @@ | Matplan — portionsjustering per dag | ✅ Klart | | Matplan — inventariejämförelse (backend) | ✅ Klart | | Matplan — inventariejämförelse (frontend-vy) | ✅ Klart (✅/⚠️/❌ integrerat i inköpslistan) | -| Baslager (lista, lägg till, ta bort) | ✅ Klart | +| Baslager (lista, lägg till, ta bort) | ✅ Klart (global v1, user-scope planerad) | | Admin: Produkter (edit, merge, duplicate, restore, reset) | ✅ Klart | | Admin: Bulk-kategorisering | ✅ Klart | | Receptredigering (frontend UX) | ✅ Klart | @@ -57,6 +57,42 @@ --- +## Beslut 2026-04-22 — Pantry och matplan på user-nivå + +Pantry och matplan ska inte vara globala. De ska vara användarspecifika i backend. + +### Varför +- Nuvarande implementation delar baslager och matplan mellan alla användare. +- Det ger felaktig inköpslogik och otydligt ägarskap i multi-user-läge. + +### Krävda backend-ändringar (prio) +1. **PantryItem user-scope i Prisma** +- Lägg till `userId` i `PantryItem` + relation till `User`. +- Ändra unik regel från global `productId` till kombinationen `userId + productId`. +- Lägg index på `userId`. + +2. **Pantry API user-scope** +- `GET /api/pantry` ska returnera inloggad användares baslager. +- `POST /api/pantry` ska skapa för inloggad användare. +- `DELETE /api/pantry/:id` ska bara kunna ta bort poster som ägs av inloggad användare. + +3. **MealPlan user-scope i Prisma och service** +- Lägg till `userId` i `MealPlanEntry` + relation till `User`. +- Ändra unik regel från global `date` till `userId + date`. +- Filtrera `findByRange`, `upsert` och `removeByDate` per inloggad användare. + +4. **Matplanens inventory-compare ska använda user-scope pantry** +- Pantry-uppslag i `inventoryCompare` ska filtreras på samma `userId`. + +### Migrering och release-strategi +1. Ta migration för `PantryItem` + `MealPlanEntry`. +2. Backfill: tilldela befintliga poster till vald default-användare (eller rensa och starta om datan i testmiljö). +3. Uppdatera backend-kontrollers till `@CurrentUser()`-mönster. +4. Verifiera med två testanvändare att data är isolerad. +5. Därefter uppdateras Flutter/Next-klienterna mot de nya kontrakten. + +--- + ## Notering 2026-04-20 ## Notering 2026-04-21 diff --git a/next_steps_flutter.md b/next_steps_flutter.md index 2f449ff4..0c8c0b9f 100644 --- a/next_steps_flutter.md +++ b/next_steps_flutter.md @@ -7,11 +7,17 @@ Relaterade dokument: ## Icke-forhandlingsbara ramar -1. Inget ska tas bort eller andras i `recipe-api`. +1. Inget ska tas bort eller andras i `recipe-api` utom explicit beslutade backend-andringar for anvandarscope i pantry och matplan. 2. Inget ska tas bort eller andras i `recipe-frontend`. 3. Migreringen sker i Flutter-sparet som separat klient mot befintliga API-kontrakt. 4. Next-frontend kor parallellt tills Flutter har verifierad parity i karnfloden. +## Beslut 2026-04-22 - User-scope for pantry och matplan + +- Pantry och matplan ska vara per anvandare, inte globala. +- Detta kraver backend-andringar i `recipe-api` innan Flutter kan na full parity for dessa floden. +- Flutter ska folja de nya kontrakten nar de finns pa plats, utan klientspecifik speciallogik. + ## Malbild for v1 (funktionell parity) For v1 ska dessa floden vara stabila i Flutter: @@ -26,6 +32,12 @@ Adminfloden migreras efter att ovanstaende ar verifierat. ## Prioriterad plan (ordning) +## Fas 0 - Backend-forarbete for user-scope (ny) +- Gor `PantryItem` user-scopad (userId + productId unik per anvandare). +- Gor matplan user-scopad och filtrera list/upsert/delete per inloggad anvandare. +- Uppdatera matplanens inventory-jamforelse till anvandarspecifikt pantry. +- Publicera uppdaterade API-kontrakt innan vidare Flutter-parity for matplan/baslager. + ## Fas 1 - Stabil app-shell (forst) - Bygg tydlig auth-gate i router. - Centralisera API-fel (401/403/500) i ett gemensamt lager. @@ -70,7 +82,8 @@ For varje feature: 2. Mappa modeller robust (null-safe, fallback-falt, typskillnader). 3. Kontrollera felbanor innan UI-polish. -Ingen backendforandring goras for att "fa Flutter att funka". +Ingen ad-hoc backendforandring goras for att "fa Flutter att funka". +Backend-andringar for user-scope i pantry/matplan ar explicit beslutade och ska goras kontrollerat forst. ## Kvalitetsgrind (Definition of Done) @@ -90,9 +103,9 @@ En feature ar klar nar allt nedan ar uppfyllt: ## Nasta konkreta sprint (rekommenderad) -1. Fas 1: app-shell hardening. -2. Fas 2: auth parity helt klar. -3. Fas 3 (del 1): receptdetalj + skapa recept. +1. Fas 0: backend-andringar for user-scope i pantry/matplan. +2. Fas 1: app-shell hardening. +3. Fas 2: auth parity helt klar. 4. Smoke-test pa testdomanen och avstamning. ## Tumregel