diff --git a/README.md b/README.md index 3cb7efbe..195f1df1 100644 --- a/README.md +++ b/README.md @@ -84,19 +84,9 @@ const found = await db.select() > The CMS does **not** use `drizzle-kit push` — the database is owned by the emulator and is never auto-migrated. CMS-owned tables are created via the SQL migration runner (step 5). -#### Prisma Compatibility Facade (Backwards Compatibility) +Use `import { db } from "@/lib/db"` with table definitions from `src/db/schema.ts` for all database access. Types come from the committed Drizzle schema — no separate client code generation is required at build time. -A Prisma-compatible facade at `@/lib/prisma` allows existing code to keep calling `prisma.users.findMany()` without refactoring. At runtime, the facade routes every query through Drizzle. **There is zero Prisma client or query-engine overhead in production.** - -Generate the Prisma type stubs used for type-checking the facade: - -```bash -pnpm prisma:generate -``` - -This creates `src/generated/prisma/` (a local, `gitignore`d build artifact) with TypeScript types only. It is never shipped in the production bundle. - -> **Legacy CLI command removed:** The `prisma` CLI is now a devDependency used **only** for type generation. Old commands such as `prisma migrate dev`, `prisma studio`, or `prisma db push` are no longer applicable — use the SQL migration runner (`pnpm db:migrate`) or Drizzle CLI instead. +`prisma/schema.prisma` remains as a reference model list used by `pnpm db:schema:generate` when regenerating the Drizzle schema from the live database. The Prisma client is not used at runtime. ### 5. Run CMS Migrations @@ -165,7 +155,6 @@ The CMS runs behind an nginx reverse proxy on the default port 3000. Static asse | `pnpm db:migrate` | Apply pending SQL migrations | | `pnpm db:migrate:status` | Show migration status | | `pnpm db:schema:generate` | Regen `src/db/schema.ts` from Prisma + live DB (needs `DATABASE_URL`) | -| `pnpm prisma:generate` | Regenerate Prisma type stubs (dev only, not prod) | | `pnpm analyze` | Build + open bundle analyzer | | `pnpm jobs:worker` | Start background task worker (systemd / PM2) | | `pnpm biome:check` | Lint and format code | @@ -204,13 +193,13 @@ The CMS runs behind an nginx reverse proxy on the default port 3000. Static asse ``` ├── prisma/ -│ ├── schema.prisma # ~190 models (emulator + CMS) — used for type generation only (legacy) +│ ├── schema.prisma # Reference model list — input for db:schema:generate │ └── migrations/ # 19 SQL migrations for CMS tables (idempotent, never re-run) ├── scripts/ │ ├── apply-migrations.ts # SQL migration runner (apply + status) │ ├── jobs-worker.ts # Background task scheduler │ ├── merge-config.cjs # Utility: merge split config files -│ └── generate-drizzle-schema.mjs # One-off: generate src/db/schema.ts from schema.prisma +│ └── generate-drizzle-schema.mjs # Generate src/db/schema.ts from schema.prisma + live DB ├── src/ │ ├── db/ │ │ ├── schema.ts # Drizzle ORM schema (176 tables — runtime data layer) @@ -221,9 +210,8 @@ The CMS runs behind an nginx reverse proxy on the default port 3000. Static asse │ ├── lib/ │ │ ├── auth/ # NextAuth, password hashing, 2FA, SSO tickets │ │ ├── services/ # RCON, email, currency, PayPal, alerts -│ │ ├── prisma.ts # Prisma-compatible facade (routes to Drizzle at runtime) -│ │ ├── prisma-facade.ts # Drizzle-backed implementation of Prisma API surface │ │ ├── db.ts # Drizzle connection singleton (runtime) +│ │ ├── cached-db.ts # Redis-backed query cache helpers │ │ ├── redis.ts # Redis client (ioredis) │ │ ├── redis-cache.ts # Redis caching utility for API routes │ │ ├── cache.ts # In-memory cache fallback @@ -249,13 +237,10 @@ The CMS runs behind an nginx reverse proxy on the default port 3000. Static asse ### ORM Architecture -The CMS uses a dual-layer approach: +- **Runtime (Drizzle ORM)**: `@/lib/db` exposes a Drizzle singleton connected to the MySQL/MariaDB database. All application and script code uses this directly. The schema is defined in `src/db/schema.ts` with typed columns against the existing database. +- **Schema regeneration**: `pnpm db:schema:generate` reads `prisma/schema.prisma` (for camelCase field names) plus the live DB and rewrites `src/db/schema.ts`. Types for the app come from that committed Drizzle schema — no Prisma client is loaded at runtime. -- **Runtime (Drizzle ORM)**: `@/lib/db` exposes a Drizzle singleton connected to the MySQL/MariaDB database. All new code should use this directly. The schema is defined in `src/db/schema.ts` with 176 tables typed against the existing database columns. -- **Legacy Compatibility (Prisma Facade)**: `@/lib/prisma` provides a Prisma-compatible API surface backed by Drizzle. This allows existing code to continue working without refactoring. The facade (`@/lib/prisma-facade.ts`) implements the Prisma client API (`findMany`, `findUnique`, `create`, `$transaction`, `$queryRaw`, etc.) but routes all queries through Drizzle at runtime — **no Prisma client engine or query engine is loaded in production**. -- **Type Generation**: `src/generated/prisma/` (regenerated via `pnpm prisma:generate`) exists solely for TypeScript type-checking. It is `gitignore`d and is never bundled in the production build. - -Migration path: new database access should use `import { db } from "@/lib/db"` with queries built via `src/db/schema.ts`. The facade is maintained for backwards compatibility but is not recommended for new code. +Use `import { db } from "@/lib/db"` with queries built via `src/db/schema.ts`. --- @@ -321,7 +306,7 @@ pnpm biome:check # Lint and format 3. Use the `src/lib/motion.ts` animation variants for consistent animations 4. SQL migrations in `prisma/migrations/` must be idempotent 5. For new database code, use the Drizzle runtime directly (`import { db } from "@/lib/db"`) — see [ORM Setup](#4-orm-setup--type-generation) -6. Avoid `any` — use `eslint-disable` or `biome-ignore` comments only when unavoidable (e.g., Prisma facade compatibility) +6. Avoid `any` — use `eslint-disable` or `biome-ignore` comments only when unavoidable --- diff --git a/package.json b/package.json index 984e82bd..f35ae01f 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "biome check --write" ], "*.{json,md,css,scss,html}": [ - "biome format --write" + "biome format --write --no-errors-on-unmatched" ] }, "dependencies": {