diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts new file mode 100644 index 0000000..d22f389 --- /dev/null +++ b/src/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/src/app.controller.ts b/src/app.controller.ts new file mode 100644 index 0000000..cce879e --- /dev/null +++ b/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..d4e1f86 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,31 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { PrismaModule } from './prisma/prisma.module'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; +import { SitesModule } from './sites/sites.module'; +import { MachinesModule } from './machines/machines.module'; +import { ComposantsModule } from './composants/composants.module'; +import { PiecesModule } from './pieces/pieces.module'; +import { DocumentsModule } from './documents/documents.module'; +import { TypesModule } from './types/types.module'; +import { CustomFieldsModule } from './custom-fields/custom-fields.module'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + }), + PrismaModule, + SitesModule, + MachinesModule, + ComposantsModule, + PiecesModule, + DocumentsModule, + TypesModule, + CustomFieldsModule, + ], + controllers: [AppController], + providers: [AppService], +}) +export class AppModule {} diff --git a/src/app.service.ts b/src/app.service.ts new file mode 100644 index 0000000..927d7cc --- /dev/null +++ b/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..ddfd7f6 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,30 @@ +import { NestFactory } from '@nestjs/core'; +import { ValidationPipe } from '@nestjs/common'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + + // Configuration CORS + app.enableCors({ + origin: process.env.CORS_ORIGIN || 'http://localhost:3001', + credentials: true, + }); + + // Configuration de la validation globale + app.useGlobalPipes(new ValidationPipe({ + whitelist: process.env.VALIDATION_WHITELIST === 'true', + forbidNonWhitelisted: process.env.VALIDATION_FORBID_NON_WHITELISTED === 'true', + transform: process.env.VALIDATION_TRANSFORM === 'true', + })); + + // Préfixe global pour l'API + const apiPrefix = process.env.API_PREFIX || 'api'; + app.setGlobalPrefix(apiPrefix); + + const port = process.env.PORT || 3000; + await app.listen(port); + console.log(`Application is running on: http://localhost:${port}`); + console.log(`Environment: ${process.env.NODE_ENV || 'development'}`); +} +bootstrap(); diff --git a/src/prisma/prisma.module.ts b/src/prisma/prisma.module.ts new file mode 100644 index 0000000..68092fe --- /dev/null +++ b/src/prisma/prisma.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; + +@Global() +@Module({ + providers: [PrismaService], + exports: [PrismaService], +}) +export class PrismaModule {} \ No newline at end of file diff --git a/src/prisma/prisma.service.ts b/src/prisma/prisma.service.ts new file mode 100644 index 0000000..d6c54bb --- /dev/null +++ b/src/prisma/prisma.service.ts @@ -0,0 +1,19 @@ +import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Injectable() +export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + constructor() { + super({ + log: ['query', 'info', 'warn', 'error'], + }); + } + + async onModuleInit() { + await this.$connect(); + } + + async onModuleDestroy() { + await this.$disconnect(); + } +} \ No newline at end of file