WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

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 }
)
}
}