From a6c744223b2bb285adfae894fe5d836244e70a8a Mon Sep 17 00:00:00 2001 From: joylessorchid Date: Tue, 24 Mar 2026 03:54:55 +0300 Subject: [PATCH] fix: prisma url in schema + first user becomes ADMIN - Add url = env("DATABASE_URL") back to schema (required by Prisma 7.5) - Simplify prisma.config.ts - First registered user auto-promoted to ADMIN via databaseHooks - Subsequent users get HOST role --- CLAUDE.md | 4 ++-- prisma.config.ts | 7 +------ prisma/schema.prisma | 1 + src/lib/auth.ts | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 2c6517f..5323d18 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -173,8 +173,8 @@ DEV_ACCESS_KEY=mySecretKey123 ## Prisma 7 Notes - `prisma.config.ts` in project root (required by Prisma 7) -- `datasourceUrl` passed via PrismaClient constructor, not in schema -- Schema has no `url` in datasource block — only `provider` +- `url = env("DATABASE_URL")` in schema datasource — standard approach, works with CLI and PrismaClient +- `new PrismaClient()` without arguments — URL resolved from schema's `env("DATABASE_URL")` - Use `-- --webpack` flag for `next build` on Windows (Turbopack WASM issue) ## Auth Notes diff --git a/prisma.config.ts b/prisma.config.ts index 3762c3b..3e80666 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -4,9 +4,4 @@ import { defineConfig } from "prisma/config"; export default defineConfig({ earlyAccess: true, schema: path.join(__dirname, "prisma", "schema.prisma"), - migrate: { - async url() { - return process.env.DATABASE_URL!; - }, - }, -} as any); +}); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 837c0f2..21d47da 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -9,6 +9,7 @@ generator client { datasource db { provider = "postgresql" + url = env("DATABASE_URL") } // ======================== ENUMS ============================= diff --git a/src/lib/auth.ts b/src/lib/auth.ts index ba497d0..6d39d95 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -43,4 +43,27 @@ export const auth = betterAuth({ expiresIn: 60 * 60 * 24 * 7, // 7 days updateAge: 60 * 60 * 24, // 1 day }, + user: { + additionalFields: { + role: { + type: "string", + defaultValue: "HOST", + input: false, + }, + }, + }, + databaseHooks: { + user: { + create: { + before: async (user) => { + // Первый зарегистрированный пользователь → ADMIN + const count = await prisma.user.count(); + if (count === 0) { + return { data: { ...user, role: "ADMIN" } }; + } + return { data: { ...user, role: "HOST" } }; + }, + }, + }, + }, });