UNPKG

sipp

Version:

An Opinionated, High-Productivity MVC Web Framework in TypeScript

52 lines 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelResolutionProvider = void 0; const http_1 = require("../http"); const framework_1 = require("../framework"); const db_1 = require("../db"); const async_store_1 = require("../utils/async-store"); const http_2 = require("../http"); const exceptions_1 = require("../exceptions"); class ModelResolutionProvider extends framework_1.ServiceProvider { register(register) { register([http_1.Controller, http_2.Middleware], db_1.Model, async (_, Type) => { const req = async_store_1.getStore().get("__REQ_KEY__"); const requestMethod = req.method; let model; switch (requestMethod.toLowerCase()) { case "get": case "patch": case "put": case "delete": const name = Type.modelName(); const id = (req.params[name] ? req.params[name] : null) || req.params['id']; if (!id) { throw new exceptions_1.BadRequestException(`${Type.name} has no valid parameters; tried params.${name} and params.id`); } model = await Type.load().findById(id); if (!model) { throw new exceptions_1.NotFoundException(`${name} could not be located with id ${id}`); } case "get": case "delete": break; case "post": model = new Type(); case "patch": case "put": case "post": const fillable = Type.fillable ? Type.fillable() : []; if (fillable.length) { Object.keys(req.body).forEach((key) => { if (fillable.includes(key)) { model[key] = req.body[key]; } }); } } return model; }); } } exports.ModelResolutionProvider = ModelResolutionProvider; //# sourceMappingURL=ModelResolutionProvider.js.map