sipp
Version:
An Opinionated, High-Productivity MVC Web Framework in TypeScript
52 lines • 2.22 kB
JavaScript
;
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