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 — portionsjustering per dag | ✅ Klart |
|
||||||
| Matplan — inventariejämförelse (backend) | ✅ Klart |
|
| Matplan — inventariejämförelse (backend) | ✅ Klart |
|
||||||
| Matplan — inventariejämförelse (frontend-vy) | ✅ Klart (✅/⚠️/❌ integrerat i inköpslistan) |
|
| 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: Produkter (edit, merge, duplicate, restore, reset) | ✅ Klart |
|
||||||
| Admin: Bulk-kategorisering | ✅ Klart |
|
| Admin: Bulk-kategorisering | ✅ Klart |
|
||||||
| Receptredigering (frontend UX) | ✅ 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-20
|
||||||
|
|
||||||
## Notering 2026-04-21
|
## Notering 2026-04-21
|
||||||
|
|||||||
+18
-5
@@ -7,11 +7,17 @@ Relaterade dokument:
|
|||||||
|
|
||||||
## Icke-forhandlingsbara ramar
|
## 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`.
|
2. Inget ska tas bort eller andras i `recipe-frontend`.
|
||||||
3. Migreringen sker i Flutter-sparet som separat klient mot befintliga API-kontrakt.
|
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.
|
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)
|
## Malbild for v1 (funktionell parity)
|
||||||
|
|
||||||
For v1 ska dessa floden vara stabila i Flutter:
|
For v1 ska dessa floden vara stabila i Flutter:
|
||||||
@@ -26,6 +32,12 @@ Adminfloden migreras efter att ovanstaende ar verifierat.
|
|||||||
|
|
||||||
## Prioriterad plan (ordning)
|
## 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)
|
## Fas 1 - Stabil app-shell (forst)
|
||||||
- Bygg tydlig auth-gate i router.
|
- Bygg tydlig auth-gate i router.
|
||||||
- Centralisera API-fel (401/403/500) i ett gemensamt lager.
|
- 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).
|
2. Mappa modeller robust (null-safe, fallback-falt, typskillnader).
|
||||||
3. Kontrollera felbanor innan UI-polish.
|
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)
|
## Kvalitetsgrind (Definition of Done)
|
||||||
|
|
||||||
@@ -90,9 +103,9 @@ En feature ar klar nar allt nedan ar uppfyllt:
|
|||||||
|
|
||||||
## Nasta konkreta sprint (rekommenderad)
|
## Nasta konkreta sprint (rekommenderad)
|
||||||
|
|
||||||
1. Fas 1: app-shell hardening.
|
1. Fas 0: backend-andringar for user-scope i pantry/matplan.
|
||||||
2. Fas 2: auth parity helt klar.
|
2. Fas 1: app-shell hardening.
|
||||||
3. Fas 3 (del 1): receptdetalj + skapa recept.
|
3. Fas 2: auth parity helt klar.
|
||||||
4. Smoke-test pa testdomanen och avstamning.
|
4. Smoke-test pa testdomanen och avstamning.
|
||||||
|
|
||||||
## Tumregel
|
## Tumregel
|
||||||
|
|||||||
Reference in New Issue
Block a user