app.module.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
  2. import { ConfigModule, ConfigService } from '@nestjs/config';
  3. import { TypeOrmModule } from '@nestjs/typeorm';
  4. import { ScheduleModule } from '@nestjs/schedule';
  5. import { ServeStaticModule } from '@nestjs/serve-static';
  6. import { join } from 'path';
  7. import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
  8. import { AppController } from './app.controller';
  9. import { AppService } from './app.service';
  10. import { ApiModule } from './api/api.module';
  11. import { ElasticsearchModule } from './elasticsearch/elasticsearch.module';
  12. import { UploadModule } from './upload/upload.module';
  13. import { ChatModule } from './chat/chat.module';
  14. import { AuthModule } from './auth/auth.module';
  15. import { I18nModule } from './i18n/i18n.module';
  16. import { JwtAuthGuard } from './auth/jwt-auth.guard';
  17. import { CombinedAuthGuard } from './auth/combined-auth.guard';
  18. import { KnowledgeBaseModule } from './knowledge-base/knowledge-base.module';
  19. import { ModelConfigModule } from './model-config/model-config.module';
  20. import { UserModule } from './user/user.module';
  21. import { UserSettingModule } from './user-setting/user-setting.module';
  22. import { TikaModule } from './tika/tika.module';
  23. import { VisionModule } from './vision/vision.module';
  24. import { LibreOfficeModule } from './libreoffice/libreoffice.module';
  25. import { Pdf2ImageModule } from './pdf2image/pdf2image.module';
  26. import { VisionPipelineModule } from './vision-pipeline/vision-pipeline.module';
  27. import { KnowledgeGroupModule } from './knowledge-group/knowledge-group.module';
  28. import { SearchHistoryModule } from './search-history/search-history.module';
  29. import { NoteModule } from './note/note.module';
  30. import { PodcastModule } from './podcasts/podcast.module';
  31. import { ImportTaskModule } from './import-task/import-task.module';
  32. import { I18nMiddleware } from './i18n/i18n.middleware';
  33. import { TenantMiddleware } from './tenant/tenant.middleware';
  34. import { User } from './user/user.entity';
  35. import { UserSetting } from './user-setting/user-setting.entity';
  36. import { ModelConfig } from './model-config/model-config.entity';
  37. import { KnowledgeBase } from './knowledge-base/knowledge-base.entity';
  38. import { KnowledgeGroup } from './knowledge-group/knowledge-group.entity';
  39. import { SearchHistory } from './search-history/search-history.entity';
  40. import { ChatMessage } from './search-history/chat-message.entity';
  41. import { Note } from './note/note.entity';
  42. import { NoteCategory } from './note/note-category.entity';
  43. import { PodcastEpisode } from './podcasts/entities/podcast-episode.entity';
  44. import { ImportTask } from './import-task/import-task.entity';
  45. import { Tenant } from './tenant/tenant.entity';
  46. import { TenantSetting } from './tenant/tenant-setting.entity';
  47. import { ApiKey } from './auth/entities/api-key.entity';
  48. import { TenantMember } from './tenant/tenant-member.entity';
  49. import { TenantModule } from './tenant/tenant.module';
  50. import { SuperAdminModule } from './super-admin/super-admin.module';
  51. import { AdminModule } from './admin/admin.module';
  52. @Module({
  53. imports: [
  54. ConfigModule.forRoot({
  55. isGlobal: true,
  56. ignoreEnvFile: false,
  57. }),
  58. ServeStaticModule.forRoot({
  59. rootPath: join(process.cwd(), 'uploads'),
  60. serveRoot: '/uploads',
  61. }),
  62. ScheduleModule.forRoot(),
  63. TypeOrmModule.forRootAsync({
  64. imports: [ConfigModule],
  65. inject: [ConfigService],
  66. useFactory: (configService: ConfigService) => ({
  67. type: 'better-sqlite3',
  68. database: configService.get<string>('DATABASE_PATH'),
  69. entities: [
  70. User,
  71. UserSetting,
  72. ModelConfig,
  73. KnowledgeBase,
  74. KnowledgeGroup,
  75. SearchHistory,
  76. ChatMessage,
  77. Note,
  78. NoteCategory,
  79. PodcastEpisode,
  80. ImportTask,
  81. Tenant,
  82. TenantSetting,
  83. TenantMember,
  84. ApiKey,
  85. ],
  86. synchronize: true, // Auto-create database schema. Disable in production.
  87. }),
  88. }),
  89. AuthModule,
  90. I18nModule,
  91. UserModule,
  92. TenantModule,
  93. UserSettingModule,
  94. ModelConfigModule,
  95. KnowledgeBaseModule,
  96. KnowledgeGroupModule,
  97. SearchHistoryModule,
  98. NoteModule,
  99. PodcastModule,
  100. TikaModule,
  101. VisionModule,
  102. LibreOfficeModule,
  103. Pdf2ImageModule,
  104. VisionPipelineModule,
  105. ApiModule,
  106. ElasticsearchModule,
  107. UploadModule,
  108. ChatModule,
  109. ImportTaskModule,
  110. SuperAdminModule,
  111. AdminModule,
  112. ],
  113. controllers: [AppController],
  114. providers: [
  115. AppService,
  116. {
  117. provide: APP_GUARD,
  118. useClass: CombinedAuthGuard,
  119. },
  120. ],
  121. })
  122. export class AppModule implements NestModule {
  123. configure(consumer: MiddlewareConsumer) {
  124. consumer
  125. .apply(I18nMiddleware, TenantMiddleware)
  126. .forRoutes('*');
  127. }
  128. }