feat: update pantry and meal plan to be user-specific; outline required backend changes
This commit is contained in:
+37
-1
@@ -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
|
||||
|
||||
+18
-5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user