Files
livedash-node/lib/prisma.ts
Kaj Kowalski 5bfd762e55 fix: comprehensive TypeScript/build fixes and modernization
- Update tsconfig to ES2024 target and bundler moduleResolution
- Add dynamic imports for chart.js and recharts (bundle optimization)
- Consolidate 17 useState into useReducer in sessions page
- Fix 18 .js extension imports across lib files
- Add type declarations for @rapideditor/country-coder
- Fix platform user types (PlatformUserRole enum)
- Fix Calendar component prop types
- Centralize next-auth type augmentation
- Add force-dynamic to all API routes (prevent build-time prerender)
- Fix Prisma JSON null handling with Prisma.DbNull
- Fix various type mismatches (SessionMessage, ImportRecord, etc.)
- Export ButtonProps from button component
- Update next-themes import path
- Replace JSX.Element with React.ReactElement
- Remove obsolete debug scripts and pnpm lockfile
- Downgrade eslint to v8 for next compatibility
2026-01-20 07:28:10 +01:00

68 lines
1.8 KiB
TypeScript

// Enhanced Prisma client setup with connection pooling
import { PrismaClient } from "@prisma/client";
import { createEnhancedPrismaClient } from "./database-pool";
import { env } from "./env";
// Add prisma to the NodeJS global type
declare const global: {
prisma: PrismaClient | undefined;
};
// Connection pooling configuration
const createPrismaClient = () => {
// Use enhanced pooling in production or when explicitly enabled
const useEnhancedPooling =
process.env.NODE_ENV === "production" ||
process.env.USE_ENHANCED_POOLING === "true";
if (useEnhancedPooling) {
console.log("Using enhanced database connection pooling with PG adapter");
return createEnhancedPrismaClient();
}
// Default Prisma client with basic configuration
return new PrismaClient({
log:
process.env.NODE_ENV === "development"
? ["query", "error", "warn"]
: ["error"],
datasources: {
db: {
url: env.DATABASE_URL,
},
},
});
};
// Initialize Prisma Client with singleton pattern
const prisma = global.prisma || createPrismaClient();
// Save in global if we're in development to prevent multiple instances
if (process.env.NODE_ENV !== "production") {
global.prisma = prisma;
}
// Graceful shutdown handling
const gracefulShutdown = async () => {
console.log("Gracefully disconnecting from database...");
await prisma.$disconnect();
process.exit(0);
};
// Handle process termination signals
process.on("SIGINT", gracefulShutdown);
process.on("SIGTERM", gracefulShutdown);
// Connection health check
export const checkDatabaseConnection = async (): Promise<boolean> => {
try {
await prisma.$queryRaw`SELECT 1`;
return true;
} catch (error) {
console.error("Database connection failed:", error);
return false;
}
};
export { prisma };