import { NestFactory } from '@nestjs/core'; import { ValidationPipe, Logger } from '@nestjs/common'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); const logger = new Logger('UserService'); // Global prefix app.setGlobalPrefix('api/v1'); // Validation pipe app.useGlobalPipes( new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true, }), ); // CORS app.enableCors({ origin: process.env.CORS_ORIGINS?.split(',') || ['http://localhost:3000'], credentials: true, }); // Swagger const swaggerConfig = new DocumentBuilder() .setTitle('Genex User Service') .setDescription('User profile, KYC, wallet, messages, and admin user management') .setVersion('1.0') .addBearerAuth() .addTag('users') .addTag('kyc') .addTag('wallet') .addTag('messages') .addTag('admin-users') .addTag('admin-dashboard') .addTag('admin-system') .addTag('admin-analytics') .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('docs', app, document); // Graceful shutdown hooks (SIGTERM, SIGINT) app.enableShutdownHooks(); const port = process.env.PORT || 3001; await app.listen(port); logger.log(`User Service running on port ${port}`); logger.log(`Swagger docs: http://localhost:${port}/docs`); } bootstrap();