maggie-api
Version:
🧙♀️ A magical Express middleware to auto-generate CRUD APIs for Mongoose models with validation, unique keys, and middlewares.
33 lines (32 loc) • 1.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const controllers_1 = require("../controllers");
const validateBody_1 = require("../utils/validateBody");
const joi_1 = __importDefault(require("joi"));
const createMaggie = ({ prefix, models }) => {
const router = (0, express_1.Router)();
models.forEach(({ model, path, validationSchema, primaryKey, middleWares = [], getKeys = [], getByIdKeys = [], }) => {
const settings = { getByIdKeys, getKeys, primaryKey };
const controller = (0, controllers_1.createController)(model, settings);
const subRouter = (0, express_1.Router)();
const middlewareStack = [...middleWares];
const bulkMiddlewareStack = [...middleWares];
if (validationSchema) {
middlewareStack.push((0, validateBody_1.validateBody)(validationSchema));
const bulkValidationSchema = joi_1.default.array().items(validationSchema);
bulkMiddlewareStack.push((0, validateBody_1.validateBody)(bulkValidationSchema));
}
subRouter.post("/", ...middlewareStack, controller.addOrUpdate);
subRouter.post("/bulk", ...bulkMiddlewareStack, controller.insertMany);
subRouter.delete("/:id", ...middleWares, controller.remove);
subRouter.get("/", ...middleWares, controller.getAll);
subRouter.get("/:id", ...middleWares, controller.getById);
router.use(`${prefix}/${path}`, subRouter);
});
return router;
};
exports.default = createMaggie;