feat: Enhance README and technical description with quick-import module details and parser architecture
This commit is contained in:
@@ -94,10 +94,43 @@ Klistra in:
|
|||||||
|
|
||||||
**Stödda webbplatser:**
|
**Stödda webbplatser:**
|
||||||
- ICA.se — Recept skrapas automatiskt
|
- ICA.se — Recept skrapas automatiskt
|
||||||
|
- Andra webbplatser — Generic HTML-parser (JSON-LD först, sedan HTML-fallback)
|
||||||
- (PDF-import under utveckling)
|
- (PDF-import under utveckling)
|
||||||
|
|
||||||
**Felmeddelandena vägleder dig:**
|
**Felmeddelandena vägleder dig:**
|
||||||
- "Länken är inte från ICA.se" — Endast ICA stöds för närvarande
|
- "Länken är inte från ICA.se" — Försöker Generic parser istället
|
||||||
|
|
||||||
|
> **Notering:** Snabbimport-logiken är också tillgänglig som en **[standalone microservice](../microservice-importer/README.md)** för integrations- eller API-använding.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Arkitektur: Recipe App + Microservice Importer
|
||||||
|
|
||||||
|
Recipe App är uppbyggd i två komponenter:
|
||||||
|
|
||||||
|
### Recipe App (detta repo)
|
||||||
|
**Fullstack-applikation:** Frontend (Next.js), Backend (NestJS), Databas (MariaDB)
|
||||||
|
|
||||||
|
Innehåller:
|
||||||
|
- Inventorie-hantering (CRUD, konsumtion, history)
|
||||||
|
- Recept-hantering (CRUD, matchning mot inventorie)
|
||||||
|
- Produktadmin (merge, duplicates, canonical names)
|
||||||
|
- **Quick-import** (ICA-skrapning integrerad i `/recipes/create`)
|
||||||
|
|
||||||
|
### Microservice Importer (separat repo)
|
||||||
|
**Standalone-tjänst:** Frontend (Next.js), Backend (NestJS, INGEN databas)
|
||||||
|
|
||||||
|
Innehåller:
|
||||||
|
- **URL-scraping:** ICA.se + generic HTML-parser
|
||||||
|
- **Markdown-parsing:** Samma parser-logik som recipe-app
|
||||||
|
- Eget kontrollpanel på `/import`
|
||||||
|
|
||||||
|
**Användningsfall:**
|
||||||
|
- Extern API-integration (POST `http://microservice:3001/api/quick-import`)
|
||||||
|
- Oberoende snabbimport-webb-UI
|
||||||
|
- Muligt att scalea separat från recipe-app
|
||||||
|
|
||||||
|
**Repo:** [`microservice-importer`](../microservice-importer/)
|
||||||
- "Kunde inte hämta recept från ICA: ..." — Länken är bruten eller receptet kunde inte parsas
|
- "Kunde inte hämta recept från ICA: ..." — Länken är bruten eller receptet kunde inte parsas
|
||||||
- "Du måste ange en URL eller filsökväg" — Fältet var tomt
|
- "Du måste ange en URL eller filsökväg" — Fältet var tomt
|
||||||
|
|
||||||
|
|||||||
+40
-3
@@ -127,10 +127,14 @@ backend/src/
|
|||||||
│ ├── update-product.dto.ts
|
│ ├── update-product.dto.ts
|
||||||
│ ├── merge-products.dto.ts
|
│ ├── merge-products.dto.ts
|
||||||
│ └── update-canonical-name.dto.ts
|
│ └── update-canonical-name.dto.ts
|
||||||
├── quick-import/ # NYT: Snabbimport-modul
|
├── quick-import/ # 🆕 Snabbimport-modul
|
||||||
│ ├── quick-import.controller.ts # POST /api/quick-import
|
│ ├── quick-import.controller.ts # POST /api/quick-import
|
||||||
│ ├── quick-import.service.ts # ICA-skrapning, PDF-stöd
|
│ ├── quick-import.service.ts # ICA-skrapning, URL-parsing
|
||||||
│ └── quick-import.module.ts # Module definition
|
│ ├── quick-import.module.ts # Module definition
|
||||||
|
│ └── parsers/
|
||||||
|
│ ├── base.parser.ts # Abstract RecipeParser class
|
||||||
|
│ ├── ica.parser.ts # ICA.se-specifik parser (JSON-LD)
|
||||||
|
│ └── generic.parser.ts # Fallback-parser (HTML + JSON-LD)
|
||||||
└── recipes/
|
└── recipes/
|
||||||
├── recipes.controller.ts # Recept endpoints
|
├── recipes.controller.ts # Recept endpoints
|
||||||
├── recipes.service.ts # Recept + Markdown-parsing
|
├── recipes.service.ts # Recept + Markdown-parsing
|
||||||
@@ -148,6 +152,22 @@ backend/src/
|
|||||||
- Databasspecifik hälsokontroll (responseTime, connection test)
|
- Databasspecifik hälsokontroll (responseTime, connection test)
|
||||||
- Returnerar statusCode 200 eller 503
|
- Returnerar statusCode 200 eller 503
|
||||||
|
|
||||||
|
**Quick-Import API:** 📌 (Även tillgänglig via [Microservice Importer](../microservice-importer/))
|
||||||
|
- **Endpoint:** `POST /api/quick-import`
|
||||||
|
- **Input:** URL (t.ex. `https://ica.se/recept/...`) eller filsökväg (PDF)
|
||||||
|
- **Process:**
|
||||||
|
1. URL-validering (HTTP fetch med User-Agent)
|
||||||
|
2. Parser-urval baserat på `canHandle(url)`
|
||||||
|
3. HTML-parsing och receptextraktion
|
||||||
|
4. Markdown-konvertering med källlänk i footer
|
||||||
|
- **Parser-arkitektur:**
|
||||||
|
- **Base Parser** (`RecipeParser`): Abstract class med gemensam parseIngredientLine()-logik
|
||||||
|
- Hanterar bråkmängder (1 1/2 dl), parentetiska noter, unit-validering
|
||||||
|
- Kända enheter: g, kg, hg, mg, ml, dl, l, tl, st, tsk, msk, krm, port, efter smak, förp, klyfta, m.fl.
|
||||||
|
- **ICA Parser** (`IcaRecipeParser`): Prioriterar JSON-LD structured data, fallback HTML
|
||||||
|
- **Generic Parser** (`GenericRecipeParser`): Försöker alla webbplatser (JSON-LD → HTML)
|
||||||
|
- **Output:** Markdown-format recepttext (namn, beskrivning, ingredienser, instruktioner, källa)
|
||||||
|
|
||||||
**Inventarie-API:**
|
**Inventarie-API:**
|
||||||
- CRUD för inventarieföremål (produktreferens, kvantitet, enhet, plats, märke, bäst före, mm)
|
- CRUD för inventarieföremål (produktreferens, kvantitet, enhet, plats, märke, bäst före, mm)
|
||||||
- Konsumtionshistorik-tracking (registrera brukat amount och kommentar)
|
- Konsumtionshistorik-tracking (registrera brukat amount och kommentar)
|
||||||
@@ -710,3 +730,20 @@ Konfigureras via `.env` eller `docker compose up`:
|
|||||||
- Recept-delning
|
- Recept-delning
|
||||||
- Nutrition facts
|
- Nutrition facts
|
||||||
- Allergi-tracking
|
- Allergi-tracking
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Framtida arkitektur: Microservice Importer
|
||||||
|
|
||||||
|
Recipe App har ett **companion-projekt** för receptimport: [`microservice-importer`](../microservice-importer/)
|
||||||
|
|
||||||
|
### Nuläge
|
||||||
|
Quick-import-funktionen är för närvarande **integrerad i Recipe App** med full funktionalitet.
|
||||||
|
|
||||||
|
### Framtida möjlighet
|
||||||
|
I framtiden kan snabbimport-logiken extraheras till en **standalone microservice** för:
|
||||||
|
- Oberoende scaling
|
||||||
|
- Enklare API-integration med andra system
|
||||||
|
- Lägre komplexitet (ingen databaskonfiguration)
|
||||||
|
|
||||||
|
Se [microservice-importer README](../microservice-importer/README.md) för komplett dokumentation och deployment-instruktioner när separation blir aktuell.
|
||||||
|
|||||||
Reference in New Issue
Block a user