import { Request, Response, Router } from "express"; import PostController from "../../../controllers/api/posts-controller"; export default class ApiRouter { private static _instance: Router; private constructor() { return this; } private static initRoutes() { this._instance.get("/status", (req: Request, res: Response) => { res.json("OK").status(200); }); const postController = new PostController(); this._instance.get("/posts", async (req: Request, res: Response) => { postController.petition = this.buildPetition(req, res); const response = await postController.index(); return res.status(response.statusCode).json(response); }); this._instance.post("/posts", async (req: Request, res: Response) => { postController.petition = this.buildPetition(req, res); const response = await postController.store(); return res.status(response.statusCode).json(response); }); this._instance.get("/posts/:id", async (req: Request, res: Response) => { postController.petition = this.buildPetition(req, res); const response = await postController.show(); return res.status(response.statusCode).json(response); }); this._instance.put("/posts/:id", async (req: Request, res: Response) => { postController.petition = this.buildPetition(req, res); const response = await postController.update(); return res.status(response.statusCode).json(response); }); this._instance.delete("/posts/:id", async (req: Request, res: Response) => { postController.petition = this.buildPetition(req, res); const response = await postController.destroy(); return res.status(response.statusCode).json(response); }); } private static buildPetition(req: Request, res: Response) { return { request: { ...req, payload: req.body }, response: { ...res, status: "OK" } }; } public static get instance(): Router { if (!this._instance) { this._instance = Router(); this.initRoutes(); } return this._instance; } }