ProductsService - Collect-Everything/wiki GitHub Wiki
Service de CRUD pour les entités produits et catégories
Produits
Admin Gateway
Dans la gateway administrateur, on vient dans le fichier src/lib/router.ts autoriser les appels depuis les routes /products et /categories sur la gateway
baseApiRouter.use("/products", productsRouter);
baseApiRouter.use("/categories", categoriesRouter);
On va venir ensuite définir les sous-routes dans les fichiers src/features/{entités}/{entités}.router.ts, en voici un exemple pour categories.router.ts
import { categoriesCtrl } from "./categories.controller";
import express from "express";
import { isLogged } from "@ce/server-core";
const categoriesRouter = express.Router();
categoriesRouter.get("/", [], categoriesCtrl.getListCategories);
categoriesRouter.get("/:id", [], categoriesCtrl.getOneCategory);
categoriesRouter.post("/", [isLogged], categoriesCtrl.createCategory);
categoriesRouter.patch("/:id", [isLogged], categoriesCtrl.updateCategory);
categoriesRouter.delete("/:id", [isLogged], categoriesCtrl.deleteCategory);
export { categoriesRouter };
Les méthodes sont ensuite définies dans le fichier src/features/{entités}/{entités}.controller.ts
import { GatewayController, ctrlWrapper, errorBuilder } from "@ce/server-core";
import { RequestHandler } from "express";
class CategoriesCtrl extends GatewayController {
constructor() {
super("categories", {
service: "PRODUCTS",
});
}
getListCategories: RequestHandler = (req, res) =>
ctrlWrapper(this.getIdentifier("getListCategories"), res, async () => {
const { data } = await this.fetcher.get("/categories");
return data;
});
getOneCategory: RequestHandler = (req, res) =>
ctrlWrapper(this.getIdentifier("getOneCategory"), res, async () => {
const { id } = req.params;
if (!id) {
throw errorBuilder.badRequest();
}
const { data } = await this.fetcher.get(`/categories/${id}`);
return data;
});
...
}
export const categoriesCtrl = new CategoriesCtrl();
Le controller permet de faire les appels vers le service de l'entité, dans notre cas, le productService.
Service
Les méthodes de CRUD sont gérées de manière générique dans le service, il faut néanmoins déclarer dans un dossier src/feature les fichiers :
{entités}.controller.ts{entités}.model.ts{entités}.router.ts{entités}.service.tsindex.tspour exporter tout le contenu du router
On pourra également ajouter des méthodes custom en créant des fonctions dans controller et router