# Nästa steg > Förslag på vad vi kan ta tag i nästa gång vi öppnar projektet. > Se [README.md](README.md) för funktionsöversikt och [TEKNISK_BESKRIVNING.md](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å `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) ### 5. 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