clannad
Version:
data storage service with RESTful APIs.
348 lines (272 loc) • 10.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
var _project = require('../models/project');
var _project2 = _interopRequireDefault(_project);
var _table = require('../models/table');
var _table2 = _interopRequireDefault(_table);
var _field = require('../models/field');
var _field2 = _interopRequireDefault(_field);
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 select = '-__v -project';
exports.default = {
add: function add(ctx) {
var _this = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
var name, projectName, project, table;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
name = ctx.req.body.name;
projectName = ctx.params.projectName;
_context.next = 4;
return _project2.default.findOne({ name: projectName });
case 4:
project = _context.sent;
if (project) {
_context.next = 7;
break;
}
throw new _resterror2.default(404, 'PROJECT_NOTFOUND_ERR', 'project ' + projectName + ' is not found');
case 7:
_context.next = 9;
return _table2.default.findOne({ project: project._id, name: name });
case 9:
table = _context.sent;
if (!table) {
_context.next = 12;
break;
}
throw new _resterror2.default(400, 'TABLE_EXIST_ERR', 'table ' + name + ' is existed in project ' + projectName);
case 12:
table = new _table2.default({ name: name, project: project._id });
if (!project.tables) project.tables = [];
project.tables.push(table._id);
_context.next = 17;
return table.save();
case 17:
_context.next = 19;
return project.save();
case 19:
ctx.body = { id: table._id };
case 20:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
}))();
},
del: function del(ctx) {
var _this2 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var _ctx$params, id, projectName, table;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_ctx$params = ctx.params;
id = _ctx$params.id;
projectName = _ctx$params.projectName;
_context2.next = 5;
return _table2.default.findById(id);
case 5:
table = _context2.sent;
if (table) {
_context2.next = 8;
break;
}
throw new _resterror2.default(404, 'TABLE_NOTFOUND_ERR', 'table is not found');
case 8:
_context2.next = 10;
return _mongoose2.default.connection.db.dropCollection(projectName + '.' + table.name).catch(function (err) {
if (err.message !== 'ns not found') throw err;
});
case 10:
_context2.next = 12;
return table.remove();
case 12:
_context2.next = 14;
return _project2.default.editField({ name: projectName }, 'tables', _mongoose2.default.Types.ObjectId(id));
case 14:
_context2.next = 16;
return _field2.default.remove({ table: table._id });
case 16:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this2);
}))();
},
edit: function edit(ctx) {
var _this3 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
var id, query, table, key;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
id = ctx.params.id;
query = (0, _tools.getQuery)(ctx.req.body, ['adminAuth', 'userAuth', 'visitorAuth', 'name']);
_context3.next = 4;
return _table2.default.findById(id);
case 4:
table = _context3.sent;
for (key in query) {
table[key] = query[key];
}_context3.next = 8;
return table.save();
case 8:
case 'end':
return _context3.stop();
}
}
}, _callee3, _this3);
}))();
},
list: function list(ctx) {
var _this4 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
var projectName, project, query;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
projectName = ctx.params.projectName;
_context4.next = 3;
return _project2.default.findOne({ name: projectName });
case 3:
project = _context4.sent;
if (project) {
_context4.next = 6;
break;
}
throw new _resterror2.default(404, 'PROJECT_NOTFOUND_ERR', 'project ' + projectName + ' is not found');
case 6:
query = (0, _extends3.default)({ project: project._id }, ctx.query);
_context4.next = 9;
return (0, _tools.getList)({
model: _table2.default,
select: select,
query: query
});
case 9:
ctx.body = _context4.sent;
case 10:
case 'end':
return _context4.stop();
}
}
}, _callee4, _this4);
}))();
},
count: function count(ctx) {
var _this5 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
var projectName, project, query, count;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
projectName = ctx.params.projectName;
_context5.next = 3;
return _project2.default.findOne({ name: projectName });
case 3:
project = _context5.sent;
if (project) {
_context5.next = 6;
break;
}
throw new _resterror2.default(404, 'PROJECT_NOTFOUND_ERR', 'project ' + projectName + ' is not found');
case 6:
query = (0, _extends3.default)({ project: project._id }, ctx.query);
_context5.next = 9;
return _table2.default.count(query);
case 9:
count = _context5.sent;
ctx.body = { count: count };
case 11:
case 'end':
return _context5.stop();
}
}
}, _callee5, _this5);
}))();
},
detail: function detail(ctx) {
var _this6 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {
var id, table;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
id = ctx.params.id;
_context6.next = 3;
return _table2.default.findById(id, select);
case 3:
table = _context6.sent;
if (table) {
_context6.next = 6;
break;
}
throw new _resterror2.default(404, 'TABLE_NOTFOUND_ERR', 'table is not found');
case 6:
ctx.body = table;
case 7:
case 'end':
return _context6.stop();
}
}
}, _callee6, _this6);
}))();
},
getModel: function getModel(ctx, next) {
var _this7 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() {
var _ctx$params2, projectName, tableName, cache;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_ctx$params2 = ctx.params;
projectName = _ctx$params2.projectName;
tableName = _ctx$params2.tableName;
_context7.next = 5;
return (0, _model.getCaches)(projectName);
case 5:
_context7.t0 = projectName + '.' + tableName;
cache = _context7.sent[_context7.t0];
if (cache) {
_context7.next = 9;
break;
}
throw new _resterror2.default(404, 'MODEL_NOTFOUND_ERR', 'model ' + projectName + '.' + tableName + ' is not found');
case 9:
ctx.req.model = cache;
return _context7.abrupt('return', next());
case 11:
case 'end':
return _context7.stop();
}
}
}, _callee7, _this7);
}))();
}
};
module.exports = exports['default'];