forest-express
Version:
Official package for all Forest Express Lianas
171 lines (170 loc) • 9.15 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var _require = require('@forestadmin/context'),
inject = _require.inject;
var auth = require('../services/auth');
var path = require('../services/path');
var ResourceSerializer = require('../serializers/resource');
var ResourceDeserializer = require('../deserializers/resource');
var CSVExporter = require('../services/csv-exporter');
var ParamsFieldsDeserializer = require('../deserializers/params-fields');
var PermissionMiddlewareCreator = require('../middlewares/permissions');
var RecordsGetter = require('../services/exposed/records-getter');
module.exports = function Resources(app, model) {
var _this = this;
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : inject(),
configStore = _ref.configStore;
var Implementation = configStore.Implementation,
integrator = configStore.integrator,
lianaOptions = configStore.lianaOptions;
var modelName = Implementation.getModelName(model);
this.list = function (request, response, next) {
var params = request.query;
var fieldsPerModel = new ParamsFieldsDeserializer(params.fields).perform();
return new Implementation.ResourcesGetter(model, lianaOptions, params, request.user).perform().then(function (results) {
var records = results[0];
var fieldsSearched = results[1];
return new ResourceSerializer(Implementation, model, records, integrator, null, fieldsSearched, params.search, fieldsPerModel).perform();
}).then(function (records) {
response.send(records);
})["catch"](next);
};
this.count = function (request, response, next) {
var params = request.query;
return new Implementation.ResourcesGetter(model, lianaOptions, params, request.user).count().then(function (count) {
return response.send({
count: count
});
})["catch"](next);
};
this.exportCSV = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(request, response, next) {
var params, recordsExporter;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
params = request.query;
recordsExporter = new Implementation.ResourcesExporter(model, lianaOptions, params, null, request.user);
return _context.abrupt("return", new CSVExporter(params, response, modelName, recordsExporter).perform()["catch"](next));
case 3:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x, _x2, _x3) {
return _ref2.apply(this, arguments);
};
}();
this.get = function (request, response, next) {
return new Implementation.ResourceGetter(model, _objectSpread(_objectSpread({}, request.query), {}, {
recordId: request.params.recordId
}), request.user).perform().then(function (record) {
return new ResourceSerializer(Implementation, model, record, integrator).perform();
}).then(function (record) {
response.send(record);
})["catch"](next);
};
this.create = function (request, response, next) {
new ResourceDeserializer(Implementation, model, request.body, true, {
omitNullAttributes: true
}).perform().then(function (body) {
return new Implementation.ResourceCreator(model, request.query, body, request.user).perform();
}).then(function (record) {
return new ResourceSerializer(Implementation, model, record, integrator).perform();
}).then(function (record) {
response.send(record);
})["catch"](next);
};
this.update = function (request, response, next) {
var params = _objectSpread({
timezone: request.query.timezone
}, request.params);
return new ResourceDeserializer(Implementation, model, request.body, false).perform().then(function (record) {
new Implementation.ResourceUpdater(model, params, record, request.user).perform().then(function (updatedRecord) {
return new ResourceSerializer(Implementation, model, updatedRecord, integrator).perform();
}).then(function (updatedRecord) {
response.send(updatedRecord);
return updatedRecord;
})["catch"](next);
});
};
this.remove = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(request, response, next) {
var remover;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
remover = new Implementation.ResourceRemover(model, _objectSpread(_objectSpread({}, request.query), {}, {
recordId: request.params.recordId
}), request.user);
_context2.prev = 1;
_context2.next = 4;
return remover.perform();
case 4:
response.status(204).send();
_context2.next = 10;
break;
case 7:
_context2.prev = 7;
_context2.t0 = _context2["catch"](1);
next(_context2.t0);
case 10:
case "end":
return _context2.stop();
}
}, _callee2, null, [[1, 7]]);
}));
return function (_x4, _x5, _x6) {
return _ref3.apply(this, arguments);
};
}();
this.removeMany = /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(request, response, next) {
var getter, ids;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
getter = new RecordsGetter(model, request.user, request.query);
_context3.next = 3;
return getter.getIdsFromRequest(request);
case 3:
ids = _context3.sent;
_context3.prev = 4;
_context3.next = 7;
return new Implementation.ResourcesRemover(model, request.query, ids, request.user).perform();
case 7:
response.status(204).send();
_context3.next = 13;
break;
case 10:
_context3.prev = 10;
_context3.t0 = _context3["catch"](4);
next(_context3.t0);
case 13:
case "end":
return _context3.stop();
}
}, _callee3, null, [[4, 10]]);
}));
return function (_x7, _x8, _x9) {
return _ref4.apply(this, arguments);
};
}();
var permissionMiddlewareCreator = new PermissionMiddlewareCreator(modelName);
this.perform = function () {
app.get("".concat(path.generate(modelName, lianaOptions), ".csv"), auth.ensureAuthenticated, permissionMiddlewareCreator["export"](), _this.exportCSV);
app.get(path.generate(modelName, lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator.list(), _this.list);
app.get(path.generate("".concat(modelName, "/count"), lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator.list(), _this.count);
app.get(path.generate("".concat(modelName, "/:recordId"), lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator.details(), _this.get);
app.post(path.generate(modelName, lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator.create(), _this.create);
app.put(path.generate("".concat(modelName, "/:recordId"), lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator.update(), _this.update);
app["delete"](path.generate("".concat(modelName, "/:recordId"), lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator["delete"](), _this.remove);
app["delete"](path.generate(modelName, lianaOptions), auth.ensureAuthenticated, permissionMiddlewareCreator["delete"](), _this.removeMany);
};
};