MicroHack-Registrations-RestAPI / src / utils / Errors.ts
Errors.ts
Raw
import { Request, Response } from "express";
import { InDev } from "../config/Env";
import { ExitCodes, HttpCodes } from "../config/Errors";

export function getErrorMessageByCode(code: number): string | undefined {
    for (const key in ExitCodes) {
        if (ExitCodes.hasOwnProperty(key) && ExitCodes[key as IExitCodes].code === code) {
            return ExitCodes[key as IExitCodes].message;
        }
    }
    return undefined; // Code not found in ExitCodes
}


/**
 * @description  this class is used to handle errors
 * @params {string} message - The message of the error
 * @params {number} statusCode - The status code of the error
 * @returns {AppError} - The error object
 * 
 * ```ts
 * throw new AppError("Error message", 500);
 * ```
 */
export class AppError extends Error {
    constructor(public message: string, public statusCode: number) {
        super(message);
        this.statusCode = statusCode;
        this.name = this.constructor.name;
        Error.captureStackTrace(this, this.constructor);
    }
}

/**
 * @description  this class is used to handle http errors
 * @params   {ICode} httpError - The http error object
 * @params   {string} cause - The cause of the error
 * @returns - {AppHttpError} - The error object
 * 
 * ```ts
 * throw new AppHttpError(HttpCodes.BadRequest, "Error message");
 * ```
 * 
 */
export class AppHttpError extends AppError {
    cause: string;
    constructor(public httpError: ICode, cause: string) {
        super(httpError.message, httpError.code);
        this.cause = cause;
        this.name = this.constructor.name;
        Error.captureStackTrace(this, this.constructor);
    }
}

/**
 * @description this middleware function is used to handle errors 
 * @param error {AppError} - The error object
 * @param req  {Request} - express request object
 * @param res  {Response} - express response object
 * @param next  {NextFunction} - express next function
 * @returns
 *  - {Response} - express response object
 * 
 * 
 * 
 * 
 */