api.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { OpenAPIHono } from '@hono/zod-openapi'
  2. import { errorHandler } from './utils/errorHandler'
  3. import usersRouter from './api/users/index'
  4. import authRoute from './api/auth/index'
  5. import { AuthContext } from './types/context'
  6. import { AppDataSource } from './data-source'
  7. import { seedExcelTemplates } from './modules/excel/excel-template.seed'
  8. const api = new OpenAPIHono<AuthContext>()
  9. api.onError(errorHandler)
  10. // Rate limiting
  11. api.use('/api/v1/*', async (c, next) => {
  12. const ip = c.req.header('x-forwarded-for') || c.req.header('cf-connecting-ip')
  13. // 实现速率限制逻辑
  14. await next()
  15. })
  16. // 数据库初始化中间件
  17. api.use('/api/v1/*', async (c, next) => {
  18. if(!AppDataSource.isInitialized) {
  19. await AppDataSource.initialize();
  20. // 执行seed(通常在应用启动时调用)
  21. seedExcelTemplates().catch(err => console.error('Seed失败:', err));
  22. }
  23. await next();
  24. })
  25. // 注册Bearer认证方案
  26. api.openAPIRegistry.registerComponent('securitySchemes','bearerAuth',{
  27. type:'http',
  28. scheme:'bearer',
  29. bearerFormat:'JWT',
  30. description:'使用JWT进行认证'
  31. })
  32. // OpenAPI documentation endpoint
  33. if(!import.meta.env.PROD){
  34. api.doc31('/doc', {
  35. openapi: '3.1.0',
  36. info: {
  37. title: 'API Documentation',
  38. version: '1.0.0'
  39. },
  40. security: [{
  41. bearerAuth: []
  42. }]
  43. // servers: [{ url: '/api/v1' }]
  44. })
  45. }
  46. import excelTemplatesRoute from './api/excel-templates/index'
  47. import convertRoute from './api/convert/index'
  48. const userRoutes = api.route('/api/v1/users', usersRouter)
  49. const authRoutes = api.route('/api/v1/auth', authRoute)
  50. const excelTemplatesRoutes = api.route('/api/v1/excel-templates', excelTemplatesRoute)
  51. const convertRoutes = api.route('/api/v1/convert', convertRoute)
  52. export type AuthRoutes = typeof authRoutes
  53. export type UserRoutes = typeof userRoutes
  54. export type ExcelTemplatesRoutes = typeof excelTemplatesRoutes
  55. export type tRoutes = = typeof convertRoutes
  56. export default api