diff --git a/src/error/grpc-to-http-exception.filter.ts b/src/error/grpc-to-http-exception.filter.ts new file mode 100644 index 0000000..3e187db --- /dev/null +++ b/src/error/grpc-to-http-exception.filter.ts @@ -0,0 +1,22 @@ +import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common'; +import { Response } from 'express'; + +import ErrorBuilder from '../utils/ErrorBuilder'; + +@Catch(Error) +export class GrpcToHttpExceptionFilter implements ExceptionFilter { + catch(exception: any, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + + // return this exception directly if is already of type ErrorBuilder, + // else transform it using the ErrorBuilder + const err = + exception.constructor.name === ErrorBuilder.name + ? exception + : new ErrorBuilder(exception.details); + + const { statusCode } = err.response; + return response.status(statusCode).json(err.response); + } +} diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index 0560249..6db6a51 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -6,6 +6,7 @@ import { HttpCode, HttpStatus, Inject, + UseFilters, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { @@ -22,8 +23,10 @@ import { import { AuthClientService } from './auth.service'; import { DadosferaLogger } from 'dadosfera-logs'; +import { GrpcToHttpExceptionFilter } from '../../error/grpc-to-http-exception.filter'; @ApiTags('Auth') +@UseFilters(new GrpcToHttpExceptionFilter()) @Controller('auth') export class AuthController { logger: any; diff --git a/src/utils/ErrorBuilder.ts b/src/utils/ErrorBuilder.ts index fd7095d..2f2cfd9 100644 --- a/src/utils/ErrorBuilder.ts +++ b/src/utils/ErrorBuilder.ts @@ -3,7 +3,7 @@ import { RpcException } from '@nestjs/microservices'; import ErrorCodes from './errorCodes'; -function enrichErrorCode(code: string) { +export function EnrichErrorCode(code: string) { switch (code) { case ErrorCodes.AUTH.WRONG_CREDENTIALS: return { @@ -138,7 +138,7 @@ export default class ErrorBuilder extends HttpException { logger.log(code); } - const { statusCode, message, error, code: rCode } = enrichErrorCode(code); + const { statusCode, message, error, code: rCode } = EnrichErrorCode(code); super({ statusCode, message, error, code: rCode }, statusCode); this.code = code; }