Obrázky katalogu — R2 + D1 seed (bez admina)

Stav dokumentu: Částečně — krok 1 hotový: migrace 0022, skripty r2:seed-catalog-starter:*, soubory v scripts/assets/herbs/ a zápis v kořenovém README.md § R2. Dál lze přidávat další byliny stejným vzorem (bez /admin).

Cíl: mít u vybraných bylin skutečné náhledy v galerii — objekt v R2 (r2_key) a odpovídající řádek v images (alt, typ, licence, pořadí), bez nutnosti čekat na editor v adminu.

Vstup: README.md § Cloudflare R2 · 22-data-model.md (images) · 30-content-guidelines.md §7 (image_type, licence, zdroj) · šablony migrací migrations/0005_r2_smoke_image.sql, migrations/0022_catalog_r2_seed_three_herbs.sql. Admin upload je popsán v 32-admin.md §9 — není součástí tohoto úkolu.

Související UI backlog (zobrazení patičky photographer / license / source_url na kartě): bezpecnost-a-media-stitky.md §3.


0. Hotový krok 1 (reference)

  • Byliny: medunka-lekarska, hermanek-pravy, meta-peprna.
  • Konvence klíče: herbs/<slug>/habitus.jpg (ASCII slug z DB).
  • Migrace: 0022_catalog_r2_seed_three_herbs.sqlphotographer, license, source_url vyplněné dle Commons; u heřmánku je v alt_text upozornění, že Commons snímek je Matricaria recutita, zatímco v katalogu je druh uveden jako Matricaria chamomilla (lze později vyměnit za přesnější fotku).
  • R2: po aplikaci migrace spusť npm run r2:seed-catalog-starter:local nebo …:remote.
  • Atribuce souborů v repu: scripts/assets/herbs/README.md.

1. Jak to funguje (stručně)

  • Worker servíruje binárky z R2 na cestě /media/<r2_key> (segmenty URL-encoded).
  • Tabulka images: herb_id, r2_key, volitelně public_url (externí), image_type, alt_text, caption, photographer, license, source_url, sort_order, …
  • Bez admina: soubor do bucketu přes Cloudflare dashboard nebo CLI wrangler r2 object put; řádek v D1 přes novou migraci INSERT … SELECT id FROM herbs WHERE slug = '…'.

2. Další byliny (doporučený postup)

  1. Vybrat bylinu s jasně licencovanou fotkou (Commons nebo vlastní) — 30-content-guidelines.md §7.
  2. Konvence r2_key: držet se vzoru herbs/<slug>/<role>.jpg (nebo .webp), ASCII, bez mezer.
  3. Nahrát objekt do bucketu soulofherbs-media (dashboard nebo wrangler r2 object put, případně rozšířit npm skript).
  4. Nová migrace INSERT INTO images s license, source_url, alt_text, image_type (slugy s českým překladem v labelImageType — viz app/lib/claim-labels.ts).
  5. Ověření: d1:apply + seed R2 + /byliny/<slug> (404 na /media/… = chybí objekt nebo špatný klíč).

Šablona SQL: migrace 0005 (minimální řádek) nebo 0022 (řádek s licencí a autorem).


3. Checklist

  • Dohodnutá konvence r2_key a složka scripts/assets/herbs/ + README s atribucí.
  • První migrace s více INSERT (3 byliny) + npm skript pro nahrání do R2.
  • U kroku 1 vyplněné alt_text, license, source_url (a fotograf kde šlo).
  • Dokumentace v kořenovém README § R2 a v tomto souboru.
  • Další byliny (rozšíření migrací / dávkové skripty dle potřeby).

4. Akceptace

  • U tří bylin z kroku 1 je po nahrání do R2 na kartě vidět obrázek z /media/herbs/…/habitus.jpg.
  • Žádná závislost na dokončení admin uploadu pro tento seed.

5. Vazby