import { PrismaClient } from '@prisma/client' import bcrypt from 'bcryptjs' const prisma = new PrismaClient() // Список базовых категорий товаров const DEFAULT_CATEGORIES = [ 'Одежда и обувь', 'Косметика и парфюмерия', 'Дом и сад', 'Детские товары', 'Спорт и отдых', 'Электроника', 'Книги', 'Здоровье', 'Автотовары', 'Строительство и ремонт', 'Продукты питания', 'Зоотовары', 'Дача, сад и огород', 'Канцелярские товары', 'Хобби и творчество', 'Украшения и аксессуары', 'Сумки и чемоданы', 'Техника для дома', 'Музыкальные инструменты', 'Игры и игрушки' ] async function seedAdmin() { try { console.log('🔐 Создание администратора...') // Проверяем есть ли уже админ const existingAdmin = await prisma.admin.findUnique({ where: { username: 'admin' } }) if (existingAdmin) { console.log('ℹ️ Администратор уже существует, пропускаем создание') return existingAdmin } // Генерируем хеш пароля const password = 'admin123' // Временный пароль const hashedPassword = await bcrypt.hash(password, 12) // Создаем администратора const admin = await prisma.admin.create({ data: { username: 'admin', password: hashedPassword, email: 'admin@sferav.com', isActive: true } }) console.log('✅ Администратор создан:') console.log(` Логин: ${admin.username}`) console.log(` Пароль: ${password}`) console.log(` Email: ${admin.email}`) console.log(' ⚠️ Обязательно смените пароль после первого входа!') return admin } catch (error) { console.error('❌ Ошибка создания администратора:', error) throw error } } async function seedCategories() { try { console.log('\n📂 Создание категорий...') let createdCount = 0 let skippedCount = 0 for (const categoryName of DEFAULT_CATEGORIES) { try { // Проверяем существует ли категория const existingCategory = await prisma.category.findUnique({ where: { name: categoryName } }) if (existingCategory) { skippedCount++ continue } // Создаем категорию await prisma.category.create({ data: { name: categoryName } }) createdCount++ console.log(` ✅ Создана категория: ${categoryName}`) } catch (error) { console.log(` ⚠️ Ошибка создания категории "${categoryName}":`, error.message) } } console.log(`\n📊 Результат создания категорий:`) console.log(` Создано: ${createdCount}`) console.log(` Пропущено (уже существует): ${skippedCount}`) console.log(` Всего категорий: ${DEFAULT_CATEGORIES.length}`) return { createdCount, skippedCount, total: DEFAULT_CATEGORIES.length } } catch (error) { console.error('❌ Ошибка создания категорий:', error) throw error } } async function main() { try { console.log('🚀 Запуск инициализации базы данных...\n') // Создаем админа await seedAdmin() // Создаем категории await seedCategories() console.log('\n🎉 Инициализация базы данных завершена успешно!') } catch (error) { console.error('\n💥 Ошибка инициализации базы данных:', error) process.exit(1) } finally { await prisma.$disconnect() } } // Запускаем если скрипт вызван напрямую if (import.meta.url === `file://${process.argv[1]}`) { main() } export { seedAdmin, seedCategories }