|
import { PrismaClient } from '@prisma/client' |
|
|
|
declare global { |
|
var __prisma: PrismaClient | undefined |
|
} |
|
|
|
|
|
const prisma = globalThis.__prisma || new PrismaClient({ |
|
log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'], |
|
}) |
|
|
|
if (process.env.NODE_ENV === 'development') { |
|
globalThis.__prisma = prisma |
|
} |
|
|
|
export { prisma } |
|
|
|
export async function initializeDatabase() { |
|
try { |
|
|
|
await prisma.$connect() |
|
console.log('β
Database connected successfully') |
|
|
|
|
|
await createDefaultAdmin() |
|
|
|
} catch (error) { |
|
console.error('β Database connection failed:', error) |
|
throw error |
|
} |
|
} |
|
|
|
async function createDefaultAdmin() { |
|
try { |
|
const adminEmail = process.env.ADMIN_EMAIL || 'admin@chatapp.com' |
|
const adminPassword = process.env.ADMIN_PASSWORD || 'admin123456' |
|
|
|
|
|
const existingAdmin = await prisma.user.findUnique({ |
|
where: { email: adminEmail } |
|
}) |
|
|
|
if (!existingAdmin) { |
|
const bcrypt = await import('bcryptjs') |
|
const hashedPassword = await bcrypt.hash(adminPassword, 12) |
|
|
|
await prisma.user.create({ |
|
data: { |
|
email: adminEmail, |
|
username: 'admin', |
|
displayName: 'Administrator', |
|
password: hashedPassword, |
|
isAdmin: true, |
|
isVerified: true, |
|
} |
|
}) |
|
|
|
console.log('β
Default admin user created') |
|
console.log(`π§ Admin email: ${adminEmail}`) |
|
console.log(`π Admin password: ${adminPassword}`) |
|
} |
|
} catch (error) { |
|
console.error('β Failed to create default admin:', error) |
|
} |
|
} |
|
|
|
export async function disconnectDatabase() { |
|
await prisma.$disconnect() |
|
} |
|
|