141 lines
4.3 KiB
JavaScript
141 lines
4.3 KiB
JavaScript
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 }
|