import { Hono } from 'hono'; import type { AuthUser } from '../../auth/types.js'; import { canAccessEnergy } from '../../auth/types.js'; import pool from '../../db.js'; import hydrogenPool from '../../hydrogen-db.js'; import { cached } from './cache.js'; import { registerElectricMonthlyRoute, registerElectricOverviewRoute, } from './electric.js'; import { registerHydrogenDailyRoute } from './hydrogen-daily.js'; import { registerHydrogenOverviewRoute } from './hydrogen-overview.js'; const app = new Hono(); // 模块级访问守卫:dev 旁路 auth 时 user 为 undefined,直接放行; // 生产环境必须具备 BI-LEADER-ENERGY 或全量权限角色 app.use('*', async (c, next) => { const user = (c as { get: (k: string) => unknown }).get('user') as AuthUser | undefined; if (user && !canAccessEnergy(user.roles)) { return c.json({ error: 'Forbidden: 能源管理访问需要 BI-LEADER-ENERGY 角色' }, 403); } return next(); }); const cacheDependency = { cached }; registerHydrogenOverviewRoute(app, { ...cacheDependency, hydrogenPool }); registerHydrogenDailyRoute(app, { ...cacheDependency, hydrogenPool }); registerElectricOverviewRoute(app, { ...cacheDependency, pool }); registerElectricMonthlyRoute(app, { ...cacheDependency, pool }); export default app;