chenpei 4712175cb0 feat(素材链路): 发布白底图双轨与AI生图回传能力
- 完成白底图 WebP 双轨接口、上传链路与预览缓存改造
- 新增 AI 生图平台成品回传接口、任务状态与表单规则
- 补齐 AI 生成标签、任务详情补全、相关测试与对接文档
2026-03-25 10:28:02 +08:00

119 lines
3.5 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { prisma } from '@/lib/prisma';
import { getAllMaterialTypes, createDefaultPermissionsForDepartment, isSuperAdmin } from '@/lib/department-permission';
import { filterSelectableMaterialTypes } from '@/lib/material-type-options';
/**
* POST - 关联权限配置
*/
export async function POST(request: NextRequest) {
try {
const session = await getServerSession(authOptions);
const userId = (session?.user as any)?.id;
if (!session || !(await isSuperAdmin(userId))) {
return NextResponse.json({ error: '需要超级管理员权限' }, { status: 403 });
}
const { targetDepartment, sourceDepartment } = await request.json();
if (!targetDepartment || !sourceDepartment) {
return NextResponse.json(
{ error: '目标部门和源部门不能为空' },
{ status: 400 }
);
}
if (targetDepartment === sourceDepartment) {
return NextResponse.json(
{ error: '不能关联到自己' },
{ status: 400 }
);
}
// 确保源部门有权限配置
await createDefaultPermissionsForDepartment(sourceDepartment);
// 确保目标部门有权限配置
await createDefaultPermissionsForDepartment(targetDepartment);
// 获取所有素材类型(从数据库动态获取)
const allMaterialTypes = filterSelectableMaterialTypes(await getAllMaterialTypes());
// 更新目标部门所有素材类型的关联
for (const materialType of allMaterialTypes) {
await prisma.departmentMaterialPermission.upsert({
where: {
department_materialType: {
department: targetDepartment,
materialType,
},
},
update: {
linkedToDepartment: sourceDepartment,
},
create: {
department: targetDepartment,
materialType,
canView: false,
canDownload: false,
canShare: true,
linkedToDepartment: sourceDepartment,
},
});
}
return NextResponse.json({
message: '权限关联成功',
targetDepartment,
sourceDepartment,
});
} catch (error) {
console.error('[Department Permissions Link] Error:', error);
return NextResponse.json({ error: '关联权限失败' }, { status: 500 });
}
}
/**
* DELETE - 取消关联权限配置
*/
export async function DELETE(request: NextRequest) {
try {
const session = await getServerSession(authOptions);
const userId = (session?.user as any)?.id;
if (!session || !(await isSuperAdmin(userId))) {
return NextResponse.json({ error: '需要超级管理员权限' }, { status: 403 });
}
const { searchParams } = new URL(request.url);
const department = searchParams.get('department');
if (!department) {
return NextResponse.json({ error: '部门名称不能为空' }, { status: 400 });
}
// 清除该部门所有权限配置的关联
await prisma.departmentMaterialPermission.updateMany({
where: {
department,
linkedToDepartment: { not: null },
},
data: {
linkedToDepartment: null,
},
});
return NextResponse.json({
message: '已取消关联',
department,
});
} catch (error) {
console.error('[Department Permissions Unlink] Error:', error);
return NextResponse.json({ error: '取消关联失败' }, { status: 500 });
}
}