import { NextResponse } from 'next/server'; import { mainPrisma } from '@/lib/db'; import { getAdminSession } from '@/lib/auth'; export async function GET() { try { const session = await getAdminSession(); if (!session) { return NextResponse.json( { error: '未登录' }, { status: 401 } ); } // 超管可以查看所有项目 // 普通管理员只能查看被分配的项目 const admin = await mainPrisma.admin.findUnique({ where: { id: session.id }, include: { adminProjects: { include: { project: true, }, }, }, }); if (!admin) { return NextResponse.json( { error: '管理员不存在' }, { status: 404 } ); } let projects; if (admin.isSuperAdmin) { // 超管获取所有项目 projects = await mainPrisma.project.findMany({ orderBy: { createdAt: 'desc' }, }); } else { // 普通管理员获取分配的项目 projects = admin.adminProjects.map((ap: { project: unknown }) => ap.project); } return NextResponse.json(projects); } catch (error) { console.error('获取项目列表失败:', error); return NextResponse.json( { error: '服务器错误' }, { status: 500 } ); } } export async function POST(request: Request) { try { const session = await getAdminSession(); if (!session) { return NextResponse.json( { error: '未登录' }, { status: 401 } ); } // 检查是否是超管 const admin = await mainPrisma.admin.findUnique({ where: { id: session.id }, }); if (!admin || !admin.isSuperAdmin) { return NextResponse.json( { error: '无权限创建项目' }, { status: 403 } ); } const body = await request.json(); const { code, name, description, dbHost, dbPort, dbName, dbUser, dbPassword, dbSchema } = body; // 验证必填字段 if (!code || !name || !dbHost || !dbName || !dbUser || !dbPassword) { return NextResponse.json( { error: '缺少必填字段' }, { status: 400 } ); } // 检查项目代码是否已存在 const existing = await mainPrisma.project.findUnique({ where: { code }, }); if (existing) { return NextResponse.json( { error: '项目标识已存在' }, { status: 400 } ); } // 加密数据库密码 const { encryptPassword } = await import('@/lib/db'); const encryptedPassword = encryptPassword(dbPassword); // 创建项目 const project = await mainPrisma.project.create({ data: { code, name, description, dbHost, dbPort: dbPort || 5432, dbName, dbUser, dbPassword: encryptedPassword, dbSchema: dbSchema || 'public', }, }); return NextResponse.json(project); } catch (error) { console.error('创建项目失败:', error); return NextResponse.json( { error: '服务器错误' }, { status: 500 } ); } }