import { NestFactory } from '@nestjs/core'; import { ValidationPipe, Logger } from '@nestjs/common'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { AppModule } from './app.module'; import { GlobalExceptionFilter } from './shared/filters/global-exception.filter'; import { LoggingInterceptor } from './shared/interceptors/logging.interceptor'; async function bootstrap() { const logger = new Logger('Bootstrap'); const app = await NestFactory.create(AppModule); // 全局异常过滤器 app.useGlobalFilters(new GlobalExceptionFilter()); // 全局日志拦截器 app.useGlobalInterceptors(new LoggingInterceptor()); // 全局管道 app.useGlobalPipes( new ValidationPipe({ whitelist: true, transform: true, forbidNonWhitelisted: true, }), ); // API 前缀 const apiPrefix = process.env.API_PREFIX || 'api/v1'; app.setGlobalPrefix(apiPrefix); // Swagger 文档 const config = new DocumentBuilder() .setTitle('Presence & Analytics Service API') .setDescription('用户活跃度与在线状态服务') .setVersion('1.0') .addBearerAuth() .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup(`${apiPrefix}/docs`, app, document); // 启动服务 const port = parseInt(process.env.APP_PORT || '3011', 10); await app.listen(port); logger.log(`Presence Service is running on: http://localhost:${port}/${apiPrefix}`); logger.log(`Swagger docs: http://localhost:${port}/${apiPrefix}/docs`); } bootstrap();