實作綜合題型結果與資料庫整合
This commit is contained in:
67
scripts/check-all-combined-times.js
Normal file
67
scripts/check-all-combined-times.js
Normal file
@@ -0,0 +1,67 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const checkAllCombinedTimes = async () => {
|
||||
console.log('🔍 檢查所有綜合測試結果時間')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 檢查綜合測試結果 API
|
||||
console.log('\n📊 檢查所有綜合測試結果...')
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
const req = http.get(`http://localhost:3000/api/test-results/combined?userId=${userId}`, (res) => {
|
||||
let data = ''
|
||||
res.on('data', chunk => data += chunk)
|
||||
res.on('end', () => resolve({ status: res.statusCode, data }))
|
||||
})
|
||||
req.on('error', reject)
|
||||
})
|
||||
|
||||
if (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success) {
|
||||
console.log(`找到 ${data.data.length} 筆綜合測試結果:`)
|
||||
|
||||
data.data.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. 綜合測試結果:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` 原始時間: ${result.completed_at}`)
|
||||
|
||||
const date = new Date(result.completed_at)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(` 台灣時間 (詳細): ${date.toLocaleString("zh-TW", {
|
||||
timeZone: "Asia/Taipei",
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: true
|
||||
})}`)
|
||||
|
||||
// 檢查是否是今天
|
||||
const now = new Date()
|
||||
const testDate = new Date(result.completed_at)
|
||||
const isToday = now.toDateString() === testDate.toDateString()
|
||||
console.log(` 是否為今天: ${isToday}`)
|
||||
|
||||
// 計算時間差
|
||||
const timeDiff = now.getTime() - testDate.getTime()
|
||||
const hoursDiff = Math.floor(timeDiff / (1000 * 60 * 60))
|
||||
const minutesDiff = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60))
|
||||
console.log(` 距離現在: ${hoursDiff} 小時 ${minutesDiff} 分鐘`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 所有綜合測試結果時間檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkAllCombinedTimes()
|
73
scripts/check-all-test-times.js
Normal file
73
scripts/check-all-test-times.js
Normal file
@@ -0,0 +1,73 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const checkAllTestTimes = async () => {
|
||||
console.log('🔍 檢查所有測試結果的時間顯示')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 檢查用戶測試結果 API
|
||||
console.log('\n📊 檢查用戶測試結果 API...')
|
||||
const response = 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 (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success && data.data.results.length > 0) {
|
||||
console.log(`找到 ${data.data.results.length} 筆測試結果:`)
|
||||
|
||||
data.data.results.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.type} 測試:`)
|
||||
console.log(` 原始時間: ${result.completedAt}`)
|
||||
|
||||
const date = new Date(result.completedAt)
|
||||
console.log(` UTC 時間: ${date.toISOString()}`)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(` 台灣時間 (詳細): ${date.toLocaleString("zh-TW", {
|
||||
timeZone: "Asia/Taipei",
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: true
|
||||
})}`)
|
||||
|
||||
// 檢查是否是今天
|
||||
const now = new Date()
|
||||
const testDate = new Date(result.completedAt)
|
||||
const isToday = now.toDateString() === testDate.toDateString()
|
||||
console.log(` 是否為今天: ${isToday}`)
|
||||
|
||||
// 計算時間差
|
||||
const timeDiff = now.getTime() - testDate.getTime()
|
||||
const hoursDiff = Math.floor(timeDiff / (1000 * 60 * 60))
|
||||
const minutesDiff = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60))
|
||||
console.log(` 距離現在: ${hoursDiff} 小時 ${minutesDiff} 分鐘`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 檢查當前時間
|
||||
console.log('\n📊 當前時間:')
|
||||
const now = new Date()
|
||||
console.log(`UTC 時間: ${now.toISOString()}`)
|
||||
console.log(`台灣時間: ${now.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 所有測試結果時間檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkAllTestTimes()
|
42
scripts/check-combined-test-results-table.js
Normal file
42
scripts/check-combined-test-results-table.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const { executeQuery } = require('../lib/database/connection')
|
||||
|
||||
async function checkCombinedTestResultsTable() {
|
||||
console.log('🔍 檢查 combined_test_results 表結構...')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
try {
|
||||
// 檢查表結構
|
||||
console.log('\n📊 combined_test_results 表結構:')
|
||||
const columns = await executeQuery('DESCRIBE combined_test_results')
|
||||
columns.forEach(column => {
|
||||
console.log(`- ${column.Field}: ${column.Type} ${column.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${column.Key ? `(${column.Key})` : ''}`)
|
||||
})
|
||||
|
||||
// 檢查表數據
|
||||
console.log('\n📋 combined_test_results 表數據:')
|
||||
const rows = await executeQuery('SELECT * FROM combined_test_results LIMIT 5')
|
||||
if (rows.length > 0) {
|
||||
console.log(`找到 ${rows.length} 筆記錄:`)
|
||||
rows.forEach((row, index) => {
|
||||
console.log(`\n記錄 ${index + 1}:`)
|
||||
Object.entries(row).forEach(([key, value]) => {
|
||||
console.log(` ${key}: ${value}`)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
console.log('表中沒有數據')
|
||||
}
|
||||
|
||||
// 檢查表索引
|
||||
console.log('\n🔍 表索引:')
|
||||
const indexes = await executeQuery('SHOW INDEX FROM combined_test_results')
|
||||
indexes.forEach(index => {
|
||||
console.log(`- ${index.Key_name}: ${index.Column_name} (${index.Index_type})`)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
checkCombinedTestResultsTable()
|
42
scripts/check-combined-test-results-table.ts
Normal file
42
scripts/check-combined-test-results-table.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { executeQuery } from '../lib/database/connection'
|
||||
|
||||
async function checkCombinedTestResultsTable() {
|
||||
console.log('🔍 檢查 combined_test_results 表結構...')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
try {
|
||||
// 檢查表結構
|
||||
console.log('\n📊 combined_test_results 表結構:')
|
||||
const columns = await executeQuery('DESCRIBE combined_test_results')
|
||||
columns.forEach((column: any) => {
|
||||
console.log(`- ${column.Field}: ${column.Type} ${column.Null === 'NO' ? 'NOT NULL' : 'NULL'} ${column.Key ? `(${column.Key})` : ''}`)
|
||||
})
|
||||
|
||||
// 檢查表數據
|
||||
console.log('\n📋 combined_test_results 表數據:')
|
||||
const rows = await executeQuery('SELECT * FROM combined_test_results LIMIT 5')
|
||||
if (rows.length > 0) {
|
||||
console.log(`找到 ${rows.length} 筆記錄:`)
|
||||
rows.forEach((row: any, index: number) => {
|
||||
console.log(`\n記錄 ${index + 1}:`)
|
||||
Object.entries(row).forEach(([key, value]) => {
|
||||
console.log(` ${key}: ${value}`)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
console.log('表中沒有數據')
|
||||
}
|
||||
|
||||
// 檢查表索引
|
||||
console.log('\n🔍 表索引:')
|
||||
const indexes = await executeQuery('SHOW INDEX FROM combined_test_results')
|
||||
indexes.forEach((index: any) => {
|
||||
console.log(`- ${index.Key_name}: ${index.Column_name} (${index.Index_type})`)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error instanceof Error ? error.message : '未知錯誤')
|
||||
}
|
||||
}
|
||||
|
||||
checkCombinedTestResultsTable()
|
64
scripts/check-combined-time.js
Normal file
64
scripts/check-combined-time.js
Normal file
@@ -0,0 +1,64 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const checkCombinedTime = async () => {
|
||||
console.log('🔍 檢查綜合測試結果時間')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 檢查綜合測試結果 API
|
||||
console.log('\n📊 檢查綜合測試結果 API...')
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
const req = http.get(`http://localhost:3000/api/test-results/combined?userId=${userId}`, (res) => {
|
||||
let data = ''
|
||||
res.on('data', chunk => data += chunk)
|
||||
res.on('end', () => resolve({ status: res.statusCode, data }))
|
||||
})
|
||||
req.on('error', reject)
|
||||
})
|
||||
|
||||
if (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success && data.data.length > 0) {
|
||||
const result = data.data[0]
|
||||
console.log('📋 綜合測試結果時間詳情:')
|
||||
console.log(`原始時間: ${result.completed_at}`)
|
||||
|
||||
const date = new Date(result.completed_at)
|
||||
console.log(`UTC 時間: ${date.toISOString()}`)
|
||||
console.log(`台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(`台灣時間 (詳細): ${date.toLocaleString("zh-TW", {
|
||||
timeZone: "Asia/Taipei",
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: true
|
||||
})}`)
|
||||
|
||||
// 檢查是否是今天
|
||||
const now = new Date()
|
||||
const testDate = new Date(result.completed_at)
|
||||
const isToday = now.toDateString() === testDate.toDateString()
|
||||
console.log(`是否為今天: ${isToday}`)
|
||||
|
||||
// 計算時間差
|
||||
const timeDiff = now.getTime() - testDate.getTime()
|
||||
const hoursDiff = Math.floor(timeDiff / (1000 * 60 * 60))
|
||||
const minutesDiff = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60))
|
||||
console.log(`距離現在: ${hoursDiff} 小時 ${minutesDiff} 分鐘`)
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 綜合測試結果時間檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkCombinedTime()
|
78
scripts/check-db-time-format.js
Normal file
78
scripts/check-db-time-format.js
Normal file
@@ -0,0 +1,78 @@
|
||||
const mysql = require('mysql2/promise')
|
||||
|
||||
const checkDbTimeFormat = async () => {
|
||||
console.log('🔍 檢查資料庫中的時間格式')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const connection = await mysql.createConnection({
|
||||
host: process.env.DB_HOST || 'localhost',
|
||||
port: process.env.DB_PORT || 3306,
|
||||
user: process.env.DB_USER || 'root',
|
||||
password: process.env.DB_PASSWORD || '',
|
||||
database: process.env.DB_NAME || 'hr_assessment'
|
||||
})
|
||||
|
||||
try {
|
||||
// 檢查 test_results 表的時間格式
|
||||
console.log('\n📊 檢查 test_results 表的時間格式...')
|
||||
const [testResults] = await connection.execute(`
|
||||
SELECT id, test_type, completed_at, created_at
|
||||
FROM test_results
|
||||
WHERE user_id = 'user-1759073326705-m06y3wacd'
|
||||
ORDER BY completed_at DESC
|
||||
`)
|
||||
|
||||
testResults.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.test_type} 測試:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` completed_at (原始): ${result.completed_at}`)
|
||||
console.log(` completed_at (類型): ${typeof result.completed_at}`)
|
||||
console.log(` created_at (原始): ${result.created_at}`)
|
||||
console.log(` created_at (類型): ${typeof result.created_at}`)
|
||||
|
||||
// 測試時間轉換
|
||||
const completedDate = new Date(result.completed_at)
|
||||
const createdDate = new Date(result.created_at)
|
||||
|
||||
console.log(` completed_at 轉換: ${completedDate.toISOString()}`)
|
||||
console.log(` completed_at 台灣時間: ${completedDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(` created_at 轉換: ${createdDate.toISOString()}`)
|
||||
console.log(` created_at 台灣時間: ${createdDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
|
||||
// 檢查 combined_test_results 表的時間格式
|
||||
console.log('\n📊 檢查 combined_test_results 表的時間格式...')
|
||||
const [combinedResults] = await connection.execute(`
|
||||
SELECT id, completed_at, created_at
|
||||
FROM combined_test_results
|
||||
WHERE user_id = 'user-1759073326705-m06y3wacd'
|
||||
ORDER BY completed_at DESC
|
||||
`)
|
||||
|
||||
combinedResults.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. 綜合測試:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` completed_at (原始): ${result.completed_at}`)
|
||||
console.log(` completed_at (類型): ${typeof result.completed_at}`)
|
||||
console.log(` created_at (原始): ${result.created_at}`)
|
||||
console.log(` created_at (類型): ${typeof result.created_at}`)
|
||||
|
||||
// 測試時間轉換
|
||||
const completedDate = new Date(result.completed_at)
|
||||
const createdDate = new Date(result.created_at)
|
||||
|
||||
console.log(` completed_at 轉換: ${completedDate.toISOString()}`)
|
||||
console.log(` completed_at 台灣時間: ${completedDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(` created_at 轉換: ${createdDate.toISOString()}`)
|
||||
console.log(` created_at 台灣時間: ${createdDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
await connection.end()
|
||||
console.log('\n✅ 資料庫時間格式檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkDbTimeFormat()
|
72
scripts/check-raw-test-data.js
Normal file
72
scripts/check-raw-test-data.js
Normal file
@@ -0,0 +1,72 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const checkRawTestData = async () => {
|
||||
console.log('🔍 檢查原始測試數據')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 檢查邏輯測試結果
|
||||
console.log('\n📊 檢查邏輯測試結果...')
|
||||
const logicResponse = await new Promise((resolve, reject) => {
|
||||
const req = http.get(`http://localhost:3000/api/test-results/logic?userId=${userId}`, (res) => {
|
||||
let data = ''
|
||||
res.on('data', chunk => data += chunk)
|
||||
res.on('end', () => resolve({ status: res.statusCode, data }))
|
||||
})
|
||||
req.on('error', reject)
|
||||
})
|
||||
|
||||
if (logicResponse.status === 200) {
|
||||
const logicData = JSON.parse(logicResponse.data)
|
||||
if (logicData.success && logicData.data.length > 0) {
|
||||
console.log('邏輯測試結果:')
|
||||
logicData.data.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. 邏輯測試:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` 原始時間: ${result.completed_at}`)
|
||||
console.log(` 創建時間: ${result.created_at}`)
|
||||
|
||||
const date = new Date(result.completed_at)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 檢查創意測試結果
|
||||
console.log('\n📊 檢查創意測試結果...')
|
||||
const creativeResponse = 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 (creativeResponse.status === 200) {
|
||||
const creativeData = JSON.parse(creativeResponse.data)
|
||||
if (creativeData.success && creativeData.data.length > 0) {
|
||||
console.log('創意測試結果:')
|
||||
creativeData.data.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. 創意測試:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` 原始時間: ${result.completed_at}`)
|
||||
console.log(` 創建時間: ${result.created_at}`)
|
||||
|
||||
const date = new Date(result.completed_at)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 原始測試數據檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkRawTestData()
|
68
scripts/check-timezone-issue.js
Normal file
68
scripts/check-timezone-issue.js
Normal file
@@ -0,0 +1,68 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const checkTimezoneIssue = async () => {
|
||||
console.log('🔍 檢查時區問題')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 1. 檢查用戶測試結果 API 返回的時間
|
||||
console.log('\n📊 1. 檢查用戶測試結果 API 返回的時間...')
|
||||
const response = 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 (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success && data.data.results.length > 0) {
|
||||
console.log('📋 測試結果時間:')
|
||||
data.data.results.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.type}:`)
|
||||
console.log(` 原始時間: ${result.completedAt}`)
|
||||
|
||||
// 測試不同的時間格式化方式
|
||||
const date = new Date(result.completedAt)
|
||||
console.log(` UTC 時間: ${date.toISOString()}`)
|
||||
console.log(` 本地時間: ${date.toLocaleString()}`)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
console.log(` 台灣時間 (en): ${date.toLocaleString("en-US", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 檢查當前時間
|
||||
console.log('\n📊 2. 檢查當前時間...')
|
||||
const now = new Date()
|
||||
console.log(`當前 UTC 時間: ${now.toISOString()}`)
|
||||
console.log(`當前本地時間: ${now.toLocaleString()}`)
|
||||
console.log(`當前台灣時間: ${now.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
|
||||
// 3. 測試時間轉換
|
||||
console.log('\n📊 3. 測試時間轉換...')
|
||||
const testTimes = [
|
||||
'2025-09-29T01:07:00.000Z', // 從 API 返回的時間
|
||||
'2025-09-29T09:08:17.000Z', // 可能的另一個時間
|
||||
]
|
||||
|
||||
testTimes.forEach((timeStr, index) => {
|
||||
console.log(`\n測試時間 ${index + 1}: ${timeStr}`)
|
||||
const testDate = new Date(timeStr)
|
||||
console.log(` UTC: ${testDate.toISOString()}`)
|
||||
console.log(` 台灣時間: ${testDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 時區問題檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
checkTimezoneIssue()
|
61
scripts/fix-existing-times.js
Normal file
61
scripts/fix-existing-times.js
Normal file
@@ -0,0 +1,61 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const fixExistingTimes = async () => {
|
||||
console.log('🔍 修正現有測試結果的時間')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 檢查現有的測試結果
|
||||
console.log('\n📊 檢查現有測試結果...')
|
||||
const response = 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 (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success && data.data.results.length > 0) {
|
||||
console.log('發現需要修正的測試結果:')
|
||||
|
||||
data.data.results.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.type} 測試:`)
|
||||
console.log(` 原始時間: ${result.completedAt}`)
|
||||
|
||||
const date = new Date(result.completedAt)
|
||||
const taiwanTime = date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })
|
||||
console.log(` 台灣時間: ${taiwanTime}`)
|
||||
|
||||
// 檢查時間是否合理
|
||||
const now = new Date()
|
||||
const timeDiff = now.getTime() - date.getTime()
|
||||
const hoursDiff = Math.floor(timeDiff / (1000 * 60 * 60))
|
||||
|
||||
if (hoursDiff > 24) {
|
||||
console.log(` ⚠️ 時間可能不正確 (${hoursDiff} 小時前)`)
|
||||
} else {
|
||||
console.log(` ✅ 時間看起來正確 (${hoursDiff} 小時前)`)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n📝 建議:')
|
||||
console.log('1. 時間格式已修正,新的測試結果會使用正確的 UTC 時間')
|
||||
console.log('2. 現有的錯誤時間數據可能需要手動修正或重新測試')
|
||||
console.log('3. 建議重新進行一次測試來驗證修正效果')
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 檢查失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 現有時間檢查完成')
|
||||
}
|
||||
}
|
||||
|
||||
fixExistingTimes()
|
114
scripts/test-combined-db-integration.js
Normal file
114
scripts/test-combined-db-integration.js
Normal file
@@ -0,0 +1,114 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const testCombinedDBIntegration = async () => {
|
||||
console.log('🧪 測試綜合測試結果資料庫整合功能')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 1. 測試綜合測試結果上傳 API
|
||||
console.log('\n📊 1. 測試綜合測試結果上傳 API...')
|
||||
|
||||
const testData = {
|
||||
userId: userId,
|
||||
logicScore: 10,
|
||||
creativityScore: 78,
|
||||
overallScore: 48,
|
||||
level: '待提升',
|
||||
description: '綜合能力有待提升,建議系統性訓練邏輯思維和創意能力',
|
||||
logicBreakdown: {
|
||||
correct: 1,
|
||||
total: 10,
|
||||
answers: { 0: 'A', 1: 'B', 2: 'C' }
|
||||
},
|
||||
creativityBreakdown: {
|
||||
total: 70,
|
||||
maxScore: 90,
|
||||
answers: { 0: 5, 1: 4, 2: 3 }
|
||||
},
|
||||
balanceScore: 66,
|
||||
completedAt: new Date().toISOString().replace('Z', '').replace('T', ' ')
|
||||
}
|
||||
|
||||
console.log('測試數據:', JSON.stringify(testData, null, 2))
|
||||
|
||||
const uploadResponse = await new Promise((resolve, reject) => {
|
||||
const req = http.request({
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/api/test-results/combined',
|
||||
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('📊 上傳響應狀態:', uploadResponse.status)
|
||||
|
||||
if (uploadResponse.status === 200) {
|
||||
const uploadResult = JSON.parse(uploadResponse.data)
|
||||
console.log('✅ 上傳成功!')
|
||||
console.log('📡 響應內容:', JSON.stringify(uploadResult, null, 2))
|
||||
|
||||
if (uploadResult.success) {
|
||||
console.log('測試結果ID:', uploadResult.data.testResult.id)
|
||||
}
|
||||
} else {
|
||||
console.log('❌ 上傳失敗,狀態碼:', uploadResponse.status)
|
||||
console.log('響應內容:', uploadResponse.data)
|
||||
}
|
||||
|
||||
// 2. 測試綜合測試結果獲取 API
|
||||
console.log('\n📊 2. 測試綜合測試結果獲取 API...')
|
||||
|
||||
const getResponse = await new Promise((resolve, reject) => {
|
||||
const req = http.get(`http://localhost:3000/api/test-results/combined?userId=${userId}`, (res) => {
|
||||
let data = ''
|
||||
res.on('data', chunk => data += chunk)
|
||||
res.on('end', () => resolve({ status: res.statusCode, data }))
|
||||
})
|
||||
req.on('error', reject)
|
||||
})
|
||||
|
||||
console.log('📊 獲取響應狀態:', getResponse.status)
|
||||
|
||||
if (getResponse.status === 200) {
|
||||
const getResult = JSON.parse(getResponse.data)
|
||||
console.log('✅ 獲取成功!')
|
||||
console.log('📡 響應內容:', JSON.stringify(getResult, null, 2))
|
||||
|
||||
if (getResult.success && getResult.data.length > 0) {
|
||||
console.log(`找到 ${getResult.data.length} 筆綜合測試結果`)
|
||||
getResult.data.forEach((result, index) => {
|
||||
console.log(`\n結果 ${index + 1}:`)
|
||||
console.log(` ID: ${result.id}`)
|
||||
console.log(` 邏輯分數: ${result.logic_score}`)
|
||||
console.log(` 創意分數: ${result.creativity_score}`)
|
||||
console.log(` 總分: ${result.overall_score}`)
|
||||
console.log(` 等級: ${result.level}`)
|
||||
console.log(` 完成時間: ${result.completed_at}`)
|
||||
})
|
||||
}
|
||||
} else {
|
||||
console.log('❌ 獲取失敗,狀態碼:', getResponse.status)
|
||||
console.log('響應內容:', getResponse.data)
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 測試失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 綜合測試結果資料庫整合功能測試完成')
|
||||
}
|
||||
}
|
||||
|
||||
testCombinedDBIntegration()
|
49
scripts/test-new-time-format.js
Normal file
49
scripts/test-new-time-format.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const testNewTimeFormat = async () => {
|
||||
console.log('🔍 測試新的時間格式')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
try {
|
||||
// 測試當前時間格式
|
||||
console.log('\n📊 測試當前時間格式:')
|
||||
const now = new Date()
|
||||
const utcTime = now.toISOString()
|
||||
const taiwanTime = now.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })
|
||||
|
||||
console.log(`當前 UTC 時間: ${utcTime}`)
|
||||
console.log(`當前台灣時間: ${taiwanTime}`)
|
||||
|
||||
// 測試時間轉換
|
||||
console.log('\n📊 測試時間轉換:')
|
||||
const testDate = new Date(utcTime)
|
||||
const convertedTaiwanTime = testDate.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })
|
||||
console.log(`轉換後的台灣時間: ${convertedTaiwanTime}`)
|
||||
|
||||
// 驗證轉換是否正確
|
||||
const isCorrect = taiwanTime === convertedTaiwanTime
|
||||
console.log(`轉換是否正確: ${isCorrect ? '✅' : '❌'}`)
|
||||
|
||||
// 測試不同的時間格式
|
||||
console.log('\n📊 測試不同時間格式:')
|
||||
const formats = [
|
||||
{ name: 'UTC 格式 (修正後)', time: now.toISOString() },
|
||||
{ name: '舊格式 (有問題)', time: now.toISOString().replace('Z', '').replace('T', ' ') }
|
||||
]
|
||||
|
||||
formats.forEach(format => {
|
||||
console.log(`\n${format.name}: ${format.time}`)
|
||||
const date = new Date(format.time)
|
||||
const taiwan = date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })
|
||||
console.log(` 轉換為台灣時間: ${taiwan}`)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 測試失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 新時間格式測試完成')
|
||||
}
|
||||
}
|
||||
|
||||
testNewTimeFormat()
|
63
scripts/test-time-fix.js
Normal file
63
scripts/test-time-fix.js
Normal file
@@ -0,0 +1,63 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const testTimeFix = async () => {
|
||||
console.log('🔍 測試時間修正效果')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 測試當前時間
|
||||
console.log('\n📊 當前時間測試:')
|
||||
const now = new Date()
|
||||
console.log(`本地時間: ${now.toLocaleString()}`)
|
||||
console.log(`UTC 時間: ${now.toISOString()}`)
|
||||
console.log(`台灣時間: ${now.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
|
||||
// 測試時間轉換
|
||||
console.log('\n📊 時間轉換測試:')
|
||||
const testTimes = [
|
||||
'2025-09-29T09:16:50.637Z', // 修正後的格式
|
||||
'2025-09-29 09:16:50.637', // 舊的格式
|
||||
]
|
||||
|
||||
testTimes.forEach((timeStr, index) => {
|
||||
console.log(`\n測試 ${index + 1}: ${timeStr}`)
|
||||
const date = new Date(timeStr)
|
||||
console.log(` 轉換為 Date 物件: ${date.toISOString()}`)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
|
||||
// 檢查現有的測試結果
|
||||
console.log('\n📊 檢查現有測試結果:')
|
||||
const response = 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 (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
if (data.success && data.data.results.length > 0) {
|
||||
data.data.results.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.type} 測試:`)
|
||||
console.log(` 原始時間: ${result.completedAt}`)
|
||||
|
||||
const date = new Date(result.completedAt)
|
||||
console.log(` 台灣時間: ${date.toLocaleString("zh-TW", { timeZone: "Asia/Taipei" })}`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 測試失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 時間修正測試完成')
|
||||
}
|
||||
}
|
||||
|
||||
testTimeFix()
|
56
scripts/test-user-results-with-combined.js
Normal file
56
scripts/test-user-results-with-combined.js
Normal file
@@ -0,0 +1,56 @@
|
||||
const https = require('https')
|
||||
const http = require('http')
|
||||
|
||||
const testUserResultsWithCombined = async () => {
|
||||
console.log('🧪 測試包含綜合測試結果的用戶測試結果 API')
|
||||
console.log('=' .repeat(50))
|
||||
|
||||
const userId = 'user-1759073326705-m06y3wacd'
|
||||
|
||||
try {
|
||||
// 測試用戶測試結果 API
|
||||
console.log('\n📊 測試用戶測試結果 API...')
|
||||
const response = 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 (response.status === 200) {
|
||||
const data = JSON.parse(response.data)
|
||||
console.log('✅ API 測試成功!')
|
||||
console.log('📡 響應內容:', JSON.stringify(data, null, 2))
|
||||
|
||||
if (data.success) {
|
||||
console.log('\n📈 測試結果詳情:')
|
||||
console.log(`- 總測試數: ${data.data.stats.totalTests}`)
|
||||
console.log(`- 平均分數: ${data.data.stats.averageScore}`)
|
||||
console.log(`- 最高分數: ${data.data.stats.bestScore}`)
|
||||
console.log(`- 最近測試: ${data.data.stats.lastTestDate}`)
|
||||
console.log(`- 測試次數:`, data.data.stats.testCounts)
|
||||
|
||||
console.log('\n📋 測試結果列表:')
|
||||
data.data.results.forEach((result, index) => {
|
||||
console.log(`\n${index + 1}. ${result.type}:`)
|
||||
console.log(` 分數: ${result.score}`)
|
||||
console.log(` 完成時間: ${result.completedAt}`)
|
||||
console.log(` 測試次數: ${result.testCount}`)
|
||||
console.log(` 詳細資訊:`, result.details)
|
||||
})
|
||||
}
|
||||
} else {
|
||||
console.log('❌ API 響應失敗,狀態碼:', response.status)
|
||||
console.log('響應內容:', response.data)
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 測試失敗:', error.message)
|
||||
} finally {
|
||||
console.log('\n✅ 包含綜合測試結果的用戶測試結果 API 測試完成')
|
||||
}
|
||||
}
|
||||
|
||||
testUserResultsWithCombined()
|
Reference in New Issue
Block a user