import { NestFactory } from '@nestjs/core'; import { ValidationPipe, Logger } from '@nestjs/common'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { AppModule } from './app.module'; async function bootstrap() { const logger = new Logger('Bootstrap'); const app = await NestFactory.create(AppModule); // Global prefix app.setGlobalPrefix('api/v1'); // Validation app.useGlobalPipes( new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true, transformOptions: { enableImplicitConversion: true }, }), ); // CORS app.enableCors({ origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', credentials: true, }); // Swagger const config = new DocumentBuilder() .setTitle('Contribution Service API') .setDescription('RWA贡献值算力服务API - 管理用户算力计算、分配、明细账等功能') .setVersion('1.0.0') .addBearerAuth() .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api/docs', app, document); // Kafka 微服务 - 用于 CDC 消费和事件处理 const kafkaBrokers = process.env.KAFKA_BROKERS?.split(',') || ['localhost:9092']; const kafkaGroupId = process.env.KAFKA_GROUP_ID || 'contribution-service-group'; app.connectMicroservice({ transport: Transport.KAFKA, options: { client: { clientId: 'contribution-service', brokers: kafkaBrokers, }, consumer: { groupId: kafkaGroupId, }, }, }); await app.startAllMicroservices(); logger.log('Kafka microservice started'); const port = process.env.APP_PORT || 3020; await app.listen(port); logger.log(`Contribution Service is running on port ${port}`); logger.log(`Swagger docs: http://localhost:${port}/api/docs`); } bootstrap();