UNPKG

clannad

Version:

data storage service with RESTful APIs.

348 lines (272 loc) 10.3 kB
'use strict'; 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'];