Files
ContentGen_BE/prisma/seed-admin.ts
Harun CAN 9f17ced37d
Some checks failed
Backend Deploy 🚀 / build-and-deploy (push) Has been cancelled
main
2026-04-05 17:28:49 +03:00

118 lines
3.2 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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';
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();
});