api-server/src/worker.module.ts
WangDL 33f1cc1859
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 1m1s
feat: P2 infrastructure — Docker Compose, shutdown hooks, Prisma migration
- B20: docker-compose.yml with MySQL 8.0, Redis 7, API, BullMQ Worker, Nginx
- B20: Dockerfile.worker + worker.module.ts + worker.main.ts for standalone worker
- B20: nginx/nginx.conf reverse proxy with gzip, /api/* routes, health check
- B21: app.enableShutdownHooks() in main.ts for graceful SIGTERM handling
- B22: migration adding objectKey/bucket to UploadedFile, AiUsageLog, WaitlistEntry

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:50:59 +08:00

70 lines
2.3 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { PrismaModule } from './infrastructure/database/prisma.module';
import { RedisModule } from './infrastructure/redis/redis.module';
import { QueueModule } from './infrastructure/queue/queue.module';
import { AiModule } from './modules/ai/ai.module';
import { StorageModule } from './infrastructure/storage/storage.module';
import { LoggerModule } from './infrastructure/logger/logger.module';
import { AiAnalysisWorker } from './workers/ai-analysis.worker';
import { DocumentImportWorker } from './workers/document-import.worker';
import { NotificationWorker } from './workers/notification.worker';
import { AiAnalysisModule } from './modules/ai-analysis/ai-analysis.module';
import { DocumentImportModule } from './modules/document-import/document-import.module';
import { KnowledgeItemsModule } from './modules/knowledge-items/knowledge-items.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import appConfig from './config/app.config';
import databaseConfig from './config/database.config';
import redisConfig from './config/redis.config';
import jwtConfig from './config/jwt.config';
import aiConfig from './config/ai.config';
import storageConfig from './config/storage.config';
import appleConfig from './config/apple.config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [
appConfig,
databaseConfig,
redisConfig,
jwtConfig,
aiConfig,
storageConfig,
appleConfig,
],
}),
JwtModule.registerAsync({
global: true,
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
secret: config.get<string>('jwt.secret'),
signOptions: { expiresIn: config.get<string>('jwt.expiresIn', '1h') as any },
}),
}),
PrismaModule,
RedisModule,
QueueModule,
AiModule,
StorageModule,
LoggerModule,
AiAnalysisModule,
DocumentImportModule,
KnowledgeItemsModule,
NotificationsModule,
],
providers: [
AiAnalysisWorker,
DocumentImportWorker,
NotificationWorker,
],
})
export class WorkerModule {}