import { HttpResponseBuilder } from './HttpResponseBuilder'; import { HttpStatusCode } from './HttpStatusCode'; import { Route } from './RouteBuilder'; abstract class BaseController { protected _basePath: string; protected _routes: Route[]; constructor() { this._basePath = ''; this._routes = []; this.setupRoutes(); this.setBasePath(); } public ok(data?: any) { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.OK) .setBody(data) .build(); } public Json(data: any) { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.OK) .setJsonBody(data) .build(); } public created(sourceId: string) { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.CREATED) .setSourceLocation(sourceId) .build(); } public noContent() { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.NO_CONTENT) .build(); } public unauthorized(message: Error | string = 'Unauthorized') { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.UNAUTHORIZED) .setError(message) .build(); } public notFound(message: Error | string = 'Not Found') { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.NOT_FOUND) .setError(message) .build(); } public forbidden(message: Error | string = 'Forbidden') { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.FORBIDDEN) .setError(message) .build(); } public internalServerError(error: Error | string = 'Internal Server Error') { return new HttpResponseBuilder() .setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR) .setError(error) .build(); } protected setBasePath() { this._basePath = this.constructor.name .replace('Controller', 's') .toLowerCase(); } protected abstract setupRoutes(): void; get baseRoute() { return this._basePath; } get routes() { return this._routes; } } export { BaseController };