Files
global_it24_landing/nextjs_space/lib/prisma.ts

52 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { PrismaClient } from '@prisma/client'
// Singleton pattern для Prisma Client
// НАСТОЯЩАЯ lazy initialization - клиент создается только при первом обращении
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined
}
let prismaInstance: PrismaClient | undefined
export function getPrisma(): PrismaClient {
// Проверяем, находимся ли мы в процессе сборки
const isBuildTime = process.env.NEXT_PHASE === 'phase-production-build'
if (isBuildTime) {
// Во время сборки возвращаем mock объект, который не делает реальных запросов
console.log('⚠️ Build time detected, returning mock Prisma client')
return {
$connect: async () => {},
$disconnect: async () => {},
contactSubmission: {
create: async () => ({ id: 1, name: 'mock', phone: 'mock', email: null, serviceType: null, message: null, createdAt: new Date() }),
findMany: async () => [],
}
} as any
}
// Runtime: используем настоящий клиент
if (!prismaInstance) {
if (globalForPrisma.prisma) {
prismaInstance = globalForPrisma.prisma
} else {
prismaInstance = new PrismaClient({
log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'],
})
if (process.env.NODE_ENV !== 'production') {
globalForPrisma.prisma = prismaInstance
}
}
}
return prismaInstance
}
// Для обратной совместимости экспортируем через Proxy
export const prisma = new Proxy({} as PrismaClient, {
get(target, prop) {
return (getPrisma() as any)[prop]
}
})