diff --git a/.vscode/launch.json b/.vscode/launch.json index 112db52..26e9f92 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,28 +2,10 @@ "version": "0.2.0", "configurations": [ { - "name": "current file", - "type": "node", + "command": "npm test", + "name": "Run npm test", "request": "launch", - "args": [ - "${relativeFile}" - ], - "runtimeArgs": ["-r", "@gitzone/tsrun"], - "cwd": "${workspaceRoot}", - "protocol": "inspector", - "internalConsoleOptions": "openOnSessionStart" - }, - { - "name": "test.ts", - "type": "node", - "request": "launch", - "args": [ - "test/test.ts" - ], - "runtimeArgs": ["-r", "@gitzone/tsrun"], - "cwd": "${workspaceRoot}", - "protocol": "inspector", - "internalConsoleOptions": "openOnSessionStart" + "type": "node-terminal" } ] } diff --git a/test/test.typescript.ts b/test/test.typescript.ts index 814dc3b..8bbd0a0 100644 --- a/test/test.typescript.ts +++ b/test/test.typescript.ts @@ -56,7 +56,8 @@ tap.test('should establish a connection to mongod', async () => { // ------ // Collections // ------ -class CarTemplate extends smartdata.SmartDataDbDoc { +@smartdata.Manager() +class Car extends smartdata.SmartDataDbDoc { @smartdata.unI() public index: string = smartunique.shortId(); @@ -79,20 +80,22 @@ class CarTemplate extends smartdata.SmartDataDbDoc { } const createCarClass = (dbArg: smartdata.SmartdataDb) => { - console.log(this); - @smartdata.Collection(() => { - return dbArg; - }) - class Car extends CarTemplate {}; + smartdata.setDefaultManagerForDoc({db: dbArg}, Car); return Car; }; -tap.test('should prodice a car', async () => { +tap.test('should produce a car', async () => { const CarClass = createCarClass(testDb); const carInstance = new CarClass('red', 'Mercedes'); await carInstance.save(); }); +tap.test('should get a car', async () => { + const car = Car.getInstance({ + color: 'red' + }) +}) + // ======================================= // close the database connection // ======================================= diff --git a/ts/smartdata.classes.collection.ts b/ts/smartdata.classes.collection.ts index 91c2cf6..8bd96c6 100644 --- a/ts/smartdata.classes.collection.ts +++ b/ts/smartdata.classes.collection.ts @@ -45,16 +45,22 @@ export interface IManager { db: SmartdataDb } +export const setDefaultManagerForDoc = (managerArg: IManager, dbDoc: any) => { + dbDoc.prototype.defaultManager = managerArg; +} + /** * 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 function classDecorator(constructor: T) { return class extends constructor { public static get collection() { let dbArg: SmartdataDb; - if (managerArg['db']) { + if (!managerArg) { + dbArg = this.prototype.defaultManager.db; + } else if (managerArg['db']) { dbArg = (managerArg as TManager).db } else { dbArg = (managerArg as TDelayed)().db; @@ -63,7 +69,11 @@ export interface IManager { } public get collection() { let dbArg: SmartdataDb; - if (managerArg['db']) { + if (!managerArg) { + //console.log(this.defaultManager.db); + //process.exit(0) + dbArg = this.defaultManager.db; + } else if (managerArg['db']) { dbArg = (managerArg as TManager).db } else { dbArg = (managerArg as TDelayed)().db; diff --git a/ts/smartdata.classes.doc.ts b/ts/smartdata.classes.doc.ts index b84616c..06d85e4 100644 --- a/ts/smartdata.classes.doc.ts +++ b/ts/smartdata.classes.doc.ts @@ -47,6 +47,7 @@ export class SmartDataDbDoc; public collection: SmartdataCollection; + public static defaultManager; public static manager; public manager: TManager;