From df1280af4a1d24bd9374fc9a005cea9142745d46 Mon Sep 17 00:00:00 2001 From: Citali Date: Tue, 10 Feb 2026 17:42:48 +0100 Subject: [PATCH] refactor(db): simplify to single prisma schema workflow --- .gitignore | 1 + README.md | 2 - TODO.md | 1 - biome.json | 1 + docs/getting-started.md | 1 - package.json | 1 - packages/db/package.json | 2 - packages/db/prisma/better-auth.config.ts | 37 ---------- .../db/prisma/generated/better-auth.prisma | 74 ------------------- packages/db/prisma/schema.prisma | 3 +- packages/db/src/client.ts | 2 +- 11 files changed, 5 insertions(+), 120 deletions(-) delete mode 100644 packages/db/prisma/better-auth.config.ts delete mode 100644 packages/db/prisma/generated/better-auth.prisma diff --git a/.gitignore b/.gitignore index dd8dee3..df95ee5 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ test-results # prisma packages/db/prisma/dev.db* +packages/db/prisma/generated/ # misc .DS_Store diff --git a/README.md b/README.md index 49ffec7..12eb566 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,6 @@ Set `BETTER_AUTH_SECRET` before production use. 3. Generate Prisma client and run migrations: ```bash -bun run db:auth:generate bun run db:generate bun run db:migrate bun run db:seed @@ -76,7 +75,6 @@ bun run dev - `bun run check` - `bun run format` - `bun run db:generate` -- `bun run db:auth:generate` - `bun run db:migrate` - `bun run db:push` - `bun run db:studio` diff --git a/TODO.md b/TODO.md index 67aaddb..84873f2 100644 --- a/TODO.md +++ b/TODO.md @@ -186,7 +186,6 @@ This file is the single source of truth for roadmap and delivery progress. - [2026-02-10] Prisma client must be generated before app/e2e startup to avoid runtime module errors. - [2026-02-10] `bun test` conflicts with Playwright-style test files; keep e2e files on `*.pw.ts` and run e2e via Playwright. - [2026-02-10] Linux Playwright runtime depends on host packages; browser setup may require `playwright install --with-deps`. -- [2026-02-10] Better Auth Prisma schema generation is stable via dedicated config (`packages/db/prisma/better-auth.config.ts`) and generated schema snapshot (`packages/db/prisma/generated/better-auth.prisma`). - [2026-02-10] Next.js 16 deprecates `middleware.ts` convention in favor of `proxy.ts`; admin route guard now lives at `apps/admin/src/proxy.ts`. ## How We Use This File diff --git a/biome.json b/biome.json index f1d1805..c96c5a6 100644 --- a/biome.json +++ b/biome.json @@ -10,6 +10,7 @@ "!**/coverage", "!**/playwright-report", "!**/test-results", + "!**/prisma/generated", "!**/next-env.d.ts", "!**/.vitepress/cache", "!**/.vitepress/dist" diff --git a/docs/getting-started.md b/docs/getting-started.md index 4d7f041..02caaab 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -15,7 +15,6 @@ cp .env.example .env ## Database ```bash -bun run db:auth:generate bun run db:generate bun run db:migrate bun run db:seed diff --git a/package.json b/package.json index 764913e..d916599 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "format": "biome format --write .", "check": "biome check .", "db:generate": "bun --filter @cms/db db:generate", - "db:auth:generate": "bun --filter @cms/db db:auth:generate", "db:migrate": "bun --filter @cms/db db:migrate", "db:migrate:named": "bun --filter @cms/db db:migrate:named", "db:push": "bun --filter @cms/db db:push", diff --git a/packages/db/package.json b/packages/db/package.json index 829ca49..35f5ed2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -10,7 +10,6 @@ "build": "tsc -p tsconfig.json", "lint": "biome check src prisma/seed.ts", "typecheck": "tsc -p tsconfig.json --noEmit", - "db:auth:generate": "mkdir -p prisma/generated && set -a && . ../../.env && set +a && bunx @better-auth/cli@1.4.18 generate --config prisma/better-auth.config.ts --output prisma/generated/better-auth.prisma --yes", "db:generate": "bun --env-file=../../.env prisma generate", "db:migrate": "bun --env-file=../../.env prisma migrate dev --name init", "db:migrate:named": "bun --env-file=../../.env prisma migrate dev", @@ -30,7 +29,6 @@ "@biomejs/biome": "2.3.14", "@types/node": "25.2.2", "@types/pg": "8.16.0", - "better-auth": "1.4.18", "prisma": "7.3.0", "typescript": "5.9.3" }, diff --git a/packages/db/prisma/better-auth.config.ts b/packages/db/prisma/better-auth.config.ts deleted file mode 100644 index 8922d84..0000000 --- a/packages/db/prisma/better-auth.config.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { betterAuth } from "better-auth" -import { prismaAdapter } from "better-auth/adapters/prisma" -import { db } from "../src/client" - -const adminOrigin = process.env.CMS_ADMIN_ORIGIN ?? "http://localhost:3001" -const webOrigin = process.env.CMS_WEB_ORIGIN ?? "http://localhost:3000" -const registrationFlag = process.env.CMS_ADMIN_REGISTRATION_ENABLED - -export const auth = betterAuth({ - appName: "CMS Admin", - baseURL: process.env.BETTER_AUTH_URL ?? adminOrigin, - secret: process.env.BETTER_AUTH_SECRET ?? "dev-only-change-me-for-production", - trustedOrigins: [adminOrigin, webOrigin], - database: prismaAdapter(db, { - provider: "postgresql", - }), - emailAndPassword: { - enabled: true, - disableSignUp: registrationFlag === "false", - }, - user: { - additionalFields: { - role: { - type: "string", - required: true, - defaultValue: "editor", - input: false, - }, - isBanned: { - type: "boolean", - required: true, - defaultValue: false, - input: false, - }, - }, - }, -}) diff --git a/packages/db/prisma/generated/better-auth.prisma b/packages/db/prisma/generated/better-auth.prisma deleted file mode 100644 index 70ae20f..0000000 --- a/packages/db/prisma/generated/better-auth.prisma +++ /dev/null @@ -1,74 +0,0 @@ - -generator client { - provider = "prisma-client-js" -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model User { - id String @id - name String - email String - emailVerified Boolean @default(false) - image String? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - role String @default("editor") - isBanned Boolean @default(false) - sessions Session[] - accounts Account[] - - @@unique([email]) - @@map("user") -} - -model Session { - id String @id - expiresAt DateTime - token String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - ipAddress String? - userAgent String? - userId String - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - - @@unique([token]) - @@index([userId]) - @@map("session") -} - -model Account { - id String @id - accountId String - providerId String - userId String - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - accessToken String? - refreshToken String? - idToken String? - accessTokenExpiresAt DateTime? - refreshTokenExpiresAt DateTime? - scope String? - password String? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@index([userId]) - @@map("account") -} - -model Verification { - id String @id - identifier String - value String - expiresAt DateTime - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@index([identifier]) - @@map("verification") -} diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 923ca82..98c9e5e 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -1,5 +1,6 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "./generated/client" } datasource db { diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts index 1efb458..4423065 100644 --- a/packages/db/src/client.ts +++ b/packages/db/src/client.ts @@ -1,6 +1,6 @@ import { PrismaPg } from "@prisma/adapter-pg" -import { PrismaClient } from "@prisma/client" import { Pool } from "pg" +import { PrismaClient } from "../prisma/generated/client/client" const connectionString = process.env.DATABASE_URL