5.6 KiB
Nästa steg
Förslag på vad vi kan ta tag i nästa gång vi öppnar projektet.
Se README.md för funktionsöversikt och TEKNISK_BESKRIVNING.md för teknisk detaljerinformation.
Status — senast genomgånget: 2026-04-17
| Funktion | Status |
|---|---|
| Inventorie (CRUD, konsumtion, historik) | ✅ Klart |
| Recept (skapa, visa, importera, matchning) | ✅ Klart |
| Snabbimport (URL/PDF/bild/ICA) | ✅ Klart |
| Kvittoimport (Mistral AI, OCR, alias) | ✅ Klart |
| Matplanering (veckovy, inköpslista) | ✅ Klart |
| Matplan — portionsjustering per dag | ✅ Klart |
| Matplan — inventariejämförelse | ✅ Klart |
| Baslager (lista, lägg till, ta bort) | ✅ Klart |
| Admin: Produkter (edit, merge, duplicate, restore, reset) | ✅ Klart |
| Admin: Bulk-kategorisering | ✅ Klart |
| Receptredigering (frontend UX) | ✅ Klart |
| Receptbilder (upload URL) | ✅ Klart |
| Autentisering (JWT, Auth.js v5, User-modell) | ✅ Klart |
| Användarprofil (firstName, lastName, email) | ✅ Klart |
| Produktkategorier — hierarkisk struktur (3 nivåer) | ✅ Klart |
| Taggning av produkter | ✅ Klart |
| Näringsvärden på produkter | ✅ Klart (schema + API) |
| Kategoritilldelning i admin-UI | ✅ Klart |
| Kategori-seed (supplement, idempotent) | ✅ Klart |
| Seed produktdata med kategoritilldelning | ❌ Saknas (002-seed-products.sql.disabled) |
| Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic |
| Användarroller (user / admin) | ❌ Saknas |
| Användarhantering i admin-UI | ❌ Saknas |
Prioriterade förbättringar
1. Seed produktdata med kategoritilldelning
db/init/002-seed-products.sql är inaktiverad (.disabled) tills den uppdateras med rätt categoryId för varje produkt. Utan detta är produktdatabasen tom vid fresh install.
- Gå igenom de ~190 produkterna och tilldela rätt kategori-ID från tabellen
Category(nu inklusive supplement-kategorier) - Aktivera filen igen genom att ta bort
.disabled-suffixet - Kontrollera att varje produkts
categoryIdmatchar mot det ID som genereras i databasen (auto-increment — kör ett SELECT för att verifiera)
2. Matplan — djupare inventariejämförelse i frontend
Backend-endpointen GET /api/meal-plan/inventory-compare?from=...&to=... returnerar ingrediensstatus per dag. Funktionen saknar dock en frontend-vy som tydligt visar "vad behöver jag handla — och vad har jag redan hemma?" aggregerat för hela veckan.
- Visa inköpslistan med tydliga statusindikatorer: ✅ Finns hemma / ⚠️ Delvis / ❌ Saknas
- Möjlig placering: ny flik i matplanen eller sidopanel i veckovy
- Kräver: aggregering av
inventory-compare-svaret per ingrediens över hela veckan
3. Användarroller och användarhantering i admin
Idag har alla inloggade användare samma behörighetsnivå. Behövs:
- Databas: Lägg till
role(enumuser|admin) påUser-modellen i Prisma + migration - Backend: Rollbaserad guard (
@Roles('admin')) — skyddar admin-endpoints; vanliga användare nekas med 403 - Auth: Rollen inkluderas i JWT-tokenen och i Auth.js session-objektet
- Frontend — admin-UI (
/admin/users/): Lista användare, skapa nya konton (namn, e-post, lösenord, roll), ändra roll, avaktivera konto - Frontend — skyddade routes:
/admin/*kräver admin-roll; omdirigerar annars till startsidan
Teknisk skuld och städning
A. CanonicalNameForm och NameForm — ta bort gamla filer
frontend/app/admin/products/NameForm.tsx och CanonicalNameForm.tsx ersattes av EditProductForm.tsx. Kontrollera om de gamla filerna fortfarande importeras och radera dem om inte.
B. Oanvända fält på InventoryItem
Följande fält finns i Prisma-schemat men används varken i backend-endpoints eller frontend-UI:
priority, opened, shelfNote, suitableFor, isOnSale, priceLevel, proteinType, isLeftover
Besluta: implementera stöd för dem eller ta bort via migration.
C. Seed-data i versionshantering
data/matvaror_sverige.csv och data/seed_products.sql ligger lokalt men är inte committade. Bestäm om de ska in i repot (för reproducerbarhet) eller hållas utanför.
D. Enhetstester ✅
Jest + ts-jest är uppsatt. Tester finns för:
normalize-name.ts— 10 testerbase.parser.ts(parseIngredientLine) — 12 testerrecipes.service.ts(normalizeUnit,convertUnit) — 17 tester
Kör med npm test i backend/.
E. Validering av DTO:er i admin-actions
Frontend-server-actions saknar validering på inkommande fält (tom sträng, för lång sträng, osv.). Lägg till enkel trim() + max-längd-kontroll i frontend/app/admin/products/actions.ts.
F. Routing-städning för kvitto och import
/kvitto/page.tsx redirectar till /import?tab=kvitto. /recipes/import/page.tsx redirectar till /import?tab=recept. Om dessa routes inte exponeras i navigeringen kan de tas bort; om de behövs som deep links är redirectarna ok men bör dokumenteras.
Produktdatabasen
Produktdatabasen är just nu tom — seedfilen db/init/002-seed-products.sql.disabled innehåller ~190 svenska baslivsmedel men är inaktiverad tills produkterna har tilldelats rätt categoryId. Nästa naturliga steg:
- Gå igenom produkterna och tilldela kategorier via admin-UI eller uppdatera seed-filen direkt
- Aktivera seed-filen igen (
002-seed-products.sql) för reproducerbarhet vid fresh install - Lägg till fler produkter som dyker upp vid receptimport
- Kontrollera att
canonicalNameär ifyllt för alla produkter