Frontend:
- apps/web (Vite+TS, TanStack Router/Query, shadcn/ui @cfdm/ui base-nova)
- 10 страниц в routes/_auth/, Recharts через shadcn Chart, lucide-react
- формы на RHF + Zod (FormSheet/FormField)
- удалены Tabler, Chart.js, react-router-dom
Backend (параллельный трек):
- apps/api (Fastify 5 + Drizzle + better-sqlite3)
- packages/db: Drizzle-схема и repositories по сущностям
- packages/shared: Zod-контракты
- роуты с валидацией и единым форматом ошибок { error: { code, message } }
- sync/backup — заглушки 501 (billmanager-адаптеры переносятся отдельно)
- legacy Express оставлен как runtime по умолчанию (RUNTIME=express)
Infra:
- Dockerfile multi-stage под pnpm workspaces
- .dockerignore и docker-compose обновлены под monorepo
Rules:
- удалены нерелевантные правила (rust, cloudflare, server/frontend-conventions)
- project-structure.mdc и AGENTS.md переписаны под monorepo
- frontend-shadcn.mdc, shadcn-ui-production.mdc, sqlite.mdc обновлены
Co-authored-by: Cursor <[email protected]>
27 lines
682 B
Plaintext
27 lines
682 B
Plaintext
---
|
|
description: Drizzle ORM + SQLite — schema, migrations, queries
|
|
globs: packages/db/**/*,apps/api/src/services/**/*
|
|
alwaysApply: false
|
|
---
|
|
|
|
# Backend Drizzle
|
|
|
|
MCP Context7 (`drizzle-orm`, `drizzle-kit`) — [`backend-mcp.mdc`](backend-mcp.mdc).
|
|
|
|
## Schema
|
|
|
|
- `packages/db/src/schema/` — source of truth
|
|
- Migrations: `drizzle-kit generate` / `migrate`
|
|
- WAL + `foreign_keys` при открытии SQLite
|
|
- Индекс `idx_dns_records_domain_cf_id` на `(domain_id, cf_record_id)`
|
|
|
|
## Queries
|
|
|
|
- Batch queries (`inArray`, JOINs) — не N+1 loops
|
|
- UNIQUE violations → `CONFLICT` (409)
|
|
- Multi-step → `db.transaction()`
|
|
|
|
## SQLite
|
|
|
|
См. [`sqlite.mdc`](sqlite.mdc).
|