Server/src/main.ts

55 lines
1.5 KiB
TypeScript
Raw Normal View History

import { ClassSerializerInterceptor, HttpStatus, ValidationPipe } from "@nestjs/common";
import { HttpAdapterHost, NestFactory, Reflector } from "@nestjs/core";
2024-12-02 14:25:36 +00:00
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
import { PrismaClientExceptionFilter } from "nestjs-prisma";
2024-11-23 00:37:22 +00:00
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
2024-11-24 01:34:20 +00:00
app.enableCors({
origin: "*",
2024-11-24 01:34:20 +00:00
});
const { httpAdapter } = app.get(HttpAdapterHost);
app.useGlobalFilters(
new PrismaClientExceptionFilter(httpAdapter, {
P2000: {
errorMessage: "A required field is missing",
statusCode: HttpStatus.BAD_REQUEST
},
P2002: {
errorMessage: "A ressource with the same unique fields already exists",
statusCode: HttpStatus.CONFLICT
},
P2025: {
errorMessage: "The requested ressource does not exist",
statusCode: HttpStatus.NOT_FOUND
}
}),
);
app.useGlobalPipes(new ValidationPipe());
2024-12-02 14:25:36 +00:00
app.useGlobalInterceptors(
new ClassSerializerInterceptor(app.get(Reflector), {
excludeExtraneousValues: true,
}),
);
const config = new DocumentBuilder()
.setTitle("Toogether API")
.addBearerAuth()
.build();
const documentFactory = () => SwaggerModule.createDocument(app, config);
SwaggerModule.setup("documentation", app, documentFactory, {
swaggerOptions: {
tryItOutEnabled: true,
persistAuthorization: true,
2024-12-02 15:55:44 +00:00
},
2024-12-02 14:25:36 +00:00
});
await app.listen(process.env.PORT ?? 3000, "0.0.0.0");
2024-11-23 00:37:22 +00:00
}
bootstrap();