fix: update seed documentation to clarify source and process for categories and products
This commit is contained in:
+33
-10
@@ -29,11 +29,11 @@
|
|||||||
| SessionProvider i root layout | ✅ Klart |
|
| SessionProvider i root layout | ✅ Klart |
|
||||||
| Användarprofil (firstName, lastName, email) | ✅ Klart |
|
| Användarprofil (firstName, lastName, email) | ✅ Klart |
|
||||||
| Produktkategorier — hierarkisk struktur (3 nivåer) | ✅ Klart |
|
| Produktkategorier — hierarkisk struktur (3 nivåer) | ✅ Klart |
|
||||||
| Kategori-seed (supplement, idempotent) | ✅ Klart |
|
| Kategori-seed (seed_all.sql, komplett träd, enda sanningskällan) | ✅ Klart |
|
||||||
| Kategoritilldelning i admin-UI | ✅ Klart |
|
| Kategoritilldelning i admin-UI | ✅ Klart |
|
||||||
| Taggning av produkter | ✅ Klart |
|
| Taggning av produkter | ✅ Klart |
|
||||||
| Näringsvärden på produkter | ✅ Klart (schema + API) |
|
| Näringsvärden på produkter | ✅ Klart (schema + API) |
|
||||||
| Seed produktdata med kategoritilldelning | ⚠️ Script klart, ej aktiverat i init |
|
| Seed produktdata med kategoritilldelning | ✅ Klart (seed_all.sql) |
|
||||||
| Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic |
|
| Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic |
|
||||||
| Användarroller (user / admin) | ✅ Klart |
|
| Användarroller (user / admin) | ✅ Klart |
|
||||||
| Användarhantering i admin-UI | ✅ Klart |
|
| Användarhantering i admin-UI | ✅ Klart |
|
||||||
@@ -54,15 +54,38 @@
|
|||||||
|
|
||||||
## Prioriterade förbättringar
|
## Prioriterade förbättringar
|
||||||
|
|
||||||
### 1. Seed-data (002-seed-products.sql)
|
### 1. ICA-skraparen missar receptbild
|
||||||
**Mål:** Möjliggöra demo och ny server utan manuell datainmatning.
|
**Problem:** Vid import av ICA-recept via URL hämtas inte receptbilden korrekt.
|
||||||
|
|
||||||
`db/init/002-seed-products.sql` är inaktiverad (`.disabled`) tills produkterna har rätt `categoryId`. Skript för kategorimappning finns i `db/seeds/`:
|
- Felsök parsern i `recipe-document-converter/src/parser.ts` — kontrollera att ICA:s bild-selektor fortfarande matchar sidans HTML-struktur
|
||||||
- Kör `db/seeds/categories_supplement.sql` → lägger till saknade kategorier
|
- ICA kan ha ändrat klassnamn eller lazy-load-mekanism sedan skraparen skrevs
|
||||||
- Kör `db/seeds/seed_product_categories.sql` → kopplar ~190 produkter till rätt kategori
|
- Verifiera med ett konkret ICA-recept-URL och logga vad `imageUrl` returnerar
|
||||||
- Verifiera att mappningarna ser rätt ut i admin-UI (filtrera på okategoriserade)
|
|
||||||
- Generera en ny `002-seed-products.sql` med korrekt `categoryId` per rad (via `SELECT` mot live-db)
|
### 2. Seed-data ✅
|
||||||
- Ta bort `.disabled`-suffixet och testa fresh install
|
**Klart.** `db/seeds/seed_all.sql` är den enda sanningskällan för kategorier och produkter.
|
||||||
|
|
||||||
|
Filen:
|
||||||
|
- TRUNCATEar `Category` och nollställer `Product.categoryId`
|
||||||
|
- Bygger hela kategoriträdet (nivå 1–3) utan dubbletter
|
||||||
|
- Insertar ~190 produkter (INSERT IGNORE)
|
||||||
|
- Kopplar produkterna till rätt kategori via JOIN-subqueries
|
||||||
|
|
||||||
|
Körs manuellt: `docker exec -i recipe-db mariadb -uroot -p"$DB_PASS" recipe_app < db/seeds/seed_all.sql`
|
||||||
|
|
||||||
|
### 2. Refactor: seed_all.sql som del av fresh install
|
||||||
|
**Mål:** Fresh install ska inte kräva ett manuellt seed-steg.
|
||||||
|
|
||||||
|
Nuläge:
|
||||||
|
- `db/init/001-init.sql` (MariaDB auto-init) skapar bara en bootstrap-check-tabell
|
||||||
|
- Prisma-migrationen `20260417310000_add_category_tree` seedar kategorier en gång, men seed_all.sql skriver över dem
|
||||||
|
- `seed_all.sql` körs **inte** automatiskt vid deploy eller fresh install
|
||||||
|
|
||||||
|
Alternativ:
|
||||||
|
- **Alt A:** Flytta seed_all.sql-logiken till `db/init/001-init.sql` — körs automatiskt av MariaDB-containern vid första start
|
||||||
|
- **Alt B:** Skapa en `prisma/seed.ts` som körs via `prisma db seed` — standard NestJS/Prisma-mönster, kan inkluderas i deploy.sh
|
||||||
|
- **Alt C:** Lägg till `seed_all.sql` som ett steg i `deploy.sh` (körs alltid, idempotent p.g.a. TRUNCATE+INSERT IGNORE)
|
||||||
|
|
||||||
|
Oavsett alternativ bör de gamla kategori-INSERTs i `20260417310000_add_category_tree/migration.sql` tas bort eller kommenteras ur för att undvika förvirring.
|
||||||
|
|
||||||
### 2. Användarroller och full användarhantering ✅
|
### 2. Användarroller och full användarhantering ✅
|
||||||
**Klart.**
|
**Klart.**
|
||||||
|
|||||||
+19
-9
@@ -664,18 +664,28 @@ model Category {
|
|||||||
Hierarkin har 3 nivåer: **Huvudkategori → Underkategori → Typ**
|
Hierarkin har 3 nivåer: **Huvudkategori → Underkategori → Typ**
|
||||||
Exempelträd: `Mejeri, ost & ägg → Mjölk → Laktosfri mjölk`
|
Exempelträd: `Mejeri, ost & ägg → Mjölk → Laktosfri mjölk`
|
||||||
|
|
||||||
#### Kategori-seed
|
#### Kategori- och produktseed
|
||||||
|
|
||||||
Kategorier seedas på två sätt:
|
All seed-data för kategorier och produkter hanteras av **`db/seeds/seed_all.sql`** — den enda sanningskällan.
|
||||||
|
|
||||||
1. **Migrationen** `20260417310000_add_category_tree/migration.sql` — seedar grundläggande kategorier vid `prisma migrate deploy` (körs bara en gång).
|
**Vad filen gör:**
|
||||||
|
1. **TRUNCATE `Category`** + nollställer `Product.categoryId` — rensar alla ev. gamla/duplicerade kategorier
|
||||||
|
2. **Bygger upp hela kategoriträdet** (nivå 1–3) med rena `INSERT` — exakt en rad per kategori, inga dubbletter möjliga
|
||||||
|
3. **`INSERT IGNORE` ~190 produkter** — hoppar över produkter som redan finns
|
||||||
|
4. **`UPDATE Product SET categoryId`** — kopplar produkterna till rätt kategori via JOIN-subqueries
|
||||||
|
|
||||||
2. **`db/seeds/categories_supplement.sql`** — idempotent supplementfil med ytterligare kategorier (använder `INSERT IGNORE`). Körs automatiskt av `deploy.sh` vid varje deploy:
|
**Körs manuellt på servern:**
|
||||||
```bash
|
```bash
|
||||||
docker exec -i recipe-db mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE" \
|
DB_PASS=$(grep MARIADB_ROOT_PASSWORD .env | cut -d= -f2)
|
||||||
< db/seeds/categories_supplement.sql
|
docker exec -i recipe-db mariadb -uroot -p"$DB_PASS" recipe_app < db/seeds/seed_all.sql
|
||||||
```
|
```
|
||||||
Filen är säker att köra flera gånger — befintliga kategorier hoppas över. Lägg till nya kategorier i slutet av filen och kör `deploy.sh` för att applicera dem.
|
|
||||||
|
> **OBS:** Migrationen `20260417310000_add_category_tree/migration.sql` innehåller fortfarande gamla kategori-INSERTs från ursprungsimplementationen. Dessa kör en gång vid `prisma migrate deploy` men seed_all.sql nollställer och skriver över dem vid nästa körning. Se NEXT_STEPS.md för planerat refactor-arbete.
|
||||||
|
|
||||||
|
> **OBS:** Om `InventoryItem`-rader pekar på produkter som inte längre finns (t.ex. efter TRUNCATE av Product) uppstår Prisma-felet "Field product is required". Rensa orphan-rader med:
|
||||||
|
> ```sql
|
||||||
|
> DELETE FROM InventoryItem WHERE productId NOT IN (SELECT id FROM Product);
|
||||||
|
> ```
|
||||||
|
|
||||||
### Product
|
### Product
|
||||||
```prisma
|
```prisma
|
||||||
|
|||||||
Reference in New Issue
Block a user