Scaffold webu na Payload CMS 3 + Next.js nad SQLite
CI / test (push) Failing after 1m42s
CI / build-and-push (push) Has been skipped

Kostra prezentace s vlastní administrací pro Martina Reinera.

Obsah:
- kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí),
  Media se zmenšeninami, Pages, Users bez veřejné registrace
- veřejná část: výpis nabídky, detail položky, statické stránky
- /api/health pro Docker HEALTHCHECK

Provoz:
- Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml
  (nasazení z Gitea registry)
- CI v Gitea Actions: lint -> testy -> build -> push image
- úvodní migrace databáze

Stránky jsou force-dynamic, aby se úprava položky projevila hned;
schéma se za běhu nedomýšlí (push: false), migrace se commitují.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 13:13:23 +02:00
co-authored by Claude Opus 5
parent fedccbee93
commit c8e435139e
49 changed files with 13152 additions and 49 deletions
+42
View File
@@ -0,0 +1,42 @@
import { getPayload, Payload } from 'payload'
import config from '@/payload.config'
import { describe, it, beforeAll, expect } from 'vitest'
let payload: Payload
describe('Payload API', () => {
beforeAll(async () => {
// Schéma vznikne z konfigurace (`push` je zapnuté jen v testech).
payload = await getPayload({ config: await config })
})
it('má nadefinované všechny kolekce', () => {
const slugy = Object.keys(payload.collections)
expect(slugy).toEqual(expect.arrayContaining(['products', 'media', 'pages', 'users']))
})
it('umí založit a najít položku nabídky', async () => {
const vytvorena = await payload.create({
collection: 'products',
data: {
nazev: 'CZ 75 SP-01 Shadow',
kategorie: 'zbrane',
cena: 28900,
stav: 'skladem',
},
})
expect(vytvorena.id).toBeDefined()
// slug se doplňuje hookem z názvu
expect(vytvorena.slug).toBe('cz-75-sp-01-shadow')
const nalezene = await payload.find({
collection: 'products',
where: { slug: { equals: 'cz-75-sp-01-shadow' } },
})
expect(nalezene.docs).toHaveLength(1)
expect(nalezene.docs[0]?.cena).toBe(28900)
})
})