All files / src/platform/gateway api-gateway.module.ts

0% Statements 0/16
100% Branches 0/0
0% Functions 0/1
0% Lines 0/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                                                                                                                       
import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { APP_INTERCEPTOR, APP_FILTER, Reflector } from '@nestjs/core';
 
import { CorrelationIdMiddleware } from './middleware/correlation-id.middleware';
import { RequestContextService } from './services/request-context.service';
import { ApiRouteRegistry } from './services/api-route-registry.service';
import { ApiRateLimitPolicyService } from './services/api-rate-limit-policy.service';
import { ApiIdempotencyService } from './services/api-idempotency.service';
 
import { ApiResponseEnvelopeInterceptor } from './interceptors/api-response-envelope.interceptor';
import { ApiAuditInterceptor } from './interceptors/api-audit.interceptor';
import { ApiMetricsInterceptor } from './interceptors/api-metrics.interceptor';
import { ApiDeprecationInterceptor } from './interceptors/api-deprecation.interceptor';
import { ApiErrorMappingFilter } from './filters/api-error-mapping.filter';
 
@Module({
  providers: [
    // Core Services
    RequestContextService,
    ApiRouteRegistry,
    ApiRateLimitPolicyService,
    ApiIdempotencyService,
 
    // Global Interceptors (applied in order)
    {
      provide: APP_FILTER,
      useClass: ApiErrorMappingFilter,
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: ApiAuditInterceptor,
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: ApiMetricsInterceptor,
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: ApiDeprecationInterceptor,
    },
    {
      provide: APP_INTERCEPTOR,
      useClass: ApiResponseEnvelopeInterceptor,
    },
  ],
  exports: [
    RequestContextService,
    ApiRouteRegistry,
    ApiRateLimitPolicyService,
    ApiIdempotencyService,
  ],
})
export class ApiGatewayModule {
  configure(consumer: MiddlewareConsumer): void {
    consumer
      .apply(CorrelationIdMiddleware)
      .forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}