# Zbrane-Reiner-Web Web Martina Reinera — prodej zbraní, střeliva a doplňků. Prezentace s vlastní administrací obsahu postavená na [Payload CMS 3](https://payloadcms.com/) (Next.js) nad SQLite. Návrh platformy a zdůvodnění všech rozhodnutí: [NAVRH-PLATFORMY.md](NAVRH-PLATFORMY.md). ## Rychlý start ```bash cp .env.example .env # vyplň PAYLOAD_SECRET pnpm install pnpm payload migrate # založí databázi v data/ pnpm dev # http://localhost:3000 ``` První účet se založí sám při prvním otevření `/admin`. > Node se v repu nepředpokládá nainstalovaný globálně — pokud ho nemáš, jde > všechno pustit v kontejneru: > `docker run --rm -it -v "$PWD:/app" -w /app -p 3000:3000 node:22-alpine sh` ## Struktura ``` src/ ├─ collections/ # schéma obsahu — Products, Media, Pages, Users ├─ app/(frontend)/ # veřejný web │ ├─ page.tsx # výpis nabídky │ ├─ nabidka/[slug]/ # detail položky │ ├─ [slug]/ # statické stránky z kolekce Pages │ └─ api/health/ # endpoint pro Docker HEALTHCHECK ├─ app/(payload)/ # administrace, generuje Payload ├─ lib/format.ts # formátování ceny a stavu └─ payload.config.ts migrations/ # verzované DB migrace, commitují se ``` ## Příkazy | Příkaz | Co dělá | |---|---| | `pnpm dev` | vývojový server s hot-reloadem | | `pnpm lint` | ESLint nad `src` a `tests` | | `pnpm test` | integrační testy (vitest) | | `pnpm build` | produkční build, uvnitř i kontrola typů | | `pnpm generate:types` | přegeneruje `src/payload-types.ts` ze schématu | | `pnpm payload migrate:create ` | vytvoří migraci po změně schématu | | `pnpm payload migrate` | přehraje migrace | ## Změna schématu obsahu Schéma se nedomýšlí za běhu (`push: false`) — po každé úpravě kolekce: ```bash pnpm generate:types pnpm payload migrate:create nazev-zmeny pnpm payload migrate ``` Migraci commitni. V produkci se přehraje sama při startu kontejneru. Výjimkou jsou testy, kde se schéma odvodí z konfigurace, takže každý běh startuje nad prázdnou databází. ## Nasazení CI (Gitea Actions) postaví image a nahraje ho do Gitea registry; server si ho jen stáhne. Celý postup včetně větví, tagů a rollbacku je v [NAVRH-PLATFORMY.md, sekce 7](NAVRH-PLATFORMY.md#7-deploy). ```bash # na serveru docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -d ``` | Větev | Prostředí | Tag image | Port | |---|---|---|---| | `release` | produkce | `latest` | 3000 | | `devel` | staging | `devel` | 3001 | ## Data a zálohy Veškerý stav jsou dva adresáře — `data/` (SQLite) a `media/` (nahrané obrázky), v produkci Docker volumes. Databáze je **jediná kopie obsahu**, v gitu není. Zálohování viz [NAVRH-PLATFORMY.md, sekce 8](NAVRH-PLATFORMY.md#8-zálohy).