mission.core
Version:
mission core
54 lines (53 loc) • 2.54 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const bo_registry_decorator_1 = require("../database/bo-registry.decorator");
const util_1 = require("./util");
class FacadeBusiness {
static getData(req, res, next) {
return __awaiter(this, void 0, void 0, function* () {
const reqs = req.body;
const collection = yield Promise.all(reqs.map((fReq) => __awaiter(this, void 0, void 0, function* () {
const route = FacadeBusiness.parseRoute(fReq.route);
const func = bo_registry_decorator_1.BoRegistry[route.BoName];
if (typeof func === 'undefined') {
throw new Error(route.BoName + ' not register in BoRegistry');
}
const bo = func();
return yield FacadeBusiness.invoke(bo, route, fReq);
})));
return util_1.Util.arrayOfObjectToObject(collection);
});
}
static invoke(bo, route, fReq) {
return __awaiter(this, void 0, void 0, function* () {
let res;
let error;
const api = bo[route.MethodName];
if (typeof api === 'undefined') {
error = new Error(route.MethodName + ' is not available in ' + route.BoName);
}
if (!error) {
res = yield api.bind(bo)(fReq.request)
.catch((err) => error = err);
}
return { [fReq.key]: util_1.Util.getResponse(res, fReq.request.pageContext, error) };
});
}
static parseRoute(route) {
const r = route.split('/');
if (r.length < 2 || r.length > 2) {
throw new Error('Request contains improper route');
}
return { BoName: r[0], MethodName: r[1] };
}
}
exports.FacadeBusiness = FacadeBusiness;