70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import { createError, defineEventHandler } from 'h3'
|
|
import { db } from '~/drizzle/db'
|
|
import { users } from '~/drizzle/schema'
|
|
import { count, sql } from 'drizzle-orm'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const status = {
|
|
connected: false,
|
|
tables: {
|
|
user: false,
|
|
song: false,
|
|
vote: false,
|
|
schedule: false,
|
|
notification: false
|
|
},
|
|
userCount: 0
|
|
}
|
|
|
|
// 检查数据库连接
|
|
try {
|
|
await db.execute(sql`SELECT 1`)
|
|
status.connected = true
|
|
} catch (error) {
|
|
console.error('数据库连接失败:', error)
|
|
return { success: false, status, error: '数据库连接失败' }
|
|
}
|
|
|
|
// 检查各个表是否存在
|
|
const tables = ['user', 'song', 'vote', 'schedule', 'notification']
|
|
|
|
for (const tableName of tables) {
|
|
try {
|
|
const result = await db.execute(sql`
|
|
SELECT EXISTS (
|
|
SELECT FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
AND table_name = ${tableName}
|
|
)
|
|
`)
|
|
status.tables[tableName] = result[0]?.exists || false
|
|
} catch (error) {
|
|
console.error(`检查表 ${tableName} 失败:`, error)
|
|
status.tables[tableName] = false
|
|
}
|
|
}
|
|
|
|
// 如果表存在,获取记录数
|
|
if (status.tables.user) {
|
|
try {
|
|
const userCountResult = await db.select({ count: count() }).from(users)
|
|
status.userCount = userCountResult[0]?.count || 0
|
|
} catch (error) {
|
|
console.error('获取用户数量失败:', error)
|
|
}
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
status
|
|
}
|
|
} catch (error) {
|
|
console.error('检查数据库状态失败:', error)
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: '检查数据库状态失败: ' + error.message
|
|
})
|
|
}
|
|
})
|