import { getServerSession } from 'next-auth' import { NextResponse } from 'next/server' import { authOptions } from '@/lib/auth' import { PerformanceSurveyApiError } from '@/lib/performance-survey-service' import { WorkReviewApiError, createWorkReviewProject, createWorkReviewVersion, deleteWorkReviewProject, getWorkReviewBoard, getWorkReviewReviewerOptions, submitWorkReview, } from '@/lib/work-review-service' export const runtime = 'nodejs' export const dynamic = 'force-dynamic' export const revalidate = 0 type RouteContext = { params: { path?: string[] } } function ok(data: unknown, init?: ResponseInit) { return NextResponse.json({ success: true, data }, init) } function errorResponse(error: unknown) { if (error instanceof WorkReviewApiError || error instanceof PerformanceSurveyApiError) { return NextResponse.json({ success: false, error: error.message }, { status: error.status }) } console.error('[work-review] API error:', error) return NextResponse.json({ success: false, error: '服务器错误,请稍后重试' }, { status: 500 }) } function getPath(context: RouteContext) { return context.params.path || [] } export async function GET(request: Request, context: RouteContext) { try { const path = getPath(context) const session = await getServerSession(authOptions) if (path[0] === 'reviewers' && path.length === 1) { return ok(await getWorkReviewReviewerOptions(session)) } if (path.length > 0) { return NextResponse.json({ success: false, error: '接口不存在' }, { status: 404 }) } return ok(await getWorkReviewBoard(session, new URL(request.url).searchParams)) } catch (error) { return errorResponse(error) } } export async function POST(request: Request, context: RouteContext) { try { const session = await getServerSession(authOptions) const path = getPath(context) const body = await request.json().catch(() => ({})) if (path[0] === 'projects' && path.length === 1) { return ok(await createWorkReviewProject(session, body), { status: 201 }) } if (path[0] === 'projects' && path[1] && path[2] === 'versions' && path.length === 3) { return ok(await createWorkReviewVersion(session, path[1], body), { status: 201 }) } if (path[0] === 'versions' && path[1] && path[2] === 'reviews' && path.length === 3) { return ok(await submitWorkReview(session, path[1], body)) } return NextResponse.json({ success: false, error: '接口不存在' }, { status: 404 }) } catch (error) { return errorResponse(error) } } export async function DELETE(_request: Request, context: RouteContext) { try { const session = await getServerSession(authOptions) const path = getPath(context) if (path[0] === 'projects' && path[1] && path.length === 2) { return ok(await deleteWorkReviewProject(session, path[1])) } return NextResponse.json({ success: false, error: '接口不存在' }, { status: 404 }) } catch (error) { return errorResponse(error) } }