77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { mainPrisma } from '@/lib/db';
|
|
import { getAdminSession } from '@/lib/auth';
|
|
|
|
export async function GET(
|
|
request: Request,
|
|
{ params }: { params: Promise<{ projectCode: string }> }
|
|
) {
|
|
try {
|
|
const session = await getAdminSession();
|
|
const { projectCode } = await params;
|
|
|
|
if (!session) {
|
|
return NextResponse.json(
|
|
{ error: '未登录' },
|
|
{ status: 401 }
|
|
);
|
|
}
|
|
|
|
// 获取项目信息
|
|
const project = await mainPrisma.project.findUnique({
|
|
where: { code: projectCode },
|
|
});
|
|
|
|
if (!project) {
|
|
return NextResponse.json(
|
|
{ error: '项目不存在' },
|
|
{ status: 404 }
|
|
);
|
|
}
|
|
|
|
// 检查权限
|
|
const admin = await mainPrisma.admin.findUnique({
|
|
where: { id: session.id },
|
|
include: {
|
|
adminProjects: true,
|
|
},
|
|
});
|
|
|
|
if (!admin) {
|
|
return NextResponse.json(
|
|
{ error: '管理员不存在' },
|
|
{ status: 404 }
|
|
);
|
|
}
|
|
|
|
// 超管可以访问所有项目
|
|
if (!admin.isSuperAdmin) {
|
|
const hasAccess = admin.adminProjects.some(
|
|
(ap: { projectId: string }) => ap.projectId === project.id
|
|
);
|
|
if (!hasAccess) {
|
|
return NextResponse.json(
|
|
{ error: '无权访问此项目' },
|
|
{ status: 403 }
|
|
);
|
|
}
|
|
}
|
|
|
|
// 返回项目信息(不包含敏感的数据库连接信息)
|
|
return NextResponse.json({
|
|
id: project.id,
|
|
code: project.code,
|
|
name: project.name,
|
|
description: project.description,
|
|
isActive: project.isActive,
|
|
createdAt: project.createdAt,
|
|
});
|
|
} catch (error) {
|
|
console.error('获取项目信息失败:', error);
|
|
return NextResponse.json(
|
|
{ error: '服务器错误' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|