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
|
# prisma
|
||||||
packages/db/prisma/dev.db*
|
packages/db/prisma/dev.db*
|
||||||
|
packages/db/prisma/generated/
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ Set `BETTER_AUTH_SECRET` before production use.
|
|||||||
3. Generate Prisma client and run migrations:
|
3. Generate Prisma client and run migrations:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bun run db:auth:generate
|
|
||||||
bun run db:generate
|
bun run db:generate
|
||||||
bun run db:migrate
|
bun run db:migrate
|
||||||
bun run db:seed
|
bun run db:seed
|
||||||
@@ -76,7 +75,6 @@ bun run dev
|
|||||||
- `bun run check`
|
- `bun run check`
|
||||||
- `bun run format`
|
- `bun run format`
|
||||||
- `bun run db:generate`
|
- `bun run db:generate`
|
||||||
- `bun run db:auth:generate`
|
|
||||||
- `bun run db:migrate`
|
- `bun run db:migrate`
|
||||||
- `bun run db:push`
|
- `bun run db:push`
|
||||||
- `bun run db:studio`
|
- `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] 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] `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] 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`.
|
- [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
|
## How We Use This File
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"!**/coverage",
|
"!**/coverage",
|
||||||
"!**/playwright-report",
|
"!**/playwright-report",
|
||||||
"!**/test-results",
|
"!**/test-results",
|
||||||
|
"!**/prisma/generated",
|
||||||
"!**/next-env.d.ts",
|
"!**/next-env.d.ts",
|
||||||
"!**/.vitepress/cache",
|
"!**/.vitepress/cache",
|
||||||
"!**/.vitepress/dist"
|
"!**/.vitepress/dist"
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ cp .env.example .env
|
|||||||
## Database
|
## Database
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bun run db:auth:generate
|
|
||||||
bun run db:generate
|
bun run db:generate
|
||||||
bun run db:migrate
|
bun run db:migrate
|
||||||
bun run db:seed
|
bun run db:seed
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
"format": "biome format --write .",
|
"format": "biome format --write .",
|
||||||
"check": "biome check .",
|
"check": "biome check .",
|
||||||
"db:generate": "bun --filter @cms/db db:generate",
|
"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": "bun --filter @cms/db db:migrate",
|
||||||
"db:migrate:named": "bun --filter @cms/db db:migrate:named",
|
"db:migrate:named": "bun --filter @cms/db db:migrate:named",
|
||||||
"db:push": "bun --filter @cms/db db:push",
|
"db:push": "bun --filter @cms/db db:push",
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
"build": "tsc -p tsconfig.json",
|
"build": "tsc -p tsconfig.json",
|
||||||
"lint": "biome check src prisma/seed.ts",
|
"lint": "biome check src prisma/seed.ts",
|
||||||
"typecheck": "tsc -p tsconfig.json --noEmit",
|
"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:generate": "bun --env-file=../../.env prisma generate",
|
||||||
"db:migrate": "bun --env-file=../../.env prisma migrate dev --name init",
|
"db:migrate": "bun --env-file=../../.env prisma migrate dev --name init",
|
||||||
"db:migrate:named": "bun --env-file=../../.env prisma migrate dev",
|
"db:migrate:named": "bun --env-file=../../.env prisma migrate dev",
|
||||||
@@ -30,7 +29,6 @@
|
|||||||
"@biomejs/biome": "2.3.14",
|
"@biomejs/biome": "2.3.14",
|
||||||
"@types/node": "25.2.2",
|
"@types/node": "25.2.2",
|
||||||
"@types/pg": "8.16.0",
|
"@types/pg": "8.16.0",
|
||||||
"better-auth": "1.4.18",
|
|
||||||
"prisma": "7.3.0",
|
"prisma": "7.3.0",
|
||||||
"typescript": "5.9.3"
|
"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 {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client"
|
||||||
|
output = "./generated/client"
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { PrismaPg } from "@prisma/adapter-pg"
|
import { PrismaPg } from "@prisma/adapter-pg"
|
||||||
import { PrismaClient } from "@prisma/client"
|
|
||||||
import { Pool } from "pg"
|
import { Pool } from "pg"
|
||||||
|
import { PrismaClient } from "../prisma/generated/client/client"
|
||||||
|
|
||||||
const connectionString = process.env.DATABASE_URL
|
const connectionString = process.env.DATABASE_URL
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user