refactor(db): simplify to single prisma schema workflow
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -27,6 +27,7 @@ test-results
|
||||
|
||||
# prisma
|
||||
packages/db/prisma/dev.db*
|
||||
packages/db/prisma/generated/
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
|
||||
@ -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`
|
||||
|
||||
1
TODO.md
1
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
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
"!**/coverage",
|
||||
"!**/playwright-report",
|
||||
"!**/test-results",
|
||||
"!**/prisma/generated",
|
||||
"!**/next-env.d.ts",
|
||||
"!**/.vitepress/cache",
|
||||
"!**/.vitepress/dist"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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"
|
||||
},
|
||||
|
||||
@ -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,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@ -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")
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
provider = "prisma-client"
|
||||
output = "./generated/client"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user