app.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const koa_1 = __importDefault(require("koa"));
  7. const cors_1 = __importDefault(require("@koa/cors"));
  8. const router_1 = __importDefault(require("@koa/router"));
  9. const koa_body_1 = __importDefault(require("koa-body"));
  10. const koa_static_1 = __importDefault(require("koa-static"));
  11. const koa_mount_1 = __importDefault(require("koa-mount"));
  12. const path_1 = __importDefault(require("path"));
  13. const config_1 = require("./config");
  14. const models_1 = require("./models");
  15. const errorHandler_1 = require("./middleware/errorHandler");
  16. const auth_controller_1 = __importDefault(require("./modules/auth/auth.controller"));
  17. const tts_controller_1 = __importDefault(require("./modules/tts/tts.controller"));
  18. const member_controller_1 = __importDefault(require("./modules/member/member.controller"));
  19. const share_controller_1 = __importDefault(require("./modules/share/share.controller"));
  20. const ai_controller_1 = __importDefault(require("./modules/ai/ai.controller"));
  21. const ai_content_controller_1 = __importDefault(require("./modules/ai-content/ai-content.controller"));
  22. const player_controller_1 = __importDefault(require("./modules/player/player.controller"));
  23. const favorites_controller_1 = __importDefault(require("./modules/favorites/favorites.controller"));
  24. const preferences_controller_1 = __importDefault(require("./modules/preferences/preferences.controller"));
  25. const search_controller_1 = __importDefault(require("./modules/search/search.controller"));
  26. const categories_controller_1 = __importDefault(require("./modules/categories/categories.controller"));
  27. const comments_controller_1 = __importDefault(require("./modules/comments/comments.controller"));
  28. const notifications_controller_1 = __importDefault(require("./modules/notifications/notifications.controller"));
  29. const templates_controller_1 = __importDefault(require("./modules/templates/templates.controller"));
  30. const bgm_controller_1 = __importDefault(require("./modules/bgm/bgm.controller"));
  31. const audioedit_controller_1 = __importDefault(require("./modules/audioedit/audioedit.controller"));
  32. const book_generator_controller_1 = __importDefault(require("./modules/book-generator/book-generator.controller"));
  33. const controller_1 = __importDefault(require("./modules/book-generator/langgraph/controller"));
  34. const video_generator_controller_1 = __importDefault(require("./modules/video-generator/video-generator.controller"));
  35. const app = new koa_1.default();
  36. const router = new router_1.default();
  37. // 中间件
  38. app.use(errorHandler_1.errorHandler);
  39. app.use((0, cors_1.default)({
  40. origin: '*',
  41. allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  42. allowHeaders: ['Content-Type', 'Authorization'],
  43. }));
  44. app.use((0, koa_body_1.default)({
  45. multipart: true,
  46. formidable: {
  47. uploadDir: path_1.default.join(process.cwd(), 'uploads', 'materials'),
  48. keepExtensions: true,
  49. maxFileSize: 100 * 1024 * 1024, // 100MB
  50. },
  51. }));
  52. // 静态文件服务 - 音频文件
  53. app.use((0, koa_mount_1.default)('/uploads', (0, koa_static_1.default)(config_1.config.upload.dir)));
  54. // 静态文件服务 - 视频文件
  55. app.use((0, koa_mount_1.default)('/videos', (0, koa_static_1.default)(path_1.default.join(process.cwd(), 'public', 'videos'))));
  56. // 健康检查
  57. router.get('/health', (ctx) => {
  58. ctx.body = { code: 0, message: 'ok', data: { status: 'healthy' } };
  59. });
  60. // 注册路由
  61. router.use('/api/auth', auth_controller_1.default.routes());
  62. router.use('/api/tts', tts_controller_1.default.routes());
  63. router.use('/api/member', member_controller_1.default.routes());
  64. router.use('/api/share', share_controller_1.default.routes());
  65. router.use('/api/ai', ai_controller_1.default.routes());
  66. router.use('/api/ai-content', ai_content_controller_1.default.routes());
  67. router.use('/api/player', player_controller_1.default.routes());
  68. router.use('/api/favorites', favorites_controller_1.default.routes());
  69. router.use('/api/user/preferences', preferences_controller_1.default.routes());
  70. router.use('/api/search', search_controller_1.default.routes());
  71. router.use('/api/categories', categories_controller_1.default.routes());
  72. router.use('/api/comments', comments_controller_1.default.routes());
  73. router.use('/api/notifications', notifications_controller_1.default.routes());
  74. router.use('/api/templates', templates_controller_1.default.routes());
  75. router.use('/api/bgm', bgm_controller_1.default.routes());
  76. router.use('/api/audio', audioedit_controller_1.default.routes());
  77. router.use('/api/book-generator', book_generator_controller_1.default.routes());
  78. router.use('/api/book-generator/langgraph', controller_1.default.routes());
  79. router.use('/api/video', video_generator_controller_1.default.routes());
  80. app.use(router.routes()).use(router.allowedMethods());
  81. // 启动服务
  82. async function start() {
  83. try {
  84. await (0, models_1.connectDatabase)();
  85. console.log('✅ MySQL 连接成功');
  86. app.listen(config_1.config.port, () => {
  87. console.log(`🚀 服务启动成功: http://localhost:${config_1.config.port}`);
  88. console.log(`📁 上传目录: ${config_1.config.upload.dir}`);
  89. });
  90. }
  91. catch (error) {
  92. console.error('❌ 服务启动失败:', error);
  93. process.exit(1);
  94. }
  95. }
  96. start();