From 29c3d6e694707f50a6a7a2f4052acc23d4995d32 Mon Sep 17 00:00:00 2001 From: Harminder virk Date: Fri, 4 Oct 2019 15:00:25 +0530 Subject: [PATCH] refactor: simply API to get-set model $options --- adonis-typings/model.ts | 16 +++++++----- src/Orm/BaseModel/index.ts | 49 +++++++++++++++-------------------- src/Orm/QueryBuilder/index.ts | 4 +-- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/adonis-typings/model.ts b/adonis-typings/model.ts index af6b2768..f3882327 100644 --- a/adonis-typings/model.ts +++ b/adonis-typings/model.ts @@ -337,7 +337,15 @@ declare module '@ioc:Adonis/Lucid/Model' { > extends ChainableContract { model: Model - client: QueryClientContract, + /** + * A copy of client options. They can be set on any model instance + */ + readonly clientOptions: ModelOptions + + /** + * Reference to query client used for making queries + */ + client: QueryClientContract /** * A custom set of sideloaded properties defined on the query @@ -408,12 +416,6 @@ declare module '@ioc:Adonis/Lucid/Model' { client: QueryClientContract, ): ReturnType | ReturnType - /** - * Read/write options - */ - $setOptions (options?: ModelAdapterOptions): void - $getOptions (): ModelOptions | undefined - /** * Read/write attributes */ diff --git a/src/Orm/BaseModel/index.ts b/src/Orm/BaseModel/index.ts index b55bba4b..4296cb2b 100644 --- a/src/Orm/BaseModel/index.ts +++ b/src/Orm/BaseModel/index.ts @@ -138,7 +138,7 @@ export class BaseModel implements ModelContract { const instance = new this() instance.$consumeAdapterResult(adapterResult, sideloadAttributes) instance.$hydrateOriginals() - instance.$setOptions(options) + instance.$options = options instance.$persisted = true instance.$isLocal = false @@ -383,7 +383,7 @@ export class BaseModel implements ModelContract { if (!row) { row = new this() as InstanceType - row.$setOptions({ client: query.client }) + row.$options = query.clientOptions row.fill(Object.assign({}, search, savePayload)) return row } @@ -404,6 +404,12 @@ export class BaseModel implements ModelContract { return new Proxy(this, proxyHandler) } + /** + * Custom options defined on the model instance that are + * passed to the adapter + */ + private _options?: ModelOptions + /** * Reference to transaction that will be used for performing queries on a given * model instance. @@ -505,12 +511,6 @@ export class BaseModel implements ModelContract { */ public $isDeleted: boolean = false - /** - * Custom options defined on the model instance that are - * passed to the adapter - */ - public $options: ModelOptions - /** * Returns the value of primary key. The value must be * set inside attributes object @@ -623,37 +623,30 @@ export class BaseModel implements ModelContract { } /** - * Sets the options on the model instance + * Get options */ - public $setOptions (options?: ModelAdapterOptions) { - if (!options) { - return - } - - this.$options = this.$options || {} + public get $options (): ModelOptions | undefined { + return this._options + } - if (options.client) { - this.$options.connection = options.client.connectionName - this.$options.profiler = options.client.profiler + /** + * Set options + */ + public set $options (options: ModelOptions | undefined) { + if (!options) { return } + this._options = this._options || {} if (options.connection) { - this.$options.connection = options.connection + this._options.connection = options.connection } if (options.profiler) { - this.$options.profiler = options.profiler + this._options.profiler = options.profiler } } - /** - * Returns $options - */ - public $getOptions (): ModelOptions | undefined { - return this.$options - } - /** * Set attribute */ @@ -860,7 +853,7 @@ export class BaseModel implements ModelContract { preloader.preload(relationName, callback) } - await preloader.processAllForOne(this, constructor.query(this.$getOptions()).client) + await preloader.processAllForOne(this, constructor.query(this.$options).client) } /** diff --git a/src/Orm/QueryBuilder/index.ts b/src/Orm/QueryBuilder/index.ts index ad90d8ea..cd11330a 100644 --- a/src/Orm/QueryBuilder/index.ts +++ b/src/Orm/QueryBuilder/index.ts @@ -46,7 +46,7 @@ export class ModelQueryBuilder extends Chainable implements ModelQueryBuilderCon /** * Options that must be passed to all new model instances */ - private _options: ModelOptions = { + public clientOptions: ModelOptions = { connection: this.client.connectionName, profiler: this.client.profiler, } @@ -73,7 +73,7 @@ export class ModelQueryBuilder extends Chainable implements ModelQueryBuilderCon const modelInstances = this.model.$createMultipleFromAdapterResult( rows, this._sideloaded, - this._options, + this.clientOptions, ) await this._preloader.processAllForMany(modelInstances, this.client)