From c9fdaabf09a4c9466706ed6721e3757db20b669e Mon Sep 17 00:00:00 2001 From: zyh Date: Thu, 10 Apr 2025 08:09:42 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=B7=AF=E7=94=B1=EF=BC=8C=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=8F=90=E5=8D=87=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E6=B8=85=E6=99=B0=E6=80=A7=E5=92=8C=E5=8F=AF=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app.tsx | 39 +++++++---------------------------- server/routes_migrations.ts | 41 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 server/routes_migrations.ts diff --git a/server/app.tsx b/server/app.tsx index fb9a398..f8e7645 100644 --- a/server/app.tsx +++ b/server/app.tsx @@ -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) => { - 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) => { 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) diff --git a/server/routes_migrations.ts b/server/routes_migrations.ts new file mode 100644 index 0000000..4926c4f --- /dev/null +++ b/server/routes_migrations.ts @@ -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 +} \ No newline at end of file