76 lines
3.5 KiB
JavaScript
76 lines
3.5 KiB
JavaScript
import Router from "koa-router";
|
||
import { HandlerEscortRecord } from "../handler/escort_record.js";
|
||
import { HandlerHealthProfile } from "../handler/health_profile.js";
|
||
import { HandlerResource } from "../handler/resource.js";
|
||
import ResponseUtil from "../utils/responseUtil.js";
|
||
import { getUserByToken } from "../utils/user_service.js";
|
||
|
||
/**
|
||
* 鉴权中间件:校验 token 并将用户信息挂到 ctx.state.user
|
||
* token→user 结果带 5 分钟进程内缓存(见 utils/user_service.js)
|
||
*/
|
||
async function requireAuth(ctx, next) {
|
||
const token = ctx.header["token"] || ctx.header["authorization"] || ctx.request.query?.token;
|
||
if (!token) {
|
||
ResponseUtil.unauthorized(ctx, "缺少token");
|
||
return;
|
||
}
|
||
|
||
const user = await getUserByToken(token);
|
||
if (!user) {
|
||
ResponseUtil.unauthorized(ctx, "登录已失效");
|
||
return;
|
||
}
|
||
ctx.state.user = user;
|
||
await next();
|
||
}
|
||
|
||
function printRoutes(stack) {
|
||
for (const layer of stack) {
|
||
if (layer.path) {
|
||
const methods = layer.methods.filter(m => m !== '_all');
|
||
methods.forEach(m => console.log(` [${m.toUpperCase()}] ${layer.path}`));
|
||
}
|
||
}
|
||
}
|
||
|
||
function registerRoutes(app) {
|
||
const router = new Router({ prefix: '/health' });
|
||
|
||
const handlerEscortRecord = new HandlerEscortRecord();
|
||
const handlerHealthProfile = new HandlerHealthProfile();
|
||
const handlerResource = new HandlerResource();
|
||
|
||
// 敏感数据路由需要登录后访问
|
||
router.get("/escort-record/my", requireAuth, handlerEscortRecord.getMyRecords.bind(handlerEscortRecord));
|
||
router.get("/escort-record/attendant", requireAuth, handlerEscortRecord.getAttendantRecords.bind(handlerEscortRecord));
|
||
router.get("/escort-record", requireAuth, handlerEscortRecord.getRecords.bind(handlerEscortRecord));
|
||
router.get("/escort-record/:id", requireAuth, handlerEscortRecord.getRecordById.bind(handlerEscortRecord));
|
||
router.post("/escort-record", requireAuth, handlerEscortRecord.createRecord.bind(handlerEscortRecord));
|
||
router.put("/escort-record/:id", requireAuth, handlerEscortRecord.updateRecord.bind(handlerEscortRecord));
|
||
router.patch("/escort-record/:id/status", requireAuth, handlerEscortRecord.updateStatus.bind(handlerEscortRecord));
|
||
router.delete("/escort-record/:id", requireAuth, handlerEscortRecord.deleteRecord.bind(handlerEscortRecord));
|
||
|
||
router.get("/health-profile", requireAuth, handlerHealthProfile.getProfiles.bind(handlerHealthProfile));
|
||
router.get("/health-profile/:id", requireAuth, handlerHealthProfile.getProfileById.bind(handlerHealthProfile));
|
||
router.post("/health-profile", requireAuth, handlerHealthProfile.createProfile.bind(handlerHealthProfile));
|
||
router.put("/health-profile/:id", requireAuth, handlerHealthProfile.updateProfile.bind(handlerHealthProfile));
|
||
router.delete("/health-profile/:id", requireAuth, handlerHealthProfile.deleteProfile.bind(handlerHealthProfile));
|
||
|
||
router.get("/service", handlerResource.getServices.bind(handlerResource));
|
||
router.get("/agreement", handlerResource.getAgreement.bind(handlerResource));
|
||
router.get("/hospital-info", handlerResource.getHospitalInfo.bind(handlerResource));
|
||
router.get("/hospital-ranking", handlerResource.getHospitalRanking.bind(handlerResource));
|
||
router.get("/department-rankings", handlerResource.getDepartmentRankings.bind(handlerResource));
|
||
router.get("/ai-quick-questions", handlerResource.getAiQuickQuestions.bind(handlerResource));
|
||
|
||
app.use(router.routes());
|
||
app.use(router.allowedMethods());
|
||
|
||
console.log('API Routes:');
|
||
printRoutes(router.stack);
|
||
|
||
return router;
|
||
}
|
||
|
||
export default registerRoutes; |