115 lines
3.2 KiB
TypeScript
115 lines
3.2 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
||
import { createCombinedTestResult } from '@/lib/database/models/combined_test_result'
|
||
|
||
export async function POST(request: NextRequest) {
|
||
let body: any
|
||
try {
|
||
body = await request.json()
|
||
const {
|
||
userId,
|
||
logicScore,
|
||
creativityScore,
|
||
overallScore,
|
||
level,
|
||
description,
|
||
logicBreakdown,
|
||
creativityBreakdown,
|
||
balanceScore,
|
||
completedAt
|
||
} = body
|
||
|
||
// 驗證必要欄位
|
||
if (!userId || logicScore === undefined || creativityScore === undefined ||
|
||
overallScore === undefined || !level || !completedAt) {
|
||
return NextResponse.json(
|
||
{ success: false, error: '缺少必要欄位' },
|
||
{ status: 400 }
|
||
)
|
||
}
|
||
|
||
console.log('🔄 開始建立綜合測試結果...')
|
||
console.log('用戶ID:', userId)
|
||
console.log('邏輯分數:', logicScore)
|
||
console.log('創意分數:', creativityScore)
|
||
console.log('總分:', overallScore)
|
||
console.log('等級:', level)
|
||
|
||
// 統一使用台灣時間格式
|
||
// 將 UTC 時間轉換為台灣時間,然後轉換為 MySQL 格式
|
||
const utcDate = new Date(completedAt)
|
||
const taiwanTime = new Date(utcDate.getTime() + (8 * 60 * 60 * 1000)) // UTC + 8 小時
|
||
const mysqlCompletedAt = taiwanTime.toISOString().replace('Z', '').replace('T', ' ')
|
||
|
||
// 建立綜合測試結果
|
||
const testResult = await createCombinedTestResult({
|
||
user_id: userId,
|
||
logic_score: logicScore,
|
||
creativity_score: creativityScore,
|
||
overall_score: overallScore,
|
||
level: level,
|
||
description: description || null,
|
||
logic_breakdown: logicBreakdown || null,
|
||
creativity_breakdown: creativityBreakdown || null,
|
||
balance_score: balanceScore || 0,
|
||
completed_at: mysqlCompletedAt
|
||
})
|
||
|
||
if (!testResult) {
|
||
return NextResponse.json(
|
||
{ success: false, error: '建立綜合測試結果失敗' },
|
||
{ status: 500 }
|
||
)
|
||
}
|
||
|
||
console.log('✅ 綜合測試結果建立成功,ID:', testResult.id)
|
||
|
||
return NextResponse.json({
|
||
success: true,
|
||
data: {
|
||
testResult
|
||
}
|
||
})
|
||
|
||
} catch (error) {
|
||
console.error('上傳綜合測試結果失敗:', error)
|
||
return NextResponse.json(
|
||
{
|
||
success: false,
|
||
error: '伺服器錯誤',
|
||
details: error instanceof Error ? error.message : '未知錯誤'
|
||
},
|
||
{ status: 500 }
|
||
)
|
||
}
|
||
}
|
||
|
||
export async function GET(request: NextRequest) {
|
||
try {
|
||
const { searchParams } = new URL(request.url)
|
||
const userId = searchParams.get('userId')
|
||
|
||
if (!userId) {
|
||
return NextResponse.json(
|
||
{ success: false, error: '缺少用戶ID' },
|
||
{ status: 400 }
|
||
)
|
||
}
|
||
|
||
// 獲取用戶的綜合測試結果
|
||
const { getCombinedTestResultsByUserId } = await import('@/lib/database/models/combined_test_result')
|
||
const results = await getCombinedTestResultsByUserId(userId)
|
||
|
||
return NextResponse.json({
|
||
success: true,
|
||
data: results
|
||
})
|
||
|
||
} catch (error) {
|
||
console.error('獲取綜合測試結果失敗:', error)
|
||
return NextResponse.json(
|
||
{ success: false, error: '伺服器錯誤' },
|
||
{ status: 500 }
|
||
)
|
||
}
|
||
}
|