clannad
Version:
data storage service with RESTful APIs.
288 lines (240 loc) • 9.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _resterror = require('../services/resterror');
var _resterror2 = _interopRequireDefault(_resterror);
var _tools = require('../services/tools');
var _model = require('../services/model');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getSelectStr = function getSelectStr(name, auth, selectArr) {
if (selectArr) selectArr = JSON.parse(selectArr);
var select = [];
var shows = (0, _model.getShows)(name);
if (!auth) throw new _resterror2.default(404, 'AUTH_NOTFOUND_ERR', 'auth is not found');
if (!shows) throw new _resterror2.default(404, 'SHOWS_NOTFOUND_ERR', 'shows ' + shows + ' is not found');
for (var _name in shows) {
if (selectArr && selectArr.indexOf(_name) === -1) select.push('-' + _name);else if (!shows[_name][auth]) select.push('-' + _name);
}
select = select.join(' ');
return select + ' -__v';
};
exports.default = {
add: function add(ctx) {
var _this = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
var _ctx$req, Model, data, models, model;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_ctx$req = ctx.req;
Model = _ctx$req.model;
data = _ctx$req.body;
if (!Array.isArray(data)) {
_context.next = 13;
break;
}
if (data.length) {
_context.next = 6;
break;
}
throw new _resterror2.default(400, 'SOURCE_EMPTY_ERR', 'source array is empty');
case 6:
data = data.map(function (item) {
return (0, _tools.parseNull)(item);
});
_context.next = 9;
return Model.insertMany(data);
case 9:
models = _context.sent;
ctx.body = models.map(function (model) {
return { id: model._id };
});
_context.next = 17;
break;
case 13:
model = new Model((0, _tools.parseNull)(data));
_context.next = 16;
return model.save();
case 16:
ctx.body = { id: model._id };
case 17:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
}))();
},
del: function del(ctx) {
var _this2 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var Model, params;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
Model = ctx.req.model;
params = ctx.query.params;
_context2.next = 4;
return Model.remove(params ? JSON.parse(params) : {});
case 4:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this2);
}))();
},
edit: function edit(ctx) {
var _this3 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
var _ctx$req2, Model, data, params;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_ctx$req2 = ctx.req;
Model = _ctx$req2.model;
data = _ctx$req2.body;
params = ctx.query.params;
_context3.next = 6;
return Model.update(params ? JSON.parse(params) : {}, (0, _tools.parseNull)(data), { multi: true });
case 6:
case 'end':
return _context3.stop();
}
}
}, _callee3, _this3);
}))();
},
list: function list(ctx) {
var _this4 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
var Model, _ctx$query, select, query, _ctx$params, projectName, tableName;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
Model = ctx.req.model;
_ctx$query = ctx.query;
select = _ctx$query.select;
query = (0, _objectWithoutProperties3.default)(_ctx$query, ['select']);
_ctx$params = ctx.params;
projectName = _ctx$params.projectName;
tableName = _ctx$params.tableName;
select = getSelectStr(projectName + '.' + tableName, ctx.req.auth, select);
_context4.next = 10;
return (0, _tools.getList)({
model: Model,
select: select,
query: query
});
case 10:
ctx.body = _context4.sent;
case 11:
case 'end':
return _context4.stop();
}
}
}, _callee4, _this4);
}))();
},
count: function count(ctx) {
var _this5 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
var Model, params, count;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
Model = ctx.req.model;
params = ctx.query.params;
_context5.next = 4;
return Model.count(params ? JSON.parse(params) : ctx.query);
case 4:
count = _context5.sent;
ctx.body = { count: count };
case 6:
case 'end':
return _context5.stop();
}
}
}, _callee5, _this5);
}))();
},
detail: function detail(ctx) {
var _this6 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
var Model, _ctx$params2, projectName, tableName, _ctx$query2, params, select, populate, source;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
Model = ctx.req.model;
_ctx$params2 = ctx.params;
projectName = _ctx$params2.projectName;
tableName = _ctx$params2.tableName;
_ctx$query2 = ctx.query;
params = _ctx$query2.params;
select = _ctx$query2.select;
populate = _ctx$query2.populate;
select = getSelectStr(projectName + '.' + tableName, ctx.req.auth, select);
_context6.next = 11;
return Model.findOne(params ? JSON.parse(params) : {}, select).populate(populate ? JSON.parse(populate) : '');
case 11:
source = _context6.sent;
// if (!source) throw new RestError(404, 'SOURCE_NOTFOUND_ERR', 'source is not found');
ctx.body = source;
case 13:
case 'end':
return _context6.stop();
}
}
}, _callee6, _this6);
}))();
},
aggregate: function aggregate(ctx) {
var _this7 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() {
var Model, _ctx$query3, group, sort, query, _ctx$params3, projectName, tableName, select;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
Model = ctx.req.model;
_ctx$query3 = ctx.query;
group = _ctx$query3.group;
sort = _ctx$query3.sort;
query = (0, _objectWithoutProperties3.default)(_ctx$query3, ['group', 'sort']);
_ctx$params3 = ctx.params;
projectName = _ctx$params3.projectName;
tableName = _ctx$params3.tableName;
select = getSelectStr(projectName + '.' + tableName, ctx.req.auth, select);
_context7.next = 11;
return (0, _tools.getAggregate)({
model: Model,
select: select,
group: group,
sort: sort,
query: query
});
case 11:
ctx.body = _context7.sent;
case 12:
case 'end':
return _context7.stop();
}
}
}, _callee7, _this7);
}))();
}
};
module.exports = exports['default'];