創意題與資料庫整合

This commit is contained in:
2025-09-29 00:50:47 +08:00
parent eb073c7c1d
commit 052eb0ea7b
10 changed files with 562 additions and 14 deletions

View File

@@ -0,0 +1,52 @@
const mysql = require('mysql2/promise')
async function checkCreativeQuestions() {
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('🔄 正在檢查創意能力測試題目...')
try {
const connection = await mysql.createConnection(config)
const [rows] = await connection.execute('SELECT * FROM creative_questions ORDER BY id')
console.log(`\n📋 共找到 ${rows.length} 道創意能力測試題目:`)
console.log('=' .repeat(80))
rows.forEach((question, index) => {
const reverseText = question.is_reverse ? ' (反向題)' : ''
console.log(`\n${index + 1}. ID: ${question.id}`)
console.log(` 題目: ${question.statement}`)
console.log(` 類別: ${question.category}`)
console.log(` 反向題: ${question.is_reverse ? '是' : '否'}${reverseText}`)
})
console.log('\n📊 統計:')
const reverseCount = rows.filter(q => q.is_reverse).length
const normalCount = rows.length - reverseCount
const categoryCount = {}
rows.forEach(q => {
categoryCount[q.category] = (categoryCount[q.category] || 0) + 1
})
console.log(`- 一般題目: ${normalCount}`)
console.log(`- 反向題目: ${reverseCount}`)
console.log('- 類別分布:')
Object.entries(categoryCount).forEach(([category, count]) => {
console.log(` - ${category}: ${count}`)
})
await connection.end()
console.log('\n✅ 檢查完成')
} catch (error) {
console.error('❌ 檢查失敗:', error.message)
}
}
checkCreativeQuestions()

View File

@@ -0,0 +1,40 @@
const mysql = require('mysql2/promise')
async function checkCreativeTableStructure() {
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 表結構...')
try {
const connection = await mysql.createConnection(config)
// 檢查表是否存在
const [tables] = await connection.execute("SHOW TABLES LIKE 'creative_questions'")
if (tables.length === 0) {
console.log('❌ creative_questions 表不存在')
} else {
console.log('✅ creative_questions 表存在')
// 檢查表結構
const [columns] = await connection.execute("DESCRIBE creative_questions")
console.log('\n📋 表結構:')
columns.forEach(col => {
console.log(`- ${col.Field}: ${col.Type} ${col.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${col.Key ? `(${col.Key})` : ''} ${col.Default ? `DEFAULT ${col.Default}` : ''}`)
})
}
await connection.end()
} catch (error) {
console.error('❌ 檢查失敗:', error.message)
}
}
checkCreativeTableStructure()

View File

@@ -0,0 +1,71 @@
// 測試創意測試流程
const mysql = require('mysql2/promise')
async function testCreativeFlow() {
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('🧪 測試創意測試流程')
console.log('=' .repeat(50))
try {
const connection = await mysql.createConnection(config)
// 1. 檢查資料庫中的題目
const [questions] = await connection.execute('SELECT * FROM creative_questions ORDER BY id')
console.log(`✅ 資料庫中有 ${questions.length} 道題目`)
// 2. 模擬 API 回應
const apiResponse = {
success: true,
questions: questions
}
console.log('✅ API 回應格式正確')
// 3. 測試分數計算邏輯
const mockAnswers = {
0: 5, // 一般題目,選擇 5
1: 5, // 反向題目,選擇 5
2: 1, // 一般題目,選擇 1
3: 1 // 反向題目,選擇 1
}
let totalScore = 0
questions.slice(0, 4).forEach((question, index) => {
const answer = mockAnswers[index] || 1
const score = question.is_reverse ? 6 - answer : answer
totalScore += score
console.log(`題目 ${index + 1}: ${question.is_reverse ? '反向' : '一般'} - 選擇${answer} → 得分${score}`)
})
const maxScore = 4 * 5
const percentage = Math.round((totalScore / maxScore) * 100)
console.log(`\n📊 測試結果: ${totalScore}/${maxScore} (${percentage}%)`)
// 4. 檢查題目類別分布
const categoryCount = {}
questions.forEach(q => {
categoryCount[q.category] = (categoryCount[q.category] || 0) + 1
})
console.log('\n📋 題目類別分布:')
Object.entries(categoryCount).forEach(([category, count]) => {
console.log(`- ${category}: ${count}`)
})
await connection.end()
console.log('\n✅ 創意測試流程測試完成')
} catch (error) {
console.error('❌ 測試失敗:', error.message)
}
}
testCreativeFlow()

View File

@@ -0,0 +1,63 @@
// 測試反向題分數計算邏輯
function testReverseScoring() {
console.log('🧮 測試反向題分數計算邏輯')
console.log('=' .repeat(50))
// 模擬題目數據
const questions = [
{ id: 1, statement: "一般題目", is_reverse: false },
{ id: 2, statement: "反向題目", is_reverse: true },
{ id: 3, statement: "一般題目", is_reverse: false },
{ id: 4, statement: "反向題目", is_reverse: true }
]
// 模擬用戶答案
const answers = {
0: 5, // 一般題目,選擇 5
1: 5, // 反向題目,選擇 5
2: 1, // 一般題目,選擇 1
3: 1 // 反向題目,選擇 1
}
console.log('\n📋 題目和答案:')
questions.forEach((question, index) => {
const answer = answers[index]
const reverseText = question.is_reverse ? ' (反向題)' : ''
console.log(`${index + 1}. ${question.statement}${reverseText} - 用戶選擇: ${answer}`)
})
console.log('\n🧮 分數計算:')
let totalScore = 0
questions.forEach((question, index) => {
const answer = answers[index] || 1
let score
if (question.is_reverse) {
// 反向題:選擇 5 得 1 分,選擇 1 得 5 分
score = 6 - answer
} else {
// 一般題:選擇多少得多少分
score = answer
}
totalScore += score
console.log(`${index + 1}題: ${question.is_reverse ? '反向' : '一般'} - 選擇${answer} → 得分${score}`)
})
const maxScore = questions.length * 5
const percentage = Math.round((totalScore / maxScore) * 100)
console.log('\n📊 結果:')
console.log(`總分: ${totalScore} / ${maxScore}`)
console.log(`百分比: ${percentage}%`)
console.log('\n✅ 反向題分數計算邏輯測試完成')
console.log('\n📝 說明:')
console.log('- 一般題目:選擇 1-5 得 1-5 分')
console.log('- 反向題目:選擇 1-5 得 5-1 分(分數相反)')
console.log('- 這樣設計是為了確保高分代表高創意能力')
}
testReverseScoring()