import { StRoute } from "./StRoute"; import { Response } from "express"; import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; type IResponseData = {} | string | number | boolean | null | unknown; export default abstract class BaseController { public expressRoutes!: StRoute[]; public httpCode: typeof HttpCodes = HttpCodes; protected httpSuccess(response: Response, responseData: IResponseData = null) { return this.httpResponse(response, HttpCodes.SUCCESS, responseData); } protected httpCreated(response: Response, responseData: IResponseData = null) { return this.httpResponse(response, HttpCodes.CREATED, responseData); } protected httpBadRequest(response: Response, responseData: IResponseData = "Http Bad Request") { return this.httpResponse(response, HttpCodes.BAD_REQUEST, responseData); } protected httpTooEarlyRequest(response: Response, responseData: IResponseData = "Http Too Early Request") { return this.httpResponse(response, HttpCodes.TOO_EARLY, responseData); } protected httpValidationError(response: Response, responseData: IResponseData = "Http Validation Error") { return this.httpResponse(response, HttpCodes.VALIDATION_ERROR, responseData); } protected httpNotFoundRequest(response: Response, responseData: IResponseData = "Not Found") { return this.httpResponse(response, HttpCodes.NOT_FOUND, responseData); } protected httpInternalError(response: Response, responseData: IResponseData = "http Internal Server Error") { return this.httpResponse(response, HttpCodes.INTERNAL_ERROR, responseData); } protected httpUnauthorized(response: Response, responseData: IResponseData = "http Unauthorized Request") { return this.httpResponse(response, HttpCodes.UNAUTHORIZED, responseData); } protected httpNotImplemented(response: Response, responseData: IResponseData = "Not implemented") { return this.httpResponse(response, HttpCodes.NOT_IMPLEMENTED, responseData); } protected httpForbidden(response: Response, responseData: IResponseData = "Forbidden") { return this.httpResponse(response, HttpCodes.FORBIDDEN, responseData); } protected httpNotWhitelisted(response: Response, responseData: IResponseData = "Not whitelisted") { return this.httpResponse(response, HttpCodes.VALIDATION_ERROR, responseData); } protected httpResponse(response: Response, httpCode: HttpCodes, responseData: IResponseData = {}) { if (responseData instanceof Error) { throw responseData; } return response.status(httpCode).send(responseData); } }