6.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 |
| Baslager (lista, lägg till, ta bort) | ✅ Klart |
| Admin: Produkter (edit, merge, duplicate, restore) | ✅ Klart |
| Receptredigering (frontend UX) | ⚠️ Delvis |
| Receptbilder (upload UI) | ⚠️ Delvis |
| Portionsjustering | ❌ Saknas |
| Produktkategorier — fast lista | ❌ Saknas |
| Receptlista — filtrering & kortvy | ❌ Saknas |
| Matplan — inventariejämförelse | ❌ Saknas |
| Taggning av produkter | ❌ Saknas |
Prioriterade förbättringar
1. Receptredigering — verifiera och slutför frontend-flödet
Backend (PATCH /api/recipes/:id) är fullt implementerat och hanterar namn, beskrivning, instruktioner, imageUrl och ingredienser. Redigeringskoden i app/recipes/[id]/RecipeDetailClient.tsx finns men flödet för spara/avbryt behöver verifieras och eventuellt slutföras. /recipes/[id]/edit/page.tsx redirectar i dag tillbaka till detaljsidan — ta bort den omdirigering om redigering sker inline.
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. Produktkategorier — definiera en fast lista
Kategorier skrivs in som fritext i admin. Byt till en dropdown med fördefinierade kategorier (t.ex. "Mejeri, ost & ägg", "Kött, chark & fågel", "Frukt & Grönt") för konsistent data och bättre gruppering i baslagervyn.
5. Receptbilder — upload-UI i frontend
Backend har POST /api/recipes/:id/image som tar emot en URL, laddar ner och optimerar bilden. imageUrl finns i databasen och formuläret i write/WriteRecipePage.tsx har redan ett imageUrl-fält. Saknas: ett upload-flöde eller URL-inmatning med förhandsgranskning i receptdetaljvyn (app/recipes/[id]/RecipeDetailClient.tsx).
6. Filtrering och kortvy för receptlistan
Receptlistan (app/recipes/RecipeGrid.tsx) är en platt lista utan filter. Lägg till:
- Söka på namn — klientside
- Sortera på namn A–Ö eller senast tillagd — klientside
- Kortrutnät med receptbild, namn och eventuellt portionsantal (efter att #2 är klar)
7. Utökad databas med taggning
Lägg till stöd för taggar, underkategorier och varumärke direkt på produkter. Möjliggör filtrering, sökning och rekommendationer baserade på taggar.
Schemaändringar (Prisma):
Product— lägg tillsubcategory String?ochbrand String?(behållcanonicalName)Tag— ny modell:id,name @uniqueProductTag— ny relationstabell (many-to-many:Product ↔ Tag)
Implementeringssteg:
- Uppdatera
backend/prisma/schema.prismamed nya modeller och relationer - Kör migration:
docker exec recipe-api npm exec prisma migrate dev --name add_tags_subcategory_brand - Skapa seed-fil (
data/seed_tags.sql) med taggar och kopplingar - Kör seed-filen mot databasen
- Exponera
tags,subcategory,brandi produkt-DTOs ochGET /api/products(lägg till?tag=och?subcategory=som filterparametrar) - Admin: lägg till tagg-hantering och underkategori-fält
- Baslager/produktlista: filtrera per tagg eller underkategori
Rekommenderade taggar: ekologisk, svensk, laktosfri, glutenfri, vegan, nötfri, säsong, rökt, premium, lamm, korv, färs, m.fl.
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
193 svenska produkter är inseedad. Nästa naturliga steg:
- Lägg till fler saknade produkter som dyker upp vid receptimport
- Gå igenom produkter utan
canonicalNamei admin och fyll i dem - Kontrollera att
categoryär ifyllt för alla produkter (för bättre gruppering i baslager)