js-abstract-synchronizer
Version:
abstract synchronizer for backend and frontend
73 lines (55 loc) • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _NotFoundError = require('js-abstract-synchronizer/errors/NotFoundError');
var _NotFoundError2 = _interopRequireDefault(_NotFoundError);
var _arangodbErrorCodes = require('arangodb-error-codes');
var _arangodbErrorCodes2 = _interopRequireDefault(_arangodbErrorCodes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var privates = Symbol('privates');
var handleDuplicateName = function handleDuplicateName(error) {
return error.errorNum === _arangodbErrorCodes2.default.ERROR_ARANGO_DUPLICATE_NAME ? Promise.resolve() : Promise.reject(error);
};
var ArangoSerializer = function () {
function ArangoSerializer(_ref) {
var db = _ref.db;
_classCallCheck(this, ArangoSerializer);
this[privates] = {
collection: db.collection('all'),
db: db
};
}
_createClass(ArangoSerializer, [{
key: 'configure',
value: function configure(dbName) {
var _this = this;
var db = this[privates].db;
db.useDatabase('_system');
return db.createDatabase(dbName).catch(handleDuplicateName).then(function () {
return db.useDatabase(dbName);
}).then(function () {
return _this[privates].collection.create();
}).catch(handleDuplicateName);
}
}, {
key: 'save',
value: function save(object) {
var _this2 = this;
return this[privates].collection.replaceByExample({ id: object.id }, object).then(function (result) {
return result.replaced === 0 ? _this2[privates].collection.save(object) : null;
});
}
}, {
key: 'reload',
value: function reload(id) {
return this[privates].collection.firstExample({ id: id }).catch(function (error) {
return Promise.reject(error.errorNum === _arangodbErrorCodes2.default.ERROR_HTTP_NOT_FOUND ? new _NotFoundError2.default() : error);
});
}
}]);
return ArangoSerializer;
}();
exports.default = ArangoSerializer;