新增 競賽建立、評審建立、團隊建立

This commit is contained in:
2025-09-15 13:32:30 +08:00
parent b85a9ce95e
commit 31ffaa1974
31 changed files with 5163 additions and 455 deletions

View File

@@ -0,0 +1,72 @@
// =====================================================
// 評審統計 API
// =====================================================
import { NextResponse } from 'next/server';
import { JudgeService } from '@/lib/services/database-service';
// 獲取評審統計
export async function GET() {
try {
const judges = await JudgeService.getAllJudges();
// 計算統計數據
const totalJudges = judges.length;
const activeJudges = judges.filter(judge => judge.is_active).length;
const inactiveJudges = judges.filter(judge => !judge.is_active).length;
// 按部門統計
const departmentStats = judges.reduce((acc, judge) => {
const dept = judge.department || '未分類';
if (!acc[dept]) {
acc[dept] = { total: 0, active: 0, inactive: 0 };
}
acc[dept].total++;
if (judge.is_active) {
acc[dept].active++;
} else {
acc[dept].inactive++;
}
return acc;
}, {} as Record<string, { total: number; active: number; inactive: number }>);
// 按專業領域統計
const expertiseStats = judges.reduce((acc, judge) => {
judge.expertise.forEach(exp => {
if (!acc[exp]) {
acc[exp] = { total: 0, active: 0, inactive: 0 };
}
acc[exp].total++;
if (judge.is_active) {
acc[exp].active++;
} else {
acc[exp].inactive++;
}
});
return acc;
}, {} as Record<string, { total: number; active: number; inactive: number }>);
const stats = {
totalJudges,
activeJudges,
inactiveJudges,
departmentStats,
expertiseStats,
lastUpdated: new Date().toISOString()
};
return NextResponse.json({
success: true,
message: '評審統計獲取成功',
data: stats
});
} catch (error) {
console.error('獲取評審統計失敗:', error);
return NextResponse.json({
success: false,
message: '獲取評審統計失敗',
error: error instanceof Error ? error.message : '未知錯誤'
}, { status: 500 });
}
}