import { Injectable, NestInterceptor, ExecutionContext, CallHandler, StreamableFile, } from '@nestjs/common'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { DEFAULT_SUCCESS_MSG } from 'src/share/constans'; export interface Response { statusCode: number; message: string; data: T; } @Injectable() export class TransformResponseInterceptor implements NestInterceptor | StreamableFile> { intercept( context: ExecutionContext, next: CallHandler, ): Observable | StreamableFile> { return next.handle().pipe( map((data) => { if (data instanceof StreamableFile) { return data; } return { statusCode: data?.statusCode || context.switchToHttp().getResponse().statusCode, message: data?.message || DEFAULT_SUCCESS_MSG, data: data, }; }), ); } }