diff --git a/.env.example b/.env.example index a54cec7..5c40b28 100644 --- a/.env.example +++ b/.env.example @@ -22,8 +22,9 @@ TMDB_API_KEY='' TRAKT_CLIENT_ID='' TRAKT_SECRET_ID='' -# Optional: PostgreSQL connection pool size (default: 100000) -# DB_POOL_MAX=100000 +# Optional: PostgreSQL connection pool size (default: 1000) +# Is an integar, only set this for optimisation other wise leave blank +DB_POOL_MAX= # Optional: Captcha CAPTCHA=false diff --git a/server/routes/users/[id]/bookmarks.ts b/server/routes/users/[id]/bookmarks.ts index 3629835..56236d2 100644 --- a/server/routes/users/[id]/bookmarks.ts +++ b/server/routes/users/[id]/bookmarks.ts @@ -87,6 +87,8 @@ export default defineEventHandler(async event => { }); }); + if (upserts.length === 0) return []; + const bookmarks = await prisma.$transaction(upserts); return bookmarks.map((bookmark: any) => ({ diff --git a/server/routes/users/[id]/progress/import.ts b/server/routes/users/[id]/progress/import.ts index b16af45..1a71f62 100644 --- a/server/routes/users/[id]/progress/import.ts +++ b/server/routes/users/[id]/progress/import.ts @@ -153,6 +153,8 @@ export default defineEventHandler(async event => { }) ); + if (upsertPromises.length === 0) return { success: true, count: 0, items: [] }; + try { const transactionResults = await prisma.$transaction(upsertPromises); diff --git a/server/routes/users/[id]/watch-history/[tmdbid]/index.ts b/server/routes/users/[id]/watch-history/[tmdbid]/index.ts index d9e1663..b6afc5c 100644 --- a/server/routes/users/[id]/watch-history/[tmdbid]/index.ts +++ b/server/routes/users/[id]/watch-history/[tmdbid]/index.ts @@ -104,6 +104,8 @@ export default defineEventHandler(async event => { }); }); + if (upsertPromises.length === 0) return { success: true, count: 0, items: [] }; + const transactionResults = await prisma.$transaction(upsertPromises); const results = transactionResults.map(watchHistoryItem => ({ diff --git a/server/utils/prisma.ts b/server/utils/prisma.ts index 3ae40f1..e1f2510 100644 --- a/server/utils/prisma.ts +++ b/server/utils/prisma.ts @@ -2,19 +2,25 @@ import { Pool } from 'pg'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../../generated/client'; -const pool = new Pool({ - connectionString: process.env.DATABASE_URL, - max: parseInt(process.env.DB_POOL_MAX || '1000', 10), - connectionTimeoutMillis: 10000, - idleTimeoutMillis: 300000, -}); +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined; + pool: Pool | undefined; +}; + +const pool = + globalForPrisma.pool || + new Pool({ + connectionString: process.env.DATABASE_URL, + max: parseInt(process.env.DB_POOL_MAX || '1000', 10), + connectionTimeoutMillis: 10000, + idleTimeoutMillis: 300000, + }); const adapter = new PrismaPg(pool); -const globalForPrisma = globalThis as unknown as { - prisma: PrismaClient | undefined; -}; - export const prisma = globalForPrisma.prisma || new PrismaClient({ adapter }); -if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma; +if (process.env.NODE_ENV !== 'production') { + globalForPrisma.prisma = prisma; + globalForPrisma.pool = pool; +}