新增数据库迁移路由,重构数据库初始化逻辑,移除冗余代码,提升代码结构清晰性和可维护性。

This commit is contained in:
zyh
2025-04-10 08:09:42 +00:00
parent 4a63d22955
commit c9fdaabf09
2 changed files with 48 additions and 32 deletions

View File

@@ -30,12 +30,11 @@ import {
createChartRoutes,
} from "./routes_charts.ts";
import { migrations } from './migrations.ts';
// 导入基础路由
import { createAuthRoutes } from "./routes_auth.ts";
import { createUserRoutes } from "./routes_users.ts";
import { createMessagesRoutes } from "./routes_messages.ts";
import { createMigrationsRoutes } from "./routes_migrations.ts";
dayjs.extend(utc)
// 初始化debug实例
const log = {
@@ -198,32 +197,6 @@ const initSystemSettings = async (apiClient: APIClient) => {
}
}
// 初始化数据库
const initDatabase = async (apiClient: APIClient) => {
try {
log.app('正在执行数据库迁移...')
const migrationsResult = await apiClient.database.executeLiveMigrations(migrations)
// log.app('数据库迁移完成 %O',migrationsResult)
log.app('数据库迁移完成')
} catch (error) {
log.app('数据库迁移失败:', error)
}
}
// 中间件:数据库初始化
const withDatabase = async (c: HonoContext<{ Variables: Variables }>, next: () => Promise<void>) => {
try {
const apiClient = c.get('apiClient')
await initDatabase(apiClient)
await next()
} catch (error) {
log.api('数据库操作失败:', error)
return c.json({ error: '数据库操作失败' }, 500)
}
}
// 中间件:验证认证
const withAuth = async (c: HonoContext<{ Variables: Variables }>, next: () => Promise<void>) => {
try {
@@ -264,6 +237,10 @@ export default function({ apiClient, app, moduleDir }: ModuleParams) {
// 创建API路由
const api = new Hono<{ Variables: Variables }>()
// // 使用数据库中间件
// api.use('/*', withDatabase)
// 设置环境变量
api.use('*', async (c, next) => {
c.set('apiClient', apiClient)
@@ -273,9 +250,6 @@ export default function({ apiClient, app, moduleDir }: ModuleParams) {
await next()
})
// 使用数据库中间件
api.use('/', withDatabase)
// 查询仪表盘数据
api.get('/dashboard', withAuth, async (c) => {
try {
@@ -330,7 +304,8 @@ export default function({ apiClient, app, moduleDir }: ModuleParams) {
api.route('/map', createMapRoutes(withAuth)) // 添加地图数据路由
api.route('/settings', createSystemSettingsRoutes(withAuth)) // 添加系统设置路由
api.route('/messages', createMessagesRoutes(withAuth)) // 添加消息路由
api.route('/migrations', createMigrationsRoutes(withAuth)) // 添加数据库迁移路由
// 注册API路由
honoApp.route('/api', api)

View File

@@ -0,0 +1,41 @@
import { Hono } from 'hono'
import { APIClient } from '@d8d-appcontainer/api'
import type { Variables } from './app.tsx'
import type { WithAuth } from './app.tsx'
import { migrations } from './migrations.ts'
import debug from "debug";
const log = {
api: debug("api:migrations"),
};
// 初始化数据库
const initDatabase = async (apiClient: APIClient) => {
try {
log.api('正在执行数据库迁移...')
const migrationsResult = await apiClient.database.executeLiveMigrations(migrations)
// log.app('数据库迁移完成 %O',migrationsResult)
log.api('数据库迁移完成')
return migrationsResult
} catch (error) {
log.api('数据库迁移失败:', error)
}
}
export function createMigrationsRoutes(withAuth: WithAuth) {
const migrationsRoutes = new Hono<{ Variables: Variables }>()
migrationsRoutes.get('/', async (c) => {
const apiClient = c.get('apiClient')
const migrationsResult = await initDatabase(apiClient)
const failedResult = migrationsResult?.find((migration) => migration.status === 'failed')
if (failedResult) {
log.api('数据库迁移失败 %O', failedResult)
return c.json({ error: '数据库迁移失败' }, 500)
}
return c.json({ success: true })
})
return migrationsRoutes
}