UNPKG

clannad

Version:

data storage service with RESTful APIs.

254 lines (213 loc) 8.88 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _mongoose = require('mongoose'); var _resterror = require('./resterror'); var _resterror2 = _interopRequireDefault(_resterror); var _mongooseUniqueValidator = require('mongoose-unique-validator'); var _mongooseUniqueValidator2 = _interopRequireDefault(_mongooseUniqueValidator); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var parseJson = function parseJson(str) { return str ? JSON.parse(str) : str; }; var parseObjectId = function parseObjectId(obj) { switch (typeof obj === 'undefined' ? 'undefined' : (0, _typeof3.default)(obj)) { case 'string': try { return _mongoose.Types.ObjectId(obj); } catch (err) {}; break; case 'object': if (Array.isArray(obj)) { for (var index = 0; index < obj.length; index++) { obj[index] = parseObjectId(obj[index]); } return obj; } else { for (var key in obj) { obj[key] = parseObjectId(obj[key]); } return obj; } default: return obj; } }; var Tool = { dealSchema: function dealSchema(schema) { schema.plugin(_mongooseUniqueValidator2.default); schema.statics.findById = function (id, select) { return this.findOne({ _id: id }, select); }; schema.statics.updateById = function (id, fields) { return this.update({ _id: id }, fields); }; schema.statics.removeById = function (id) { return this.remove({ _id: id }); }; schema.statics.editField = function () { var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(select, name, value) { var _this = this; var ispush = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; var resolve, reject, prom, check; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this._fields) this._fields = { deal: [], pullArr: [] }; prom = new _promise2.default(function (res, rej) { resolve = res; reject = rej; }); this._fields.deal.push({ resolve: resolve, reject: reject }); this._fields.pullArr.push(value); check = function () { var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { var deal, pullArr, updateObj; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: deal = _this._fields.deal.splice(0, _this._fields.deal.length); pullArr = _this._fields.pullArr.splice(0, _this._fields.pullArr.length); updateObj = ispush ? { $pushAll: (0, _defineProperty3.default)({}, name, pullArr) } : { $pull: (0, _defineProperty3.default)({}, name, { $in: pullArr }) }; _context.prev = 3; _context.next = 6; return _this.update(select, updateObj, { multi: true }); case 6: deal.forEach(function (deal) { return deal.resolve(); }); _context.next = 12; break; case 9: _context.prev = 9; _context.t0 = _context['catch'](3); deal.forEach(function (deal) { return deal.reject(_context.t0); }); case 12: if (!_this._fields.deal.length) { _context.next = 17; break; } _context.next = 15; return check(); case 15: _context.next = 18; break; case 17: _this._fields.locked = false; case 18: case 'end': return _context.stop(); } } }, _callee, _this, [[3, 9]]); })); return function check() { return ref.apply(this, arguments); }; }(); if (this._fields.locked) { _context2.next = 9; break; } this._fields.locked = true; _context2.next = 9; return check(); case 9: return _context2.abrupt('return', prom); case 10: case 'end': return _context2.stop(); } } }, _callee2, this); })); return function (_x, _x2, _x3, _x4) { return ref.apply(this, arguments); }; }(); }, getQuery: function getQuery(params, fields) { var query = {}; fields.forEach(function (item) { if (params[item] !== undefined) query[item] = params[item]; }); return query; }, getList: function getList(_ref) { var model = _ref.model; var query = _ref.query; var _ref$select = _ref.select; var select = _ref$select === undefined ? '' : _ref$select; var limit = query.limit; var offset = query.offset; var asc = query.asc; var populateStr = query.populate; var sort = query.sort; var paramsStr = query.params; var params = (0, _objectWithoutProperties3.default)(query, ['limit', 'offset', 'asc', 'populate', 'sort', 'params']); var populate = parseJson(populateStr); // 处理从系统内部与外界传来的参数 params = (0, _extends3.default)({}, parseJson(paramsStr) || {}, params); return model.find(params, select).populate(populate || '').limit(parseInt(limit) || 30).skip(parseInt(offset) || 0).sort('' + (asc ? '' : '-') + (sort || 'createdAt')); }, getAggregate: function getAggregate(_ref2) { var model = _ref2.model; var query = _ref2.query; var groupStr = _ref2.group; var sortStr = _ref2.sort; var _ref2$select = _ref2.select; var select = _ref2$select === undefined ? '' : _ref2$select; var paramsStr = query.params; var params = (0, _objectWithoutProperties3.default)(query, ['params']); var $match = (0, _extends3.default)({}, parseJson(paramsStr) || {}, params); parseObjectId($match); var $group = JSON.parse(groupStr); select.trim().split(' ').forEach(function (item) { if ($group._id && $group._id.indexOf(item.replace('-', '')) !== -1) { throw new _resterror2.default(403, 'AUTH_ERR', 'no permission for aggregate group'); } }); var exp = [{ $match: $match }, { $group: $group }, { $sort: sortStr ? JSON.parse(sortStr) : { _id: 1 } }]; return model.aggregate(exp); }, parseArr: function parseArr(str) { return str.split('\'').filter(function (item) { return item.length > 3; }); }, parseNull: function parseNull(params) { for (var key in params) { var param = params[key]; if (param === '') params[key] = null; try { params[key] = JSON.parse(param); } catch (err) { params[key] = param; } } return params; } }; exports.default = Tool; module.exports = exports['default'];