feat: update pantry and meal plan to be user-specific; outline required backend changes

This commit is contained in:
Nils-Johan Gynther
2026-04-22 18:17:41 +02:00
parent 07ed164112
commit 44b4e7ad73
2 changed files with 55 additions and 6 deletions
+37 -1
View File
@@ -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
View File
@@ -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