UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

171 lines (170 loc) 9.15 kB
"use strict"; 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); }; };