eventric-store-tingodb
Version:
eventric TingoDB Store Adapter
135 lines (117 loc) • 4.21 kB
JavaScript
// 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);