smartdata/ts/smartdata.classes.dbcollection.ts

71 lines
2.0 KiB
TypeScript
Raw Normal View History

2016-09-11 16:01:46 +00:00
import * as plugins from './smartdata.plugins'
2016-09-12 21:47:57 +00:00
import { Db } from './smartdata.classes.db'
2016-09-11 16:01:46 +00:00
2016-09-13 20:53:21 +00:00
export interface IFindOptions {
limit?: number
}
2016-09-11 16:01:46 +00:00
export class DbCollection<T> {
collection: plugins.mongodb.Collection
2016-09-13 20:53:21 +00:00
name: string
2016-09-12 21:47:57 +00:00
constructor(nameArg: string, dbArg: Db) {
2016-09-13 20:53:21 +00:00
this.name = nameArg
2016-09-12 21:47:57 +00:00
this.collection = dbArg.db.collection(nameArg)
2016-09-11 16:01:46 +00:00
}
/**
* adds a validation function that all newly inserted and updated objects have to pass
*/
2016-09-12 16:14:01 +00:00
addObjectValidation(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: T | any, optionsArg?: IFindOptions): plugins.q.Promise<T[]> {
2016-09-12 16:14:01 +00:00
let done = plugins.q.defer<T[]>()
2016-09-13 20:53:21 +00:00
let findCursor = this.collection.find(docMatchArg)
if (optionsArg) {
if ( optionsArg.limit ) { findCursor = findCursor.limit(1) }
}
findCursor.toArray((err, docs) => {
2016-09-12 16:14:01 +00:00
if (err) { throw err }
done.resolve(docs)
})
return done.promise
2016-09-12 15:31:23 +00:00
}
/**
* inserts object into the DbCollection
*/
2016-09-12 16:14:01 +00:00
insertOne(docArg: T): plugins.q.Promise<void> {
let done = plugins.q.defer<void>()
this.checkDoc(docArg).then(() => {
this.collection.insertOne(docArg)
.then(() => { done.resolve() })
})
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 16:14:01 +00:00
insertMany(docArrayArg: T[]): plugins.q.Promise<void> {
let done = plugins.q.defer<void>()
let checkDocPromiseArray: plugins.q.Promise<void>[] = []
for (let docArg of docArrayArg){
checkDocPromiseArray.push(this.checkDoc(docArg))
}
plugins.q.all(checkDocPromiseArray).then(() => {
this.collection.insertMany(docArrayArg)
2016-09-12 19:36:26 +00:00
.then(() => { done.resolve() })
2016-09-12 16:14:01 +00:00
})
return done.promise
}
2016-09-12 15:31:23 +00:00
2016-09-12 16:14:01 +00:00
private checkDoc(doc: T): plugins.q.Promise<void> {
let done = plugins.q.defer<void>()
done.resolve()
return done.promise
2016-09-12 15:31:23 +00:00
}
2016-09-11 16:01:46 +00:00
}