6.1 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 |
| 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 |
| 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 - 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?påRecipei Prisma + migration - Backend:
servingsexponeras iRecipeDto, 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)
5. 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