2016-09-11 16:01:46 +00:00
|
|
|
"use strict";
|
2016-11-17 11:20:52 +00:00
|
|
|
const plugins = require("./smartdata.plugins");
|
2016-09-13 23:02:11 +00:00
|
|
|
function Collection(db) {
|
|
|
|
return function (constructor) {
|
|
|
|
constructor['dbCollection'] = new DbCollection(constructor.name, db);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
exports.Collection = Collection;
|
2016-09-11 16:01:46 +00:00
|
|
|
class DbCollection {
|
2016-09-12 21:50:25 +00:00
|
|
|
constructor(nameArg, dbArg) {
|
2016-11-17 21:36:12 +00:00
|
|
|
this.objectValidation = null;
|
2016-09-13 20:53:21 +00:00
|
|
|
this.name = nameArg;
|
2016-11-17 21:36:12 +00:00
|
|
|
this.db = dbArg;
|
|
|
|
if (this.db.dbType === 'mongodb') {
|
|
|
|
this.collection = dbArg.db.collection(nameArg);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.collection = new plugins.nedb();
|
|
|
|
}
|
2016-09-11 16:01:46 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* adds a validation function that all newly inserted and updated objects have to pass
|
|
|
|
*/
|
2016-11-17 21:36:12 +00:00
|
|
|
addDocValidation(funcArg) {
|
|
|
|
this.objectValidation = funcArg;
|
|
|
|
}
|
2016-09-11 16:01:46 +00:00
|
|
|
/**
|
2016-09-12 15:31:23 +00:00
|
|
|
* finds an object in the DbCollection
|
2016-09-11 16:01:46 +00:00
|
|
|
*/
|
2016-09-13 20:53:21 +00:00
|
|
|
find(docMatchArg, optionsArg) {
|
2016-09-12 16:14:01 +00:00
|
|
|
let done = plugins.q.defer();
|
2016-11-17 21:36:12 +00:00
|
|
|
if (this.db.dbType === 'mongodb') {
|
|
|
|
let findCursor = this.collection.find(docMatchArg);
|
|
|
|
if (optionsArg) {
|
|
|
|
if (optionsArg.limit) {
|
|
|
|
findCursor = findCursor.limit(1);
|
|
|
|
}
|
2016-09-13 20:53:21 +00:00
|
|
|
}
|
2016-11-17 21:36:12 +00:00
|
|
|
findCursor.toArray((err, docs) => {
|
|
|
|
if (err) {
|
|
|
|
done.reject(err);
|
|
|
|
throw err;
|
|
|
|
}
|
|
|
|
done.resolve(docs);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else if (this.db.dbType === 'nedb') {
|
|
|
|
this.collection.find(docMatchArg, (err, docs) => {
|
|
|
|
if (err) {
|
|
|
|
done.reject(err);
|
|
|
|
throw err;
|
|
|
|
}
|
|
|
|
done.resolve(docs);
|
|
|
|
});
|
2016-09-13 20:53:21 +00:00
|
|
|
}
|
2016-09-12 16:14:01 +00:00
|
|
|
return done.promise;
|
2016-09-12 15:31:23 +00:00
|
|
|
}
|
|
|
|
/**
|
2016-11-17 21:36:12 +00:00
|
|
|
* inserts object into the DbCollection
|
2016-09-12 15:31:23 +00:00
|
|
|
*/
|
|
|
|
insertOne(docArg) {
|
2016-09-12 16:14:01 +00:00
|
|
|
let done = plugins.q.defer();
|
|
|
|
this.checkDoc(docArg).then(() => {
|
2016-11-17 21:36:12 +00:00
|
|
|
if (this.db.dbType === 'mongodb') {
|
|
|
|
this.collection.insertOne(docArg)
|
|
|
|
.then(() => { done.resolve(); });
|
|
|
|
}
|
|
|
|
else if (this.db.dbType === 'nedb') {
|
|
|
|
this.collection.insert(docArg, (err, newDoc) => {
|
|
|
|
if (err) {
|
|
|
|
done.reject(err);
|
|
|
|
throw err;
|
|
|
|
}
|
|
|
|
done.resolve();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}, () => {
|
|
|
|
done.reject(new Error('one the docs did not pass validation'));
|
2016-09-12 16:14:01 +00:00
|
|
|
});
|
|
|
|
return done.promise;
|
2016-09-12 15:31:23 +00:00
|
|
|
}
|
2016-09-11 16:01:46 +00:00
|
|
|
/**
|
|
|
|
* inserts many objects at once into the DbCollection
|
|
|
|
*/
|
2016-09-12 15:31:23 +00:00
|
|
|
insertMany(docArrayArg) {
|
2016-09-12 16:14:01 +00:00
|
|
|
let done = plugins.q.defer();
|
|
|
|
let checkDocPromiseArray = [];
|
|
|
|
for (let docArg of docArrayArg) {
|
|
|
|
checkDocPromiseArray.push(this.checkDoc(docArg));
|
|
|
|
}
|
|
|
|
plugins.q.all(checkDocPromiseArray).then(() => {
|
2016-11-17 21:36:12 +00:00
|
|
|
if (this.db.dbType === 'mongodb') {
|
|
|
|
this.collection.insertMany(docArrayArg)
|
|
|
|
.then(() => { done.resolve(); });
|
|
|
|
}
|
|
|
|
else if (this.db.dbType === 'nedb') {
|
|
|
|
let paramArray = plugins.lodash.concat(docArrayArg, (err, newDoc) => {
|
|
|
|
if (err) {
|
|
|
|
done.reject(err);
|
|
|
|
throw err;
|
|
|
|
}
|
|
|
|
done.resolve();
|
|
|
|
});
|
|
|
|
this.collection.insert.apply(null, paramArray);
|
|
|
|
}
|
2016-09-12 16:14:01 +00:00
|
|
|
});
|
|
|
|
return done.promise;
|
|
|
|
}
|
2016-11-17 21:36:12 +00:00
|
|
|
/**
|
|
|
|
* checks a Doc for constraints
|
|
|
|
*/
|
|
|
|
checkDoc(docArg) {
|
2016-09-12 16:14:01 +00:00
|
|
|
let done = plugins.q.defer();
|
2016-11-17 21:36:12 +00:00
|
|
|
let validationResult = true;
|
|
|
|
if (this.objectValidation) {
|
|
|
|
validationResult = this.objectValidation(docArg);
|
|
|
|
}
|
|
|
|
if (validationResult) {
|
|
|
|
done.resolve();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
done.reject('validation of object did not pass');
|
|
|
|
}
|
2016-09-12 16:14:01 +00:00
|
|
|
return done.promise;
|
2016-09-12 15:31:23 +00:00
|
|
|
}
|
2016-09-11 16:01:46 +00:00
|
|
|
}
|
|
|
|
exports.DbCollection = DbCollection;
|
2016-11-17 21:36:12 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBOEM7QUFXOUMsb0JBQTJCLEVBQU07SUFDN0IsTUFBTSxDQUFDLFVBQVUsV0FBVztRQUN4QixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RSxDQUFDLENBQUE7QUFDTCxDQUFDO0FBSkQsZ0NBSUM7QUFFRDtJQVdJLFlBQVksT0FBZSxFQUFFLEtBQVM7UUFIdEMscUJBQWdCLEdBQXNCLElBQUksQ0FBQTtRQUl0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQTtRQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNsRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxPQUEwQjtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFBO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxXQUFvQixFQUFFLFVBQXlCO1FBQ2hELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFPLENBQUE7UUFDakMsRUFBRSxDQUFD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
|