UNPKG

eventric-store-tingodb

Version:
135 lines (117 loc) 4.21 kB
// Generated by CoffeeScript 1.7.1 (function() { var TingoDB, TingoDBStore, __slice = [].slice; TingoDB = require('tingodb')().Db; TingoDBStore = (function() { function TingoDBStore() {} TingoDBStore.prototype._optionDefaults = { path: '.tingodb/eventric', options: {} }; TingoDBStore.prototype.initialize = function() { var callback, options, _arg, _contextName, _i; _contextName = arguments[0], _arg = 3 <= arguments.length ? __slice.call(arguments, 1, _i = arguments.length - 1) : (_i = 1, []), callback = arguments[_i++]; this._contextName = _contextName; options = _arg[0]; if (callback == null) { callback = function() {}; } this._defaults((options != null ? options : options = {}), this._optionDefaults); this._domainEventsCollectionName = "" + this._contextName + ".DomainEvents"; this._projectionCollectionName = "" + this._contextName + ".Projection"; if (options.dbInstance) { this.db = options.dbInstance; callback(null); return; } this.db = new TingoDB(options.path, options.options); return callback(null); }; TingoDBStore.prototype._defaults = function(options, optionDefaults) { var allKeys, key, _i, _len, _results; allKeys = [].concat(Object.keys(options), Object.keys(optionDefaults)); _results = []; for (_i = 0, _len = allKeys.length; _i < _len; _i++) { key = allKeys[_i]; if (!options[key] && optionDefaults[key]) { _results.push(options[key] = optionDefaults[key]); } } return _results; }; TingoDBStore.prototype.saveDomainEvent = function(domainEvent, callback) { return this.db.collection(this._domainEventsCollectionName, function(err, collection) { if (err) { return callback(err, null); } return collection.insert(domainEvent, callback); }); }; TingoDBStore.prototype.findAllDomainEvents = function(callback) { var query; query = {}; return this._find(query, callback); }; TingoDBStore.prototype.findDomainEventsByName = function(names, callback) { var query; if (!(names instanceof Array)) { names = [names]; } query = { 'name': { $in: names } }; return this._find(query, callback); }; TingoDBStore.prototype.findDomainEventsByAggregateId = function(aggregateIds, callback) { var query; if (!(aggregateIds instanceof Array)) { aggregateIds = [aggregateIds]; } query = { 'aggregate.id': { $in: aggregateIds } }; return this._find(query, callback); }; TingoDBStore.prototype.findDomainEventsByAggregateName = function(aggregateNames, callback) { var query; if (!(aggregateNames instanceof Array)) { aggregateNames = [aggregateNames]; } query = { 'aggregate.name': { $in: aggregateNames } }; return this._find(query, callback); }; TingoDBStore.prototype._find = function(query, callback) { return this.db.collection(this._domainEventsCollectionName, function(err, collection) { return collection.find(query, function(err, cursor) { if (err) { return callback(err, null); } return cursor.toArray(callback); }); }); }; TingoDBStore.prototype.getProjectionStore = function(projectionName, callback) { return this.db.collection("" + this._projectionCollectionName + "." + projectionName, callback); }; TingoDBStore.prototype.clearProjectionStore = function(projectionName, callback) { return this.db.collection("" + this._projectionCollectionName + "." + projectionName, (function(_this) { return function(err, projection) { return projection.remove(function() { return _this.db.dropCollection("" + _this._projectionCollectionName + "." + projectionName, callback); }); }; })(this)); }; return TingoDBStore; })(); module.exports = TingoDBStore; }).call(this);