import { PrismaClient } from '@prisma/client'; import * as bcrypt from 'bcrypt'; /** * Admin Seed Script * * Admin hesabı ve sınırsız kredi ataması: * - Email: admin@contentgen.ai * - Şifre: Admin123! * - Rol: admin (sınırsız erişim) * - Kredi: 999999 */ const prisma = new PrismaClient(); async function main() { console.log('🌱 Admin seed başlatılıyor...'); // 1. Admin rolü oluştur/bul const adminRole = await prisma.role.upsert({ where: { name: 'admin' }, update: {}, create: { name: 'admin', description: 'Sistem yöneticisi — sınırsız erişim', isSystem: true, }, }); console.log(`✅ Admin rolü: ${adminRole.id}`); // 2. User rolü oluştur/bul (her kullanıcıda olmalı) const userRole = await prisma.role.upsert({ where: { name: 'user' }, update: {}, create: { name: 'user', description: 'Standart kullanıcı', isSystem: true, }, }); // 3. Admin kullanıcısı oluştur const hashedPassword = await bcrypt.hash('Admin123!', 12); const adminUser = await prisma.user.upsert({ where: { email: 'admin@contentgen.ai' }, update: { password: hashedPassword, firstName: 'Admin', lastName: 'ContentGen', isActive: true, }, create: { email: 'admin@contentgen.ai', password: hashedPassword, firstName: 'Admin', lastName: 'ContentGen', isActive: true, }, }); console.log(`✅ Admin kullanıcısı: ${adminUser.id} (${adminUser.email})`); // 4. Rolleri ata (upsert ile — varsa atlama) for (const role of [adminRole, userRole]) { await prisma.userRole.upsert({ where: { userId_roleId: { userId: adminUser.id, roleId: role.id, }, }, update: {}, create: { userId: adminUser.id, roleId: role.id, }, }); } console.log('✅ Roller atandı: admin + user'); // 5. Sınırsız kredi yükle (mevcut bakiye kontrol et) const existingTransactions = await prisma.creditTransaction.findMany({ where: { userId: adminUser.id }, }); const currentBalance = existingTransactions.reduce((sum, tx) => sum + tx.amount, 0); if (currentBalance < 1000) { const creditAmount = 999999 - currentBalance; await prisma.creditTransaction.create({ data: { userId: adminUser.id, amount: creditAmount, type: 'grant', description: 'Admin hesabı — sınırsız kredi', balanceAfter: 999999, }, }); console.log(`✅ Kredi yüklendi: +${creditAmount} (toplam: 999,999)`); } else { console.log(`ℹ️ Yeterli kredi mevcut: ${currentBalance}`); } console.log('\n═══════════════════════════════════════'); console.log('🔑 Admin Giriş Bilgileri:'); console.log(' Email: admin@contentgen.ai'); console.log(' Şifre: Admin123!'); console.log('═══════════════════════════════════════\n'); } main() .catch((e) => { console.error('❌ Seed hatası:', e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });