Source

tools/ApiResponse.js

// $Id$
// // @ts-check

import { cnObject } from "./../infohub/cnObject.js"

"use strict";


/**
 *
 *  @category Tools
 *
 *  @classdesc Helper class for response of Api calls.
 * 
 *  @property {number} status           Status code like HTTP status codes
 *  @property {*} data                  Payload 
 *  @property {string|null} message     Human readable status (optional)
 *
 */
export class ApiResponse {

  #_statuscode = null;
  #_responsedata = null; 
  #_message = null;

  /**
   *
   * @param {*} status        
   * @param {*} responsedata  
   * @param {string|null} message  
   */
  constructor(status, responsedata, message = null) {
    this.#_statuscode = status;
    this.#_responsedata = responsedata;  
    this.#_message = message;    
  }

  /**
   *
   * @returns {number} Status Code
   */
  getStatus() {
    return this.#_statuscode;
  }

  /**
   *  Return 'status' as property 
   * 
   *  @example
   *  ...
   * 
   *  if ( obj.status < 300 ) {
   *    ...
   *  }
   * 
   *  @type {number}
   * 
   */
  get status() {
    return this.#_statuscode ?? 500 ;
  }

  /**
   *
   * @returns {object} Response as JSON object
   */
  getData() {
    return this.#_responsedata;
  }
  
  /**
   *    Return status a property
   */
  get data() {
    return this.#_responsedata;
  }

  /**
   *
   * @returns {string|null} uman readable status
   */
  getMessage() {
    return this.#_message ?? '';
  }

  /**
   *    
   *  Return 'message' as property.
   * 
   *  @see getMessage()
   * 
   */
  get message() {
    return this.#_message;
  }

  /**
   * 
   * Dump to console.log
   * 
   * @param {*} prefix 
   */
  dump( prefix = '' ) {
    
    let m = this.#_message || '';

    console.log(`${prefix}status  : ${this.#_statuscode}`);
    console.log(`${prefix}message : ${m}`);

    if (this.#_responsedata instanceof cnObject) {        
      
      console.log( `${prefix}data: [`)
      this.#_responsedata.dump();
      console.log( `] data`)

    } else {
        let d = JSON.stringify(this.#_responsedata, null, 2);
        console.log(`${prefix}data    : ${d}`);
    }

  }

}