From 458093fca212ac2ca16a7b9dd6d8e540b854b464 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 18 Jan 2026 14:59:20 +0200 Subject: [PATCH] fix(server): move global filters, pipes, and interceptors to AppModule --- packages/server/src/main.ts | 12 ---------- packages/server/src/modules/App/App.module.ts | 22 ++++++++++++++++++- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/packages/server/src/main.ts b/packages/server/src/main.ts index 1cd28fd0f..e4ebaebd3 100644 --- a/packages/server/src/main.ts +++ b/packages/server/src/main.ts @@ -4,10 +4,6 @@ import { ClsMiddleware } from 'nestjs-cls'; import * as path from 'path'; import './utils/moment-mysql'; import { AppModule } from './modules/App/App.module'; -import { ServiceErrorFilter } from './common/filters/service-error.filter'; -import { ModelHasRelationsFilter } from './common/filters/model-has-relations.filter'; -import { ValidationPipe } from './common/pipes/ClassValidation.pipe'; -import { ToJsonInterceptor } from './common/interceptors/to-json.interceptor'; import { NestExpressApplication } from '@nestjs/platform-express'; global.__public_dirname = path.join(__dirname, '..', 'public'); @@ -25,11 +21,6 @@ async function bootstrap() { // create and mount the middleware manually here app.use(new ClsMiddleware({}).use); - app.useGlobalInterceptors(new ToJsonInterceptor()); - - // use the validation pipe globally - app.useGlobalPipes(new ValidationPipe()); - const config = new DocumentBuilder() .setTitle('Bigcapital') .setDescription('Financial accounting software') @@ -39,9 +30,6 @@ async function bootstrap() { const documentFactory = () => SwaggerModule.createDocument(app, config); SwaggerModule.setup('swagger', app, documentFactory); - app.useGlobalFilters(new ServiceErrorFilter()); - app.useGlobalFilters(new ModelHasRelationsFilter()); - await app.listen(process.env.PORT ?? 3000); } bootstrap(); diff --git a/packages/server/src/modules/App/App.module.ts b/packages/server/src/modules/App/App.module.ts index 98d69d3f0..ded1ffda5 100644 --- a/packages/server/src/modules/App/App.module.ts +++ b/packages/server/src/modules/App/App.module.ts @@ -1,7 +1,7 @@ import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { EventEmitterModule } from '@nestjs/event-emitter'; -import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; +import { APP_GUARD, APP_INTERCEPTOR, APP_PIPE, APP_FILTER } from '@nestjs/core'; import { join } from 'path'; import { ServeStaticModule } from '@nestjs/serve-static'; import { RedisModule } from '@liaoliaots/nestjs-redis'; @@ -36,6 +36,10 @@ import { PdfTemplatesModule } from '../PdfTemplate/PdfTemplates.module'; import { BranchesModule } from '../Branches/Branches.module'; import { WarehousesModule } from '../Warehouses/Warehouses.module'; import { SerializeInterceptor } from '@/common/interceptors/serialize.interceptor'; +import { ValidationPipe } from '@/common/pipes/ClassValidation.pipe'; +import { ToJsonInterceptor } from '@/common/interceptors/to-json.interceptor'; +import { ServiceErrorFilter } from '@/common/filters/service-error.filter'; +import { ModelHasRelationsFilter } from '@/common/filters/model-has-relations.filter'; import { ChromiumlyTenancyModule } from '../ChromiumlyTenancy/ChromiumlyTenancy.module'; import { CustomersModule } from '../Customers/Customers.module'; import { VendorsModule } from '../Vendors/Vendors.module'; @@ -234,10 +238,18 @@ import { AppThrottleModule } from './AppThrottle.module'; ], controllers: [AppController], providers: [ + { + provide: APP_PIPE, + useClass: ValidationPipe, + }, { provide: APP_GUARD, useClass: ThrottlerGuard, }, + { + provide: APP_INTERCEPTOR, + useClass: ToJsonInterceptor, + }, { provide: APP_INTERCEPTOR, useClass: SerializeInterceptor, @@ -250,6 +262,14 @@ import { AppThrottleModule } from './AppThrottle.module'; provide: APP_INTERCEPTOR, useClass: ExcludeNullInterceptor, }, + { + provide: APP_FILTER, + useClass: ServiceErrorFilter, + }, + { + provide: APP_FILTER, + useClass: ModelHasRelationsFilter, + }, AppService, ], })