2016-09-11 16:01:46 +00:00
|
|
|
"use strict";
|
2017-02-25 10:37:05 +00:00
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
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;
|
2017-02-25 10:37:05 +00:00
|
|
|
// tell the collection where it belongs
|
2016-09-13 20:53:21 +00:00
|
|
|
this.name = nameArg;
|
2016-11-17 21:36:12 +00:00
|
|
|
this.db = dbArg;
|
2017-02-25 10:37:05 +00:00
|
|
|
// make sure it actually exists
|
2016-11-17 21:36:12 +00:00
|
|
|
if (this.db.dbType === 'mongodb') {
|
|
|
|
this.collection = dbArg.db.collection(nameArg);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.collection = new plugins.nedb();
|
|
|
|
}
|
2017-02-25 10:37:05 +00:00
|
|
|
// tell the db class about it (important since Db uses different systems under the hood)
|
|
|
|
this.db.addCollection(this);
|
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;
|
2017-02-25 10:37:05 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0NBQThDO0FBVzlDLG9CQUEyQixFQUFNO0lBQzdCLE1BQU0sQ0FBQyxVQUFVLFdBQVc7UUFDeEIsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDeEUsQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQUpELGdDQUlDO0FBRUQ7SUFXSSxZQUFZLE9BQWUsRUFBRSxLQUFTO1FBSHRDLHFCQUFnQixHQUFzQixJQUFJLENBQUE7UUFJdEMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBRWYsK0JBQStCO1FBQy9CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNsRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3hDLENBQUM7UUFFRCx3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBMEI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLENBQUMsV0FBb0IsRUFBRSxVQUF5QjtRQUNoRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBTyxDQUFBO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDbEQsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUk7Z0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDaEIsTUFBTSxHQUFHLENBQUE7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJO2dCQUN4QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7b0JBQ2hCLE1BQU0sR0FBRyxDQUFBO2dCQUNiLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsTUFBUztRQUNmLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFRLENBQUE7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3RCO1lBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO3FCQUM1QixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN2QyxDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNO29CQUN2QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQ2hCLE1BQU0sR0FBRyxDQUFBO29CQUNiLENBQUM7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUNsQixDQUFDLENBQUMsQ0FBQTtZQUNOLENBQUM7UUFDTCxDQUFDLEVBQ0Q7WUFDSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtRQUNsRSxDQUFDLENBQUMsQ0FBQTtRQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxXQUFnQjtRQUN2QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBUSxDQUFBO1FBQ2xDLElBQUksb0JBQW9CLEdBQThCLEVBQUUsQ0FBQTtRQUN4RCxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDcEQsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDL
|