| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { NestFactory } from '@nestjs/core';
- import { AppModule } from './app.module';
- import { ValidationPipe } from '@nestjs/common';
- import { TransformInterceptor } from './presentation/interceptors/transform.interceptor';
- import { PrismaService } from './infrastructure/database/prisma.service';
- import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
- //import { RedocModule } from 'nestjs-redoc';
- import {
- FastifyAdapter,
- NestFastifyApplication,
- } from '@nestjs/platform-fastify';
- async function bootstrap() {
- const app = await NestFactory.create<NestFastifyApplication>(
- AppModule,
- new FastifyAdapter({
- logger: true,
- }),
- );
- // swagger document
- const config = new DocumentBuilder()
- .setTitle('DabidjanApp')
- .setDescription('DabidjanApp API description')
- .setVersion('1.0')
- .addTag('Transport')
- .addServer('/api')
- .addBearerAuth(
- {
- type: 'http',
- scheme: 'bearer',
- bearerFormat: 'JWT',
- name: 'JWT',
- description: 'Entrez votre token JWT',
- in: 'header',
- },
- 'access-token',
- )
- .build();
- const document = SwaggerModule.createDocument(app, config, {
- ignoreGlobalPrefix: false,
- });
- SwaggerModule.setup('api-docs', app, document);
- // Get Prisma Service
- const prismaService = app.get(PrismaService);
- app.useGlobalPipes(
- new ValidationPipe({
- whitelist: true, // Cette option filtre automatiquement les propriétés qui n'ont pas de décorateurs de validation dans votre DTO
- transform: true, // Cette option transforme automatiquement les données entrantes en les convertissant en types appropriés
- forbidNonWhitelisted: true, // Cette option empêche l'utilisation de propriétés non autorisées dans la requête
- }),
- );
- app.enableCors({
- origin: '*', // ou '*' en développement
- methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
- allowedHeaders: ['Content-Type', 'Authorization'],
- credentials: true, // si tu utilises les cookies ou des sessions
- });
- app.useGlobalInterceptors(new TransformInterceptor());
- app.setGlobalPrefix('api');
- // Try to connect to database with retries
- let retries = 5;
- while (retries > 0) {
- try {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
- await prismaService.$connect();
- console.log('Successfully connected to database');
- break;
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- } catch (error) {
- console.log(`Failed to connect to database. Retries left: ${retries}`);
- retries -= 1;
- await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds before retry
- }
- }
- await app.listen(3000, '0.0.0.0');
- console.log(`Application is running on: ${await app.getUrl()}`);
- }
- void bootstrap();
|