Files
BistroUsky---Eshop/CLAUDE.md
2026-05-18 23:04:50 +02:00

3.6 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Projekt

BistroUsky e-shop — webová aplikace pro prodej zákusků a cukrovinek. Produkčně použitelný e-shop s administrací, katalogem, košíkem, objednávkami a platbami.

Hlavní pravidla

  • Neměň architekturu bez vysvětlení.
  • Před větší změnou navrhni postup a počkej na souhlas.
  • Po změně uveď, co bylo změněno a jak to otestovat.
  • Nepřepisuj existující funkčnost, pokud to není nutné.

Tech stack

Vrstva Technologie
Framework Next.js 16 (App Router)
Jazyk TypeScript
Styling Tailwind CSS v4 + shadcn/ui
Databáze PostgreSQL + Prisma ORM
Autentizace NextAuth.js v5 (beta) + @auth/prisma-adapter
Platby Stripe
E-mail Resend + React Email
Validace Zod v4
Testy Vitest + @testing-library/react (unit), Playwright (E2E)

Příkazy

npm install           # instalace závislostí
npm run dev           # vývojový server → http://localhost:3000
npm run build         # produkční build
npm run lint          # ESLint
npm test              # Vitest (watch mode)
npx vitest run src/path/to/test.spec.ts   # jeden test
npm run test:e2e      # Playwright E2E testy
npm run db:migrate    # aplikace nových DB migrací
npm run db:generate   # regenerace Prisma klienta
npm run db:studio     # Prisma Studio GUI

Architektura

src/
  app/
    (shop)/           # veřejná část e-shopu — layout a pages pro zákazníka
    (admin)/          # admin sekce — chráněna rolí ADMIN
    api/
      auth/[...nextauth]/   # NextAuth handler
      webhooks/             # Stripe webhook
  components/
    ui/               # shadcn/ui primitive komponenty (button, input, ...)
    shop/             # doménové komponenty (ProductCard, CartItem, ...)
    admin/            # admin komponenty (ProductForm, OrderTable, ...)
  lib/
    db.ts             # Prisma client singleton — vždy importuj odtud
    auth.ts           # NextAuth konfigurace (handlers, auth, signIn, signOut)
    stripe.ts         # Stripe client
    resend.ts         # Resend client
  emails/             # React Email šablony (OrderConfirmation, ...)
  types/              # sdílené TypeScript typy a Zod schémata
prisma/
  schema.prisma       # datový model
  migrations/         # DB migrace (generované, neupravuj ručně)

Klíčové konvence

  • Server Actions pro mutace (formuláře, košík, objednávky) — ne API routes.
  • API routes jen pro webhooky (Stripe) a veřejné REST endpointy.
  • Zod schémata definovat v src/types/ a sdílet mezi Server Actions a klientem.
  • Prisma client importovat výhradně ze src/lib/db.ts (singleton, zabraňuje memory leaks v dev).
  • Ceny ukládat vždy v haléřích (integer), zobrazovat konverzí /100 s formátováním.
  • Route groups (shop) a (admin) oddělují layout a middleware ochranu — v middleware.ts chránit /admin/* rolí ADMIN.

Doménový model (Prisma)

Klíčové vztahy:

  • ProductCategory (N:1), ProductVariant[] (1:N)
  • CartCartItem[]ProductVariant (guest přes sessionId, přihlášený přes userId)
  • OrderOrderItem[] → snapshot ceny (unitPrice) v době objednávky
  • Userrole: CUSTOMER | ADMIN

Prostředí (.env)

DATABASE_URL          # PostgreSQL connection string
AUTH_SECRET           # NextAuth secret (generuj: npx auth secret)
STRIPE_SECRET_KEY
STRIPE_PUBLISHABLE_KEY
STRIPE_WEBHOOK_SECRET
RESEND_API_KEY
NEXT_PUBLIC_APP_URL   # http://localhost:3000 ve vývoji