實作創意題與資料庫整合

This commit is contained in:
2025-09-29 03:24:17 +08:00
parent aa34d2d078
commit a3b46b4430
18 changed files with 1366 additions and 30 deletions

View File

@@ -0,0 +1,49 @@
const mysql = require('mysql2/promise')
async function checkCreativeQuestionsTable() {
const config = {
host: process.env.DB_HOST || 'mysql.theaken.com',
port: parseInt(process.env.DB_PORT || '33306'),
user: process.env.DB_USER || 'hr_assessment',
password: process.env.DB_PASSWORD || 'QFOts8FlibiI',
database: process.env.DB_NAME || 'db_hr_assessment',
}
console.log('🔍 檢查 creative_questions 表結構...')
let connection
try {
connection = await mysql.createConnection(config)
// 檢查表結構
const [columns] = await connection.execute("DESCRIBE creative_questions")
console.log('\n📊 creative_questions 表結構:')
columns.forEach(col => {
console.log(`- ${col.Field}: ${col.Type} ${col.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${col.Key ? `(${col.Key})` : ''}`)
})
// 檢查表內容
const [rows] = await connection.execute("SELECT * FROM creative_questions LIMIT 3")
console.log('\n📝 creative_questions 表內容 (前3筆):')
if (rows.length > 0) {
rows.forEach((row, index) => {
console.log(`${index + 1}. ID: ${row.id}`)
console.log(` 題目: ${row.statement}`)
console.log(` 類別: ${row.category}`)
console.log(` 是否反向: ${row.is_reverse}`)
console.log('')
})
} else {
console.log('❌ 沒有找到創意題目數據')
}
} catch (error) {
console.error('❌ 檢查失敗:', error.message)
} finally {
if (connection) {
await connection.end()
}
}
}
checkCreativeQuestionsTable()

View File

@@ -0,0 +1,41 @@
const mysql = require('mysql2/promise')
async function checkCreativeTestAnswersTable() {
const config = {
host: process.env.DB_HOST || 'mysql.theaken.com',
port: parseInt(process.env.DB_PORT || '33306'),
user: process.env.DB_USER || 'hr_assessment',
password: process.env.DB_PASSWORD || 'QFOts8FlibiI',
database: process.env.DB_NAME || 'db_hr_assessment',
}
console.log('🔍 檢查 creative_test_answers 表結構...')
let connection
try {
connection = await mysql.createConnection(config)
// 檢查表是否存在
const [tables] = await connection.execute("SHOW TABLES LIKE 'creative_test_answers'")
if (tables.length === 0) {
console.log('❌ creative_test_answers 表不存在')
return
}
// 檢查表結構
const [columns] = await connection.execute("DESCRIBE creative_test_answers")
console.log('\n📊 creative_test_answers 表結構:')
columns.forEach(col => {
console.log(`- ${col.Field}: ${col.Type} ${col.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${col.Key ? `(${col.Key})` : ''}`)
})
} catch (error) {
console.error('❌ 檢查失敗:', error.message)
} finally {
if (connection) {
await connection.end()
}
}
}
checkCreativeTestAnswersTable()

View File

@@ -0,0 +1,84 @@
const mysql = require('mysql2/promise')
async function checkCreativeTestResults() {
const config = {
host: process.env.DB_HOST || 'mysql.theaken.com',
port: parseInt(process.env.DB_PORT || '33306'),
user: process.env.DB_USER || 'hr_assessment',
password: process.env.DB_PASSWORD || 'QFOts8FlibiI',
database: process.env.DB_NAME || 'db_hr_assessment',
}
console.log('🔍 檢查創意測驗結果...')
let connection
try {
connection = await mysql.createConnection(config)
// 檢查 test_results 表中的創意測驗結果
const [creativeResults] = await connection.execute(
`SELECT tr.*, u.name as user_name
FROM test_results tr
JOIN users u ON tr.user_id = u.id
WHERE tr.test_type = 'creative'
ORDER BY tr.completed_at DESC`
)
console.log('\n📊 test_results 表中的創意測驗結果:')
if (creativeResults.length > 0) {
console.log(`找到 ${creativeResults.length} 筆創意測驗結果:`)
creativeResults.forEach((result, index) => {
console.log(`${index + 1}. ID: ${result.id}`)
console.log(` 用戶ID: ${result.user_id}`)
console.log(` 用戶名稱: ${result.user_name}`)
console.log(` 分數: ${result.score}`)
console.log(` 總分數: ${result.correct_answers}`)
console.log(` 總題數: ${result.total_questions}`)
console.log(` 完成時間: ${new Date(result.completed_at)}`)
console.log(` 建立時間: ${new Date(result.created_at)}`)
console.log('')
})
} else {
console.log('❌ 沒有找到創意測驗結果')
}
// 檢查 creative_test_answers 表中的答案記錄
const [answerRecords] = await connection.execute(
`SELECT cta.*, u.id as user_id, cq.statement as question_text, cq.is_reverse
FROM creative_test_answers cta
JOIN test_results tr ON cta.test_result_id = tr.id
JOIN users u ON tr.user_id = u.id
JOIN creative_questions cq ON cta.question_id = cq.id
ORDER BY cta.created_at ASC
LIMIT 10`
)
console.log('\n📝 creative_test_answers 表中的答案記錄 (前10筆):')
if (answerRecords.length > 0) {
console.log(`找到 ${answerRecords.length} 筆答案記錄:`)
answerRecords.forEach((record, index) => {
console.log(`${index + 1}. 答案ID: ${record.id}`)
console.log(` 測試結果ID: ${record.test_result_id}`)
console.log(` 用戶ID: ${record.user_id}`)
console.log(` 題目ID: ${record.question_id}`)
console.log(` 題目: ${record.question_text}`)
console.log(` 用戶答案: ${record.user_answer}`)
console.log(` 計算分數: ${record.score}`)
console.log(` 是否反向題: ${record.is_reverse ? '是' : '否'}`)
console.log(` 建立時間: ${new Date(record.created_at)}`)
console.log('')
})
} else {
console.log('❌ 沒有找到答案記錄')
}
} catch (error) {
console.error('❌ 檢查失敗:', error.message)
} finally {
if (connection) {
await connection.end()
}
}
}
checkCreativeTestResults()

View File

@@ -0,0 +1,132 @@
const https = require('https')
const http = require('http')
const debugDimensionScoring = async () => {
console.log('🔍 調試維度分數計算')
console.log('=' .repeat(50))
const testResultId = 'test_1759086508812_xv2pof6lk' // 使用最新的測試結果ID
try {
// 1. 獲取測試結果
console.log('\n📊 1. 獲取測試結果...')
const resultResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/test-results/creative?userId=user-1759073326705-m06y3wacd`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (resultResponse.status === 200) {
const resultData = JSON.parse(resultResponse.data)
if (resultData.success && resultData.data.length > 0) {
const testResult = resultData.data[0]
console.log('測試結果:', {
id: testResult.id,
score: testResult.score,
total_questions: testResult.total_questions,
correct_answers: testResult.correct_answers
})
}
}
// 2. 獲取題目資料
console.log('\n📊 2. 獲取題目資料...')
const questionsResponse = await new Promise((resolve, reject) => {
const req = http.get('http://localhost:3000/api/creative-questions', (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
let questions = []
if (questionsResponse.status === 200) {
const questionsData = JSON.parse(questionsResponse.data)
if (questionsData.success) {
questions = questionsData.questions
console.log(`獲取到 ${questions.length} 個題目`)
}
}
// 3. 獲取詳細答案
console.log('\n📊 3. 獲取詳細答案...')
const answersResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/creative-test-answers?testResultId=${testResultId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (answersResponse.status === 200) {
const answersData = JSON.parse(answersResponse.data)
if (answersData.success) {
const answers = answersData.data
console.log(`獲取到 ${answers.length} 個答案`)
// 4. 按維度分組計算
console.log('\n📊 4. 按維度分組計算...')
const dimensionScores = {
innovation: { total: 0, count: 0, answers: [] },
imagination: { total: 0, count: 0, answers: [] },
flexibility: { total: 0, count: 0, answers: [] },
originality: { total: 0, count: 0, answers: [] }
}
answers.forEach((answer) => {
const question = questions.find(q => q.id === answer.question_id)
if (question && dimensionScores[question.category]) {
dimensionScores[question.category].total += answer.score
dimensionScores[question.category].count += 1
dimensionScores[question.category].answers.push({
question_id: answer.question_id,
user_answer: answer.user_answer,
score: answer.score,
is_reverse: question.is_reverse
})
}
})
// 5. 顯示詳細計算過程
console.log('\n📊 5. 詳細計算過程:')
Object.keys(dimensionScores).forEach(category => {
const { total, count, answers } = dimensionScores[category]
const maxPossible = count * 5
const percentage = count > 0 ? Math.round((total / maxPossible) * 100) : 0
console.log(`\n${category}:`)
console.log(` 題目數量: ${count}`)
console.log(` 總分數: ${total}`)
console.log(` 最大可能分數: ${maxPossible}`)
console.log(` 百分比: ${percentage}%`)
console.log(` 答案詳情:`)
answers.forEach((ans, index) => {
console.log(` ${index + 1}. 題目${ans.question_id}: 用戶答案${ans.user_answer} → 計算分數${ans.score} (反向題: ${ans.is_reverse ? '是' : '否'})`)
})
})
// 6. 總分驗證
console.log('\n📊 6. 總分驗證:')
const totalScore = answers.reduce((sum, answer) => sum + answer.score, 0)
const maxTotalScore = answers.length * 5
const totalPercentage = Math.round((totalScore / maxTotalScore) * 100)
console.log(`所有答案總分數: ${totalScore}`)
console.log(`最大可能總分數: ${maxTotalScore}`)
console.log(`總百分比: ${totalPercentage}%`)
}
}
} catch (error) {
console.error('❌ 調試失敗:', error.message)
} finally {
console.log('\n✅ 維度分數計算調試完成')
}
}
debugDimensionScoring()

View File

@@ -0,0 +1,61 @@
const https = require('https')
const http = require('http')
const testCreativeAnswersAPI = async () => {
console.log('🧪 測試創意測驗答案 API')
console.log('=' .repeat(50))
const testResultId = 'test_1759086508812_xv2pof6lk' // 使用最新的測試結果ID
const url = `http://localhost:3000/api/creative-test-answers?testResultId=${testResultId}`
try {
console.log(`\n📊 測試結果ID: ${testResultId}`)
console.log(`🔗 API URL: ${url}`)
const response = await new Promise((resolve, reject) => {
const req = http.get(url, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
console.log('📊 響應狀態:', response.status)
if (response.status === 200) {
const result = JSON.parse(response.data)
console.log('\n✅ API 測試成功!')
console.log('📡 響應內容:', JSON.stringify(result, null, 2))
if (result.success) {
console.log(`\n📈 答案記錄詳情:`)
console.log(`- 答案數量: ${result.data.length}`)
// 按維度分組統計
const dimensionStats = {
innovation: { total: 0, count: 0 },
imagination: { total: 0, count: 0 },
flexibility: { total: 0, count: 0 },
originality: { total: 0, count: 0 }
}
result.data.forEach((answer, index) => {
console.log(`${index + 1}. 題目ID: ${answer.question_id}, 用戶答案: ${answer.user_answer}, 計算分數: ${answer.score}`)
})
}
} else {
console.log('❌ API 響應失敗,狀態碼:', response.status)
console.log('響應內容:', response.data)
}
} catch (error) {
console.error('\n❌ 請求失敗:')
console.error('錯誤類型:', error.name)
console.error('錯誤訊息:', error.message)
} finally {
console.log('\n✅ 創意測驗答案 API 測試完成')
}
}
testCreativeAnswersAPI()

View File

@@ -0,0 +1,79 @@
const https = require('https')
const http = require('http')
const testCreativeDBUpload = async () => {
console.log('🧪 測試創意測驗資料庫上傳功能')
console.log('=' .repeat(50))
const userId = 'user-1759073326705-m06y3wacd' // 使用現有用戶ID
const url = 'http://localhost:3000/api/test-results/creative'
// 模擬創意測驗答案1-5分包含反向題
const testAnswers = [
5, 4, 3, 2, 1, // 前5題正常題
1, 2, 3, 4, 5, // 中間5題反向題會自動反轉
5, 4, 3, 2, 1, // 後8題正常題
1, 2, 3, 4, 5
]
const testData = {
userId: userId,
answers: testAnswers,
completedAt: new Date().toISOString().replace('Z', '').replace('T', ' ')
}
console.log('\n📝 測試數據:')
console.log('用戶ID:', testData.userId)
console.log('答案數量:', testData.answers.length)
console.log('答案內容:', testData.answers)
console.log('完成時間:', testData.completedAt)
try {
console.log('\n🔄 測試創意測驗 API...')
const response = await new Promise((resolve, reject) => {
const req = http.request(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
}, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
req.write(JSON.stringify(testData))
req.end()
})
console.log('📊 響應狀態:', response.status)
if (response.status === 200) {
const result = JSON.parse(response.data)
console.log('\n✅ API 測試成功!')
console.log('📡 響應內容:', JSON.stringify(result, null, 2))
if (result.success) {
console.log('\n📈 測試結果詳情:')
console.log('- 測試結果ID:', result.data.testResult.id)
console.log('- 分數:', result.data.testResult.score)
console.log('- 總題數:', result.data.testResult.total_questions)
console.log('- 總分數:', result.data.testResult.correct_answers)
console.log('- 答案記錄數量:', result.data.answerCount)
}
} else {
console.log('❌ API 響應失敗,狀態碼:', response.status)
console.log('響應內容:', response.data)
}
} catch (error) {
console.error('\n❌ 請求失敗:')
console.error('錯誤類型:', error.name)
console.error('錯誤訊息:', error.message)
} finally {
console.log('\n✅ 創意測驗資料庫上傳測試完成')
}
}
testCreativeDBUpload()

View File

@@ -0,0 +1,67 @@
const https = require('https')
const http = require('http')
const testCreativeResultsPage = async () => {
console.log('🧪 測試創意測驗結果頁面數據獲取')
console.log('=' .repeat(50))
const userId = 'user-1759073326705-m06y3wacd'
try {
// 1. 測試用戶測試結果 API
console.log('\n📊 1. 測試用戶測試結果 API...')
const userResultsResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/user/test-results?userId=${userId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (userResultsResponse.status === 200) {
const userResultsData = JSON.parse(userResultsResponse.data)
console.log('用戶測試結果:', JSON.stringify(userResultsData, null, 2))
}
// 2. 測試創意測驗結果 API
console.log('\n📊 2. 測試創意測驗結果 API...')
const creativeResultsResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/test-results/creative?userId=${userId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (creativeResultsResponse.status === 200) {
const creativeResultsData = JSON.parse(creativeResultsResponse.data)
console.log('創意測驗結果:', JSON.stringify(creativeResultsData, null, 2))
}
// 3. 測試創意測驗答案 API
console.log('\n📊 3. 測試創意測驗答案 API...')
const testResultId = 'test_1759086508812_xv2pof6lk'
const answersResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/creative-test-answers?testResultId=${testResultId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (answersResponse.status === 200) {
const answersData = JSON.parse(answersResponse.data)
console.log('創意測驗答案數量:', answersData.data.length)
}
} catch (error) {
console.error('❌ 測試失敗:', error.message)
} finally {
console.log('\n✅ 創意測驗結果頁面數據獲取測試完成')
}
}
testCreativeResultsPage()

View File

@@ -0,0 +1,156 @@
const https = require('https')
const http = require('http')
const testFixedDimensionDisplay = async () => {
console.log('🧪 測試修正後的維度分數顯示')
console.log('=' .repeat(50))
const userId = 'user-1759073326705-m06y3wacd'
const testResultId = 'test_1759086508812_xv2pof6lk'
try {
// 1. 獲取測試結果
console.log('\n📊 1. 獲取測試結果...')
const resultResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/test-results/creative?userId=${userId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
let testResult = null
if (resultResponse.status === 200) {
const resultData = JSON.parse(resultResponse.data)
if (resultData.success && resultData.data.length > 0) {
testResult = resultData.data[0]
console.log('測試結果:', {
id: testResult.id,
score: testResult.score,
total_questions: testResult.total_questions,
correct_answers: testResult.correct_answers
})
}
}
// 2. 獲取題目資料
console.log('\n📊 2. 獲取題目資料...')
const questionsResponse = await new Promise((resolve, reject) => {
const req = http.get('http://localhost:3000/api/creative-questions', (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
let questions = []
if (questionsResponse.status === 200) {
const questionsData = JSON.parse(questionsResponse.data)
if (questionsData.success) {
questions = questionsData.questions
console.log(`獲取到 ${questions.length} 個題目`)
}
}
// 3. 獲取詳細答案
console.log('\n📊 3. 獲取詳細答案...')
const answersResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/creative-test-answers?testResultId=${testResultId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (answersResponse.status === 200) {
const answersData = JSON.parse(answersResponse.data)
if (answersData.success) {
const answers = answersData.data
console.log(`獲取到 ${answers.length} 個答案`)
// 4. 模擬新的維度分數計算
console.log('\n📊 4. 模擬新的維度分數計算...')
const dimensionScores = {
innovation: { total: 0, count: 0 },
imagination: { total: 0, count: 0 },
flexibility: { total: 0, count: 0 },
originality: { total: 0, count: 0 }
}
answers.forEach((answer) => {
const question = questions.find(q => q.id === answer.question_id)
if (question && dimensionScores[question.category]) {
dimensionScores[question.category].total += answer.score
dimensionScores[question.category].count += 1
}
})
// 計算新的維度分數結構
const calculatedDimensionScores = {
innovation: { percentage: 0, rawScore: 0, maxScore: 0 },
imagination: { percentage: 0, rawScore: 0, maxScore: 0 },
flexibility: { percentage: 0, rawScore: 0, maxScore: 0 },
originality: { percentage: 0, rawScore: 0, maxScore: 0 }
}
Object.keys(dimensionScores).forEach(category => {
const { total, count } = dimensionScores[category]
const maxScore = count * 5
const percentage = count > 0 ? Math.round((total / maxScore) * 100) : 0
calculatedDimensionScores[category] = {
percentage: percentage,
rawScore: total,
maxScore: maxScore
}
})
console.log('\n📈 新的維度分數結構:')
Object.entries(calculatedDimensionScores).forEach(([category, data]) => {
console.log(`${category}:`)
console.log(` 百分比: ${data.percentage}%`)
console.log(` 原始分數: ${data.rawScore}`)
console.log(` 滿分: ${data.maxScore}`)
console.log(` 顯示: ${data.rawScore}/${data.maxScore}`)
})
// 5. 模擬 categoryResults 計算
console.log('\n📊 5. 模擬 categoryResults 計算...')
const dimensionNames = {
innovation: '創新能力',
imagination: '想像力',
flexibility: '靈活性',
originality: '原創性'
}
const categoryResults = Object.entries(calculatedDimensionScores).map(([key, data]) => ({
category: key,
name: dimensionNames[key],
score: data.percentage,
rawScore: data.rawScore,
maxRawScore: data.maxScore
}))
console.log('\n📈 categoryResults:')
categoryResults.forEach(category => {
console.log(`${category.name}:`)
console.log(` 分數: ${category.score}`)
console.log(` 顯示: ${category.rawScore}/${category.maxRawScore}`)
})
}
}
} catch (error) {
console.error('❌ 測試失敗:', error.message)
} finally {
console.log('\n✅ 修正後的維度分數顯示測試完成')
}
}
testFixedDimensionDisplay()

View File

@@ -0,0 +1,158 @@
const https = require('https')
const http = require('http')
const testFixedDimensionScoring = async () => {
console.log('🧪 測試修正後的維度分數計算')
console.log('=' .repeat(50))
const userId = 'user-1759073326705-m06y3wacd'
const testResultId = 'test_1759086508812_xv2pof6lk'
try {
// 1. 獲取測試結果
console.log('\n📊 1. 獲取測試結果...')
const resultResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/test-results/creative?userId=${userId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
let testResult = null
if (resultResponse.status === 200) {
const resultData = JSON.parse(resultResponse.data)
if (resultData.success && resultData.data.length > 0) {
testResult = resultData.data[0]
console.log('測試結果:', {
id: testResult.id,
score: testResult.score,
total_questions: testResult.total_questions,
correct_answers: testResult.correct_answers
})
}
}
// 2. 獲取題目資料
console.log('\n📊 2. 獲取題目資料...')
const questionsResponse = await new Promise((resolve, reject) => {
const req = http.get('http://localhost:3000/api/creative-questions', (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
let questions = []
if (questionsResponse.status === 200) {
const questionsData = JSON.parse(questionsResponse.data)
if (questionsData.success) {
questions = questionsData.questions
console.log(`獲取到 ${questions.length} 個題目`)
}
}
// 3. 獲取詳細答案
console.log('\n📊 3. 獲取詳細答案...')
const answersResponse = await new Promise((resolve, reject) => {
const req = http.get(`http://localhost:3000/api/creative-test-answers?testResultId=${testResultId}`, (res) => {
let data = ''
res.on('data', chunk => data += chunk)
res.on('end', () => resolve({ status: res.statusCode, data }))
})
req.on('error', reject)
})
if (answersResponse.status === 200) {
const answersData = JSON.parse(answersResponse.data)
if (answersData.success) {
const answers = answersData.data
console.log(`獲取到 ${answers.length} 個答案`)
// 4. 模擬結果頁面的維度分數計算
console.log('\n📊 4. 模擬結果頁面的維度分數計算...')
// 計算各維度分數(模擬資料庫計算)
const dimensionScores = {
innovation: { total: 0, count: 0 },
imagination: { total: 0, count: 0 },
flexibility: { total: 0, count: 0 },
originality: { total: 0, count: 0 }
}
answers.forEach((answer) => {
const question = questions.find(q => q.id === answer.question_id)
if (question && dimensionScores[question.category]) {
dimensionScores[question.category].total += answer.score
dimensionScores[question.category].count += 1
}
})
// 計算百分比分數
const calculatedDimensionScores = {
innovation: 0,
imagination: 0,
flexibility: 0,
originality: 0
}
Object.keys(dimensionScores).forEach(category => {
const { total, count } = dimensionScores[category]
calculatedDimensionScores[category] =
count > 0 ? Math.round((total / (count * 5)) * 100) : 0
})
console.log('\n📈 計算結果:')
console.log('創新能力:', calculatedDimensionScores.innovation + '%')
console.log('想像力:', calculatedDimensionScores.imagination + '%')
console.log('靈活性:', calculatedDimensionScores.flexibility + '%')
console.log('原創性:', calculatedDimensionScores.originality + '%')
// 5. 模擬結果頁面的 categoryResults 計算
console.log('\n📊 5. 模擬結果頁面的 categoryResults 計算...')
const dimensionNames = {
innovation: '創新能力',
imagination: '想像力',
flexibility: '靈活性',
originality: '原創性'
}
const categoryResults = Object.entries(calculatedDimensionScores).map(([key, score]) => ({
category: key,
name: dimensionNames[key],
score: score,
rawScore: 0,
maxRawScore: 0
}))
console.log('\n📈 categoryResults:')
categoryResults.forEach(category => {
console.log(`${category.name}: ${category.score}`)
})
// 6. 驗證總分一致性
console.log('\n📊 6. 驗證總分一致性...')
const totalScore = answers.reduce((sum, answer) => sum + answer.score, 0)
const maxTotalScore = answers.length * 5
const totalPercentage = Math.round((totalScore / maxTotalScore) * 100)
console.log(`資料庫總分數: ${testResult.correct_answers}`)
console.log(`計算總分數: ${totalScore}`)
console.log(`資料庫百分比: ${testResult.score}%`)
console.log(`計算百分比: ${totalPercentage}%`)
console.log(`一致性: ${testResult.correct_answers === totalScore && testResult.score === totalPercentage ? '✅ 一致' : '❌ 不一致'}`)
}
}
} catch (error) {
console.error('❌ 測試失敗:', error.message)
} finally {
console.log('\n✅ 修正後的維度分數計算測試完成')
}
}
testFixedDimensionScoring()