File

shared/common/api-response.ts

Description

ApiResponce is parent class for HTTP API responses with some usefull wrappers defining reply protocol

Index

Properties
Methods

Properties

Protected Readonly logger
Default value : new Logger(ApiResponse.name)

logger object

Methods

catchAndRespondWithError
catchAndRespondWithError(error)

Error response method with additional trace details about error

@param message {any} - error message @param code {any} - error code

@return {AbstractApiReply} - error reply object

Parameters :
Name Optional
error No
Returns : literal type
  • error reply object
responseError
responseError(message, code)

Error response method

@param message {any} - error message @param code {any} - error code

@return {AbstractApiReply} - error reply object

Parameters :
Name Optional Description
message No
  • error message
code No
  • error code
Returns : literal type
  • error reply object
responseSuccess
responseSuccess(data: TResponse)
Type parameters :
  • TResponse

Success response method

@param data {any} - reply data

@return {AbstractApiReply} - success reply object

Parameters :
Name Type Optional Description
data TResponse No
  • reply data
Returns : literal type
  • success reply object
responseSuccessOnly
responseSuccessOnly()

Simplest success response without any data method

@return {AbstractApiReply} - success reply object

Returns : literal type
  • success reply object
import { Logger } from '@nestjs/common';
import { LooseObject } from './types';
/**
 *  ApiResponce is parent class for HTTP API responses with some usefull wrappers defining reply protocol
 */
export class ApiResponse {
  /** logger object */
  protected readonly logger = new Logger(ApiResponse.name);

  /**
   *  Success response method
   *
   *  @param data {any} - reply data
   *
   *  @return {AbstractApiReply} - success reply object
   */
  responseSuccess<TResponse = LooseObject>(
    data: TResponse
  ): {
    success: boolean;
    data: TResponse;
  } {
    return {
      success: true,
      data,
    };
  }

  /**
   *  Error response method
   *
   *  @param message {any} - error message
   *  @param code {any} - error code
   *
   *  @return {AbstractApiReply} - error reply object
   */
  responseError(
    message,
    code,
  ): {
    success: boolean;
    error: {
      code: any;
      message: any;
    };
  } {
    return {
      success: false,
      error: {
        code,
        message,
      },
    };
  }

  /**
   *  Error response method with additional trace details about error
   *
   *  @param message {any} - error message
   *  @param code {any} - error code
   *
   *  @return {AbstractApiReply} - error reply object
   */
  catchAndRespondWithError(
    error,
  ): {
    success: boolean;
    error: {
      code: any;
      message: any;
    };
  } {
    const stack = new Error().stack || '';
    this.logger.error('error stack', stack.split('\n').join(' -- '));
    if (
      typeof error.getResponse === 'function' &&
      typeof error.getStatus === 'function'
    ) {
      this.logger.error(
        `Caught error: ${error.getStatus()} - ${error.getResponse()}`,
      );
      return this.responseError(error.getResponse(), error.getStatus());
    }

    const message = `Caught error: ${error}`;
    this.logger.error(message);
    return this.responseError(message, 500);
  }

  /**
   *  Simplest success response without any data method
   *
   *  @return {AbstractApiReply} - success reply object
   */
  responseSuccessOnly(): {
    success: boolean;
  } {
    return {
      success: true,
    };
  }
}

results matching ""

    No results matching ""