import {BaseRequestPayload, BaseResponsePayload, Request, Response} from './AbstractCall'; import {Logger} from "../Logger"; /** * class to handle data from routes */ export abstract class Handler{ /** * handles a Request * @param {Request} data * @param {Logger} logger * @returns {Promise>} */ async handle(data: Request, logger : Logger) : Promise>{ const response : Response = { id : data.id, successful : false }; try { response.payload = await this.getResult(data); response.successful = true; } catch (e) { response.successful = false; response.error = {message : e.toString()}; logger.error(data.id, "[ <--- | " + this.getHandlerName() + " ]", {request : data, response: response} ); } finally { logger.request(data, response,this.getHandlerName()); logger.debug(data.id, "[ <--- | " + this.getHandlerName() + " ]", {request : data, response: response} ); } return response; } /** * Handler Name determines route Name * @returns {String} */ abstract getHandlerName() : String /** * Method to * @param {Request} data * @returns {Promise} */ protected abstract async getResult(data: Request) : Promise }