import * as plugins from './smartdata.plugins' import { Db } from './smartdata.classes.db' export class DbCollection { collection: plugins.mongodb.Collection constructor(nameArg: string, dbArg: Db) { this.collection = dbArg.db.collection(nameArg) } /** * adds a validation function that all newly inserted and updated objects have to pass */ addObjectValidation(funcArg) { } /** * finds an object in the DbCollection */ find(docMatchArg: T | any): plugins.q.Promise { let done = plugins.q.defer() this.collection.find(docMatchArg).toArray((err, docs) => { if (err) { throw err } done.resolve(docs) }) return done.promise } /** * inserts object into the DbCollection */ insertOne(docArg: T): plugins.q.Promise { let done = plugins.q.defer() this.checkDoc(docArg).then(() => { this.collection.insertOne(docArg) .then(() => { done.resolve() }) }) return done.promise } /** * inserts many objects at once into the DbCollection */ insertMany(docArrayArg: T[]): plugins.q.Promise { let done = plugins.q.defer() let checkDocPromiseArray: plugins.q.Promise[] = [] for (let docArg of docArrayArg){ checkDocPromiseArray.push(this.checkDoc(docArg)) } plugins.q.all(checkDocPromiseArray).then(() => { this.collection.insertMany(docArrayArg) .then(() => { done.resolve() }) }) return done.promise } private checkDoc(doc: T): plugins.q.Promise { let done = plugins.q.defer() done.resolve() return done.promise } }