創意題與資料庫整合
This commit is contained in:
52
scripts/check-creative-questions.js
Normal file
52
scripts/check-creative-questions.js
Normal 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()
|
40
scripts/check-creative-table-structure.js
Normal file
40
scripts/check-creative-table-structure.js
Normal 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()
|
71
scripts/test-creative-flow.js
Normal file
71
scripts/test-creative-flow.js
Normal 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()
|
63
scripts/test-reverse-scoring.js
Normal file
63
scripts/test-reverse-scoring.js
Normal 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()
|
Reference in New Issue
Block a user