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.ts
  • index.ts pour exporter tout le contenu du router

On pourra également ajouter des méthodes custom en créant des fonctions dans controller et router