Files
recipe-app/NEXT_STEPS.md
T

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 categoryId matchar 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 (enum user | 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 tester
  • base.parser.ts (parseIngredientLine) — 12 tester
  • recipes.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