Latest updarte
This commit is contained in:
100
CLAUDE.md
100
CLAUDE.md
@@ -1 +1,99 @@
|
||||
@AGENTS.md
|
||||
# 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` má `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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user