新增邏輯思維測試與資料庫整合
This commit is contained in:
45
scripts/check-logic-questions.js
Normal file
45
scripts/check-logic-questions.js
Normal file
@@ -0,0 +1,45 @@
|
||||
const mysql = require('mysql2/promise')
|
||||
|
||||
async function checkLogicQuestions() {
|
||||
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 logic_questions ORDER BY id')
|
||||
|
||||
console.log(`\n📋 共找到 ${rows.length} 道邏輯思維題目:`)
|
||||
console.log('=' .repeat(80))
|
||||
|
||||
rows.forEach((question, index) => {
|
||||
console.log(`\n${index + 1}. ID: ${question.id}`)
|
||||
console.log(` 題目: ${question.question}`)
|
||||
console.log(` A. ${question.option_a}`)
|
||||
console.log(` B. ${question.option_b}`)
|
||||
console.log(` C. ${question.option_c}`)
|
||||
console.log(` D. ${question.option_d}`)
|
||||
if (question.option_e) {
|
||||
console.log(` E. ${question.option_e}`)
|
||||
}
|
||||
console.log(` 正確答案: ${question.correct_answer}`)
|
||||
if (question.explanation) {
|
||||
console.log(` 解說: ${question.explanation}`)
|
||||
}
|
||||
})
|
||||
|
||||
await connection.end()
|
||||
console.log('\n✅ 檢查完成')
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
checkLogicQuestions()
|
39
scripts/check-table-structure.js
Normal file
39
scripts/check-table-structure.js
Normal file
@@ -0,0 +1,39 @@
|
||||
const mysql = require('mysql2/promise')
|
||||
|
||||
async function checkTableStructure() {
|
||||
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)
|
||||
|
||||
// 檢查 logic_questions 表是否存在
|
||||
const [tables] = await connection.execute("SHOW TABLES LIKE 'logic_questions'")
|
||||
|
||||
if (tables.length === 0) {
|
||||
console.log('❌ logic_questions 表不存在')
|
||||
} else {
|
||||
console.log('✅ logic_questions 表存在')
|
||||
|
||||
// 檢查表結構
|
||||
const [columns] = await connection.execute("DESCRIBE logic_questions")
|
||||
console.log('\n📋 logic_questions 表結構:')
|
||||
columns.forEach(col => {
|
||||
console.log(` ${col.Field}: ${col.Type} ${col.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${col.Key ? col.Key : ''}`)
|
||||
})
|
||||
}
|
||||
|
||||
await connection.end()
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
checkTableStructure()
|
80
scripts/test-logic-flow.js
Normal file
80
scripts/test-logic-flow.js
Normal file
@@ -0,0 +1,80 @@
|
||||
const fetch = require('node-fetch').default || require('node-fetch')
|
||||
|
||||
async function testLogicFlow() {
|
||||
console.log('🔄 正在測試邏輯思維測試完整流程...')
|
||||
|
||||
try {
|
||||
// 1. 測試獲取題目 API
|
||||
console.log('\n1. 測試獲取題目 API...')
|
||||
const questionsResponse = await fetch('http://localhost:3000/api/logic-questions')
|
||||
const questionsData = await questionsResponse.json()
|
||||
|
||||
if (questionsData.success) {
|
||||
console.log(`✅ 成功獲取 ${questionsData.questions.length} 道題目`)
|
||||
|
||||
// 檢查第一道題目是否包含 E 選項
|
||||
const firstQuestion = questionsData.questions[0]
|
||||
if (firstQuestion.option_e) {
|
||||
console.log('✅ 題目包含 E 選項')
|
||||
console.log(` 範例:${firstQuestion.question.substring(0, 30)}...`)
|
||||
console.log(` E 選項:${firstQuestion.option_e}`)
|
||||
} else {
|
||||
console.log('❌ 題目缺少 E 選項')
|
||||
}
|
||||
} else {
|
||||
console.log('❌ 獲取題目失敗:', questionsData.error)
|
||||
}
|
||||
|
||||
// 2. 模擬測試結果
|
||||
console.log('\n2. 模擬測試結果...')
|
||||
const mockResults = {
|
||||
type: "logic",
|
||||
score: 60,
|
||||
correctAnswers: 6,
|
||||
totalQuestions: 10,
|
||||
answers: {
|
||||
0: "C",
|
||||
1: "C",
|
||||
2: "B",
|
||||
3: "B",
|
||||
4: "E",
|
||||
5: "B",
|
||||
6: "E",
|
||||
7: "A",
|
||||
8: "C",
|
||||
9: "D"
|
||||
},
|
||||
completedAt: new Date().toISOString()
|
||||
}
|
||||
|
||||
console.log('✅ 模擬測試結果已準備')
|
||||
console.log(` 答對題數:${mockResults.correctAnswers}/${mockResults.totalQuestions}`)
|
||||
console.log(` 正確率:${mockResults.score}%`)
|
||||
|
||||
// 3. 檢查結果頁面需要的數據結構
|
||||
console.log('\n3. 檢查數據結構...')
|
||||
const hasAllRequiredFields = questionsData.questions.every(q =>
|
||||
q.question &&
|
||||
q.option_a &&
|
||||
q.option_b &&
|
||||
q.option_c &&
|
||||
q.option_d &&
|
||||
q.option_e &&
|
||||
q.correct_answer &&
|
||||
q.explanation
|
||||
)
|
||||
|
||||
if (hasAllRequiredFields) {
|
||||
console.log('✅ 所有題目都包含完整字段')
|
||||
} else {
|
||||
console.log('❌ 部分題目缺少必要字段')
|
||||
}
|
||||
|
||||
console.log('\n✅ 邏輯思維測試流程驗證完成')
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 測試失敗:', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
testLogicFlow()
|
38
scripts/update-logic-table.js
Normal file
38
scripts/update-logic-table.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const mysql = require('mysql2/promise')
|
||||
|
||||
async function updateLogicTable() {
|
||||
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('🔄 正在更新 logic_questions 表結構...')
|
||||
|
||||
try {
|
||||
const connection = await mysql.createConnection(config)
|
||||
|
||||
// 檢查是否已有 option_e 欄位
|
||||
const [columns] = await connection.execute("SHOW COLUMNS FROM logic_questions LIKE 'option_e'")
|
||||
|
||||
if (columns.length === 0) {
|
||||
console.log('📝 加入 option_e 欄位...')
|
||||
await connection.execute("ALTER TABLE logic_questions ADD COLUMN option_e VARCHAR(500) NOT NULL DEFAULT '' AFTER option_d")
|
||||
|
||||
console.log('📝 更新 correct_answer 欄位以支援 E 選項...')
|
||||
await connection.execute("ALTER TABLE logic_questions MODIFY COLUMN correct_answer ENUM('A', 'B', 'C', 'D', 'E') NOT NULL")
|
||||
|
||||
console.log('✅ 表結構更新完成')
|
||||
} else {
|
||||
console.log('✅ option_e 欄位已存在')
|
||||
}
|
||||
|
||||
await connection.end()
|
||||
} catch (error) {
|
||||
console.error('❌ 更新失敗:', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
updateLogicTable()
|
Reference in New Issue
Block a user