refactor(db): simplify to single prisma schema workflow

This commit is contained in:
2026-02-10 17:42:48 +01:00
parent 670f7d3fb2
commit df1280af4a
11 changed files with 5 additions and 120 deletions

1
.gitignore vendored
View File

@ -27,6 +27,7 @@ test-results
# prisma
packages/db/prisma/dev.db*
packages/db/prisma/generated/
# misc
.DS_Store

View File

@ -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`

View File

@ -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

View File

@ -10,6 +10,7 @@
"!**/coverage",
"!**/playwright-report",
"!**/test-results",
"!**/prisma/generated",
"!**/next-env.d.ts",
"!**/.vitepress/cache",
"!**/.vitepress/dist"

View File

@ -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

View File

@ -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",

View File

@ -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"
},

View File

@ -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,
},
},
},
})

View File

@ -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")
}

View File

@ -1,5 +1,6 @@
generator client {
provider = "prisma-client-js"
provider = "prisma-client"
output = "./generated/client"
}
datasource db {

View File

@ -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