Files
recipe-app/NEXT_STEPS.md
T

5.7 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-18

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 (backend) Klart
Matplan — inventariejämförelse (frontend-vy) Klart (/⚠️/ integrerat i inköpslistan)
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
Kategori-seed (supplement, idempotent) Klart
Kategoritilldelning i admin-UI Klart
Taggning av produkter Klart
Näringsvärden på produkter Klart (schema + API)
Seed produktdata med kategoritilldelning ⚠️ Script klart, ej aktiverat i init
Användarspecifika produkter (UserProduct) ⚠️ Schema klart, UI basic
Användarroller (user / admin) Saknas
Användarhantering i admin-UI Saknas
Teknisk skuld — oanvända InventoryItem-fält Klart (migration 20260418)
Teknisk skuld — redirect-routes städade Klart
Avancerad AI-integration (veckoplanering, kampanjdata) Planerad

Prioriterade förbättringar

1. Seed-data (002-seed-products.sql)

Mål: Möjliggöra demo och ny server utan manuell datainmatning.

db/init/002-seed-products.sql är inaktiverad (.disabled) tills produkterna har rätt categoryId. Skript för kategorimappning finns i db/seeds/:

  • Kör db/seeds/categories_supplement.sql → lägger till saknade kategorier
  • Kör db/seeds/seed_product_categories.sql → kopplar ~190 produkter till rätt kategori
  • Verifiera att mappningarna ser rätt ut i admin-UI (filtrera på okategoriserade)
  • Generera en ny 002-seed-products.sql med korrekt categoryId per rad (via SELECT mot live-db)
  • Ta bort .disabled-suffixet och testa fresh install

2. Användarroller

Mål: Säkerställa att endast behöriga användare har admin-rättigheter.

Idag har alla inloggade användare samma behörighetsnivå — ett säkerhetsproblem inför lansering.

  • 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

3. Matplan-vy (frontend-polish)

Klart.

Inköpslistan och inventariejämförelsen är sammanslagna till en enhetlig vy med tre statusnivåer:

  • Saknas helt — visar hur mycket som behövs köpas
  • ⚠️ Delvis hemma — visar hur mycket mer som behövs + vad som finns
  • Finns hemma — markeras nedtonat, ingen köpindikering

Listan sorteras automatiskt: saknade ingredienser överst, hemma-ingredienser underst. En sammanfattningsrad visar totalt antal per statuskategori.

4. Teknisk skuld (underhåll)

Mål: Minska komplexitet och risk för buggar.

A. CanonicalNameForm och NameForm

Filerna var redan borttagna — inga aktiva imports hittades. Inget att göra.

B. Oanvända fält på InventoryItem

Följande 6 fält togs bort via Prisma-migration (20260418000000_remove_unused_inventory_fields): priority, shelfNote, isOnSale, priceLevel, proteinType, isLeftover

  • Schema, DTOs (create + update), service och frontend-typen är städade.
  • opened och suitableFor behölls — de används i UI.

C. Validering av DTO:er i admin-actions

Redan implementerat — trim() + max 100 tecken på alla fält i actions.ts. Inget att göra.

D. Routing-städning för kvitto och import

frontend/app/kvitto/page.tsx och frontend/app/recipes/import/page.tsx är borttagna. /import täcker båda use-cases via flikar.

E. Seed-data i versionshantering

data/matvaror_sverige.csv och data/seed_products.sql behålls i git för reproducerbarhet. Inga ändringar i .gitignore.

5. Avancerad AI-integration

Mål: Smarta receptförslag och veckoplanering baserat på inventarie och kampanjdata.

Nuvarande AI-funktionalitet (Mistral för kvittotolkning) är ett bra fundament. Nästa steg:

  • Receptförslag utifrån vad som finns hemma ("Vad ska jag laga idag?")
  • Veckoplanering med hänsyn till kampanjpriser (kräver extern datakälla)
  • Kräver: tydlig API-design, kostnadskontroll och eventuellt modellval per use-case

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/.