119 lines
3.1 KiB
TypeScript
119 lines
3.1 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { prisma } from '@/lib/prisma'
|
|
import bcrypt from 'bcryptjs'
|
|
|
|
// 系统初始化:创建默认部门、店铺、管理员账户
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
// 检查是否已经初始化过
|
|
const existingAdmin = await prisma.user.findFirst({
|
|
where: { email: 'admin' }
|
|
})
|
|
|
|
if (existingAdmin) {
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: '系统已初始化',
|
|
initialized: true
|
|
})
|
|
}
|
|
|
|
// 使用事务确保所有数据都创建成功
|
|
const result = await prisma.$transaction(async (tx) => {
|
|
// 1. 创建默认管理员账户
|
|
const hashedPassword = await bcrypt.hash('88888888', 10)
|
|
const admin = await tx.user.create({
|
|
data: {
|
|
email: 'admin',
|
|
username: 'admin',
|
|
password: hashedPassword,
|
|
role: 'ADMIN',
|
|
isActive: true,
|
|
canDownload: true,
|
|
// 标记为使用默认密码,首次登录需要修改
|
|
department: '系统管理'
|
|
}
|
|
})
|
|
|
|
// 2. 创建默认部门
|
|
const defaultDepartment = await tx.department.create({
|
|
data: { name: '默认部门' }
|
|
})
|
|
|
|
// 3. 创建默认店铺(分类)
|
|
const defaultCategory = await tx.category.create({
|
|
data: { name: '默认店铺' }
|
|
})
|
|
|
|
// 4. 创建默认场景
|
|
const defaultScene = await tx.scene.create({
|
|
data: { name: '默认场景' }
|
|
})
|
|
|
|
return {
|
|
admin,
|
|
defaultDepartment,
|
|
defaultCategory,
|
|
defaultScene
|
|
}
|
|
})
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: '系统初始化成功',
|
|
initialized: true,
|
|
data: {
|
|
admin: {
|
|
email: result.admin.email,
|
|
username: result.admin.username,
|
|
password: '88888888' // 仅返回提示,不返回实际密码
|
|
},
|
|
defaultDepartment: result.defaultDepartment.name,
|
|
defaultCategory: result.defaultCategory.name,
|
|
defaultScene: result.defaultScene.name
|
|
}
|
|
})
|
|
} catch (error: any) {
|
|
console.error('系统初始化失败:', error)
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: '系统初始化失败',
|
|
details: error.message
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
// 检查系统是否已初始化
|
|
export async function GET() {
|
|
try {
|
|
const admin = await prisma.user.findFirst({
|
|
where: { email: 'admin' }
|
|
})
|
|
|
|
const hasDepartment = await prisma.department.findFirst()
|
|
const hasCategory = await prisma.category.findFirst()
|
|
const hasScene = await prisma.scene.findFirst()
|
|
|
|
return NextResponse.json({
|
|
initialized: !!admin && !!hasDepartment && !!hasCategory && !!hasScene,
|
|
hasAdmin: !!admin,
|
|
hasDepartment: !!hasDepartment,
|
|
hasCategory: !!hasCategory,
|
|
hasScene: !!hasScene
|
|
})
|
|
} catch (error: any) {
|
|
console.error('检查初始化状态失败:', error)
|
|
return NextResponse.json(
|
|
{
|
|
initialized: false,
|
|
error: error.message
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|