Files
recipe-app/NEXT_STEPS.md
T

5.3 KiB
Raw Blame History

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
Baslager (lista, lägg till, ta bort) Klart
Admin: Produkter (edit, merge, duplicate, restore, reset) 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
Portionsjustering Saknas
Matplan — inventariejämförelse Saknas
Seed produktdata med kategoritilldelning Saknas (002-seed-products.sql.disabled)
Användarspecifika produkter (UserProduct) ⚠️ Schema klart, UI basic

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
  • Aktivera filen igen genom att ta bort .disabled-suffixet
  • Alternativt: bygg ett admin-verktyg för bulk-kategorisering

2. Portionsjustering av recept

Recept lagras utan portionsangivelse. Lägg till ett servings-fält och låt användaren justera antal portioner i receptvyn — ingrediensmängderna räknas om proportionellt (t.ex. 4 → 6 pers: × 1,5).

  • Databas: servings Int?Recipe i Prisma + migration
  • Backend: servings exponeras i RecipeDto, sätts vid create/update
  • Frontend (app/recipes/[id]/): räknare (+ / ) bredvid ingredienslistan, beräkning i klientkomponent utan extra API-anrop
  • Receptskapande (write/): lägg till grundportioner-fält
  • Matplan (app/matplan/): inköpslistan justeras efter önskat portionsantal per dag

3. Matplanering — jämförelse mot inventariet

Veckovy och inköpslista fungerar. Nästa steg är att visa vilka ingredienser på inköpslistan som redan finns hemma och i vilken mängd — liknande receptvyns inventory-preview. Implementeras via GET /api/recipes/:id/inventory-preview per recept, aggregerat på veckonivå.

4. Bulk-kategorisering av produkter i admin

Admin-UI:t tillåter idag att sätta kategori per produkt. För att effektivt kategorisera hundratals produkter behövs:

  • Filtervy för okategoriserade produkter
  • Möjlighet att sätta kategori på flera produkter samtidigt (bulk-select)

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