34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
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;
|