fix: update seed documentation to clarify source and process for categories and products

This commit is contained in:
Nils-Johan Gynther
2026-04-19 23:21:46 +02:00
parent 924ef649fc
commit 1131745666
2 changed files with 52 additions and 19 deletions
+19 -9
View File
@@ -664,18 +664,28 @@ model Category {
Hierarkin har 3 nivåer: **Huvudkategori → Underkategori → Typ**
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å 13) 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:
```bash
docker exec -i recipe-db mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE" \
< db/seeds/categories_supplement.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.
**Körs manuellt på servern:**
```bash
DB_PASS=$(grep MARIADB_ROOT_PASSWORD .env | cut -d= -f2)
docker exec -i recipe-db mariadb -uroot -p"$DB_PASS" recipe_app < db/seeds/seed_all.sql
```
> **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
```prisma