diff --git a/ts/smartdata.classes.collection.ts b/ts/smartdata.classes.collection.ts index 14f9c7a..a5aa538 100644 --- a/ts/smartdata.classes.collection.ts +++ b/ts/smartdata.classes.collection.ts @@ -22,19 +22,62 @@ const collectionFactory = new CollectionFactory(); * This is a decorator that will tell the decorated class what dbTable to use * @param dbArg */ -export function Collection(dbArg: SmartdataDb | TDelayed, managerArg?: TDelayed) { +export function Collection(dbArg: SmartdataDb | TDelayed) { return function classDecorator(constructor: T) { return class extends constructor { public static get collection() { + if (!(dbArg instanceof SmartdataDb)) { + dbArg = dbArg(); + } return collectionFactory.getCollection(constructor.name, dbArg); } public get collection() { + if (!(dbArg instanceof SmartdataDb)) { + dbArg = dbArg(); + } + return collectionFactory.getCollection(constructor.name, dbArg); + } + }; + }; +} + +interface IManager { + db: SmartdataDb +} + +/** + * This is a decorator that will tell the decorated class what dbTable to use + * @param dbArg + */ + export function Manager(managerArg?: TManager | TDelayed) { + return function classDecorator(constructor: T) { + return class extends constructor { + public static get collection() { + let dbArg: SmartdataDb; + if (managerArg['db']) { + dbArg = (managerArg as TManager).db + } else { + dbArg = (managerArg as TDelayed)().db; + } + return collectionFactory.getCollection(constructor.name, dbArg); + } + public get collection() { + let dbArg: SmartdataDb; + if (managerArg['db']) { + dbArg = (managerArg as TManager).db + } else { + dbArg = (managerArg as TDelayed)().db; + } return collectionFactory.getCollection(constructor.name, dbArg); } public get manager() { - if (managerArg) { - return managerArg(); + let manager: TManager; + if (managerArg['db']) { + manager = (managerArg as TManager); + } else { + manager = (managerArg as TDelayed)(); } + return manager; } }; }; diff --git a/ts/smartdata.classes.collectionfactory.ts b/ts/smartdata.classes.collectionfactory.ts index 2046b14..812fb75 100644 --- a/ts/smartdata.classes.collectionfactory.ts +++ b/ts/smartdata.classes.collectionfactory.ts @@ -7,16 +7,13 @@ export class CollectionFactory { public getCollection = ( nameArg: string, - dbArg: SmartdataDb | (() => SmartdataDb) + dbArg: SmartdataDb ): SmartdataCollection => { if (!this.collections[nameArg]) { this.collections[nameArg] = (() => { if (dbArg instanceof SmartdataDb) { // tslint:disable-next-line: no-string-literal return new SmartdataCollection(nameArg, dbArg); - } else { - dbArg = dbArg(); - return new SmartdataCollection(nameArg, dbArg); } })(); }