From 1a5881c935116bb136b363ad47ffed07c21ab2a6 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 28 Nov 2025 12:55:32 +0100 Subject: [PATCH] Migration to Prisma 7 --- .gitignore | 3 +++ package.json | 9 +++++++-- prisma.config.ts | 16 ++++++++++++++++ prisma/schema.prisma | 4 ++-- src/server/db.js | 8 ++++++-- src/server/db.ts | 7 ++++++- 6 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 prisma.config.ts diff --git a/.gitignore b/.gitignore index 35b3279..1e7ad08 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,9 @@ db.sqlite data/settings.db +# prisma generated client +/prisma/generated/ + # ssh keys (sensitive) data/ssh-keys/ diff --git a/package.json b/package.json index 95e5df2..758b9c2 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,19 @@ "private": true, "type": "module", "scripts": { - "build": "next build --webpack", + "build": "prisma generate && next build --webpack", "check": "eslint . && tsc --noEmit", "dev": "next dev --webpack", "dev:server": "node server.js", "dev:next": "next dev --webpack", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,mdx}\" --cache", "format:write": "prettier --write \"**/*.{ts,tsx,js,jsx,mdx}\" --cache", + "generate": "prisma generate", "lint": "eslint .", "lint:fix": "eslint --fix .", + "migrate": "prisma migrate dev", "preview": "next build && next start", + "postinstall": "prisma generate", "start": "node server.js", "test": "vitest", "test:ui": "vitest --ui", @@ -22,7 +25,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@prisma/adapter-better-sqlite3": "^7.0.1", "@prisma/client": "^7.0.1", + "better-sqlite3": "^11.7.0", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-slot": "^1.2.4", "@t3-oss/env-nextjs": "^0.13.8", @@ -81,7 +86,7 @@ "postcss": "^8.5.6", "prettier": "^3.7.1", "prettier-plugin-tailwindcss": "^0.7.1", - "prisma": "^6.19.0", + "prisma": "^7.0.1", "tailwindcss": "^4.1.17", "typescript": "^5.9.3", "typescript-eslint": "^8.48.0", diff --git a/prisma.config.ts b/prisma.config.ts new file mode 100644 index 0000000..93e8eb2 --- /dev/null +++ b/prisma.config.ts @@ -0,0 +1,16 @@ +import 'dotenv/config' +import { defineConfig } from 'prisma/config' + +export default defineConfig({ + earlyAccess: true, + schema: 'prisma/schema.prisma', + migrate: { + migrations: 'prisma/migrations', + }, + studio: { + adapter: async () => { + const { PrismaBetterSQLite3 } = await import('@prisma/adapter-better-sqlite3') + return new PrismaBetterSQLite3({ url: process.env.DATABASE_URL! }) + }, + }, +}) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 535f82b..de112ad 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,10 +1,10 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "./generated/prisma" } datasource db { provider = "sqlite" - url = env("DATABASE_URL") } model InstalledScript { diff --git a/src/server/db.js b/src/server/db.js index d777221..89b2c91 100644 --- a/src/server/db.js +++ b/src/server/db.js @@ -1,7 +1,11 @@ -import { PrismaClient } from '@prisma/client'; +import 'dotenv/config' +import { PrismaClient } from '../../prisma/generated/prisma/client.js' +import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3' const globalForPrisma = globalThis; -export const prisma = globalForPrisma.prisma ?? new PrismaClient(); +const adapter = new PrismaBetterSQLite3({ url: process.env.DATABASE_URL! }); + +export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter }); if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma; diff --git a/src/server/db.ts b/src/server/db.ts index b579ce0..ccb5894 100644 --- a/src/server/db.ts +++ b/src/server/db.ts @@ -1,8 +1,13 @@ -import { PrismaClient } from '@prisma/client'; +import 'dotenv/config' +import { PrismaClient } from '../../prisma/generated/prisma/client.js' +import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3' const globalForPrisma = globalThis as { prisma?: PrismaClient }; +const adapter = new PrismaBetterSQLite3({ url: process.env.DATABASE_URL! }); + export const prisma: PrismaClient = globalForPrisma.prisma ?? new PrismaClient({ + adapter, log: ['warn', 'error'] });