UNPKG

maggie-api

Version:

🧙‍♀️ A magical Express middleware to auto-generate CRUD APIs for Mongoose models with validation, unique keys, and middlewares.

79 lines (78 loc) 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMaggie = exports.categoryValidationSchema = exports.productValidationSchema = void 0; const express_1 = __importDefault(require("express")); const routes_1 = __importDefault(require("./routes")); const department_1 = __importDefault(require("./models/department")); const User_1 = __importDefault(require("./models/User")); const mongoose_1 = __importDefault(require("mongoose")); const models_1 = __importDefault(require("./models")); const joi_1 = __importDefault(require("joi")); const app = (0, express_1.default)(); // MongoDB Connection mongoose_1.default .connect("mongodb://127.0.0.1:27017/maggie_test") .then(() => console.log("✅ MongoDB Connected")) .catch((err) => console.error("❌ MongoDB Error:", err)); app.use(express_1.default.json()); exports.productValidationSchema = joi_1.default.object({ title: joi_1.default.string().required(), description: joi_1.default.string().required(), category: joi_1.default.string().required(), price: joi_1.default.number().positive().required(), discountPercentage: joi_1.default.number().min(0).max(100).required(), rating: joi_1.default.number().min(0).max(5).required(), stock: joi_1.default.number().integer().min(0).required(), }); exports.categoryValidationSchema = joi_1.default.object({ title: joi_1.default.string().default("Default it working"), }); const apiRouter = (0, routes_1.default)({ models: [ { model: User_1.default, path: "user", settings: { get: { populate: [{ path: "department" }] }, getById: { populate: [{ path: "department", select: ["id"] }] }, }, }, { model: department_1.default, path: "department" }, { model: models_1.default.Category, path: "category", primaryKey: "title", validationSchema: exports.categoryValidationSchema, }, { model: models_1.default.SubCategory, path: "subcategory" }, { model: models_1.default.Product, path: "product", validationSchema: exports.productValidationSchema, settings: { get: { keys: ["title", "price", "description"], //filter: { title: "Powder Canister" }, // sort: { title: "ASC", description: "DESC" }, filter: { allowedFields: ["price", "title"] }, search: { disabled: false, allowedFields: ["title"] }, }, getById: { keys: ["_id", "title"] }, }, // settings: { // getById: { // populate: [{ path: "subCategory", populate: [{ path: "category" }] }], // }, // }, }, { model: models_1.default.Item, path: "item" }, ], prefix: "/api/v1", }); app.use(apiRouter); app.listen(5000, () => console.log(`listening on PORT ${5000}`)); var routes_2 = require("./routes"); Object.defineProperty(exports, "createMaggie", { enumerable: true, get: function () { return __importDefault(routes_2).default; } });