4.8 KiB
Nasta steg
Detta ar huvudroadmap for Recipe App. All detaljhistorik och djup teknisk bakgrund finns i respektive tekniska dokument.
Dokumentstatus (2026-05-03)
- Fokus: en gemensam prioriteringslista for produkt, utveckling och drift.
- Delplaner for underomraden ska referera hit, inte duplicera hela roadmapen.
Nyligen klart
- Kvittoimport: förbättrad antal/förpackningsinferens och robustare regelmotor.
- Kategorisering: utökade brödregler + contradiction guards och nya regler för pasta, grädde, ägg, juice, godis, och potatis.
- Kategoriträd: nya noder
KorvbrödunderFastfoodbrödochGräddeunderMatlagningi seed-data. - Flutter: klientpersistens för pågående kvittoimport.
- Produktmodell: user-scoped produkter och seed renodlad till kategorier.
- Testinfrastruktur: parametriserade enhetstester för kvittoimport (18 testfall).
- CI/CD: GitHub Actions-pipeline för automatiserad testkörning vid push och pull request.
- Node.js versionsparitet:
package-lock.jsonspåras nu i git för båda repos; Dockerfiles körnpm ci— reproducerbara byggen i alla miljöer. - PDF-kvittoimport stabiliserad:
pdf-parseCJS-fix +pdfjs-dist/legacyfallback löserDOMMatrix-fel i Node.js. - Felkods-forwarding fixad:
receipt-import.service.tsi recipe-api vidarebefordrar nu 503 från importer-api somServiceUnavailableExceptionistället för att alltid returnera 400. - AI-optimering (PDF):
looksLikeReceiptProductLine()i importer-api filtrerar bort header/footer-rader — Mistral anropas enbart för rader som faktiskt kan vara produkter. - Receptparser hardening: gemensam parserutility, intervall/parantes/brak-forbattringar samt testtackning for parsern.
- Receptsakerhet och dataintegritet: aktiv-produktvalidering, transaktion vid update, orphan-fil-cleanup och striktare owner-hantering av legacy-recept.
- Alternativa ingredienser (Option A): lagring i
alternativeProductIds(JSON), matchning mot flera alternativ och lagerkoll som inkluderar alternativ. - Flutter felhantering: kopierbara felmeddelanden i snackbar + global textselektion for enklare support/felsokning.
Huvudprioriteringar
- Aliasstrategi i kvittoimport: user-scope som standard, global fallback via admin.
- Stabilisera bildimport och diagnostik i alla miljoer.
- Lokalisera kvarvarande stora Flutter-vyer i import/inventarie.
- Forbereda avancerad AI-integration med tydlig loggning/audit.
- Pa borja EAN-stod via Open Food Facts.
Beslut som styr arbetet
- User-scope for data som ar personligt agd.
- Backend-kontrakt ar sanningskalla; klienter foljer kontrakten.
- Importfunktionalitet ar delegerad till microservice-importer dar det ar beslutat.
Framtida förbättringsområden
Säkerhet: httpOnly cookies för Flutter Web
Idag lagras JWT-token i localStorage via SharedPreferences i Flutter Web. För att minska XSS-risk bör backend och Flutter Web stödja httpOnly-cookies för tokens. Detta kräver:
- Backend: endpoint för att sätta och läsa httpOnly-cookie vid login.
- Flutter Web: anpassning så att token inte läses från localStorage utan session hanteras via cookie. Detta är en större arkitekturändring och endast relevant för webben.
Säkerhet: Gitea webhook-signaturvalidering
Om Gitea-webhooks används, implementera endpoint i backend som validerar X-Gitea-Signature med timing-safe jämförelse. Lägg till GITEA_WEBHOOK_SECRET i .env.example. Se säkerhetshärdningsplanen för kodexempel.
Alternativa ingredienser — migrering till relationsmodell (Option B)
Nuläge: RecipeIngredient.alternativeProductIds lagras som JSON-kolumn (Option A).
Detta fungerar men saknar referensintegritet — om en alternativ produkt tas bort uppdateras inte kolumnen automatiskt.
Framtida lösning: Ersätt JSON-kolumnen med en separat tabell:
model RecipeIngredientAlternative {
id Int @id @default(autoincrement())
recipeIngredientId Int
recipeIngredient RecipeIngredient @relation(fields: [recipeIngredientId], references: [id], onDelete: Cascade)
productId Int
product Product @relation(fields: [productId], references: [id], onDelete: Cascade)
}
Fördelar: FK-integritet, möjlig sortering/prioritering av alternativ, lättare att querrya. Förutsättning: migration som konverterar befintlig JSON-data till rader i tabellen.
Relaterade dokument
README.md- anvandarperspektiv.TEKNISK_BESKRIVNING.md- teknisk huvudreferens.produktlansering.md- releasechecklista.migrering-MSI.md- migreringshistorik for importer.flutter/next_steps_flutter.md- Flutter-specifik plan._archive/microservice-ai/AI-FUNKTIONER.md- AI-strategi och historik.