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

100 lines
3.6 KiB
Markdown

# 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
```bash
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:
- `Product``Category` (N:1), `ProductVariant[]` (1:N)
- `Cart``CartItem[]``ProductVariant` (guest přes `sessionId`, přihlášený přes `userId`)
- `Order``OrderItem[]` → snapshot ceny (`unitPrice`) v době objednávky
- `User``role: 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
```