100 lines
3.9 KiB
TypeScript
100 lines
3.9 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { ProjectService, EvaluationService, ProjectFileService } from '@/lib/services/database';
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
console.log('📊 開始獲取歷史記錄數據...');
|
|
|
|
// 獲取所有專案及其評審結果
|
|
const projects = await ProjectService.getAll();
|
|
console.log(`📋 找到 ${projects.length} 個專案`);
|
|
|
|
const historyData = [];
|
|
|
|
for (const project of projects) {
|
|
// 獲取該專案的最新評審結果
|
|
const latestEvaluation = await EvaluationService.findByProjectId(project.id);
|
|
|
|
// 獲取該專案的文件信息
|
|
const projectFiles = await ProjectFileService.findByProjectId(project.id);
|
|
|
|
// 判斷文件類型
|
|
let fileType = 'Unknown';
|
|
if (projectFiles.length > 0) {
|
|
const fileTypeFromDB = projectFiles[0].file_type;
|
|
if (fileTypeFromDB) {
|
|
// 根據 file_type 判斷文件類型
|
|
if (fileTypeFromDB.toLowerCase().includes('ppt') || fileTypeFromDB.toLowerCase().includes('powerpoint')) {
|
|
fileType = 'PPT';
|
|
} else if (fileTypeFromDB.toLowerCase().includes('mp4') || fileTypeFromDB.toLowerCase().includes('avi') || fileTypeFromDB.toLowerCase().includes('mov')) {
|
|
fileType = 'Video';
|
|
} else if (fileTypeFromDB.toLowerCase().includes('pdf')) {
|
|
fileType = 'PDF';
|
|
} else if (fileTypeFromDB.toLowerCase().includes('html') || fileTypeFromDB.toLowerCase().includes('htm')) {
|
|
fileType = 'Website';
|
|
} else {
|
|
// 如果無法從 file_type 判斷,嘗試從檔名判斷
|
|
const fileName = projectFiles[0].original_name.toLowerCase();
|
|
if (fileName.includes('.ppt') || fileName.includes('.pptx')) {
|
|
fileType = 'PPT';
|
|
} else if (fileName.includes('.mp4') || fileName.includes('.avi') || fileName.includes('.mov')) {
|
|
fileType = 'Video';
|
|
} else if (fileName.includes('.pdf')) {
|
|
fileType = 'PDF';
|
|
} else if (fileName.includes('.html') || fileName.includes('.htm')) {
|
|
fileType = 'Website';
|
|
} else {
|
|
fileType = fileTypeFromDB.toUpperCase();
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
// 如果沒有文件記錄,嘗試從專案標題判斷
|
|
if (project.title.includes('PPT') || project.title.includes('簡報')) {
|
|
fileType = 'PPT';
|
|
} else if (project.title.includes('網站') || project.title.includes('Website')) {
|
|
fileType = 'Website';
|
|
} else if (project.title.includes('影片') || project.title.includes('Video')) {
|
|
fileType = 'Video';
|
|
}
|
|
}
|
|
|
|
// 格式化日期
|
|
const formatDate = (date: Date) => {
|
|
return new Date(date).toISOString().split('T')[0];
|
|
};
|
|
|
|
historyData.push({
|
|
id: project.id.toString(),
|
|
title: project.title,
|
|
type: fileType,
|
|
score: latestEvaluation?.overall_score ? Number(latestEvaluation.overall_score) : 0,
|
|
grade: latestEvaluation?.grade || '-',
|
|
date: formatDate(project.created_at),
|
|
status: project.status === 'completed' ? 'completed' : 'processing',
|
|
evaluation_id: latestEvaluation?.id || null,
|
|
description: project.description || '',
|
|
created_at: project.created_at,
|
|
updated_at: project.updated_at
|
|
});
|
|
}
|
|
|
|
// 按創建時間倒序排列
|
|
historyData.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
|
|
|
|
console.log(`✅ 成功獲取 ${historyData.length} 條歷史記錄`);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: historyData
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('❌ 獲取歷史記錄失敗:', error);
|
|
return NextResponse.json(
|
|
{ success: false, error: '獲取歷史記錄失敗' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|