Skip to content

Commit d3dc471

Browse files
committed
refactor: use queryBuilder as getter to make validations
1 parent 02026b4 commit d3dc471

5 files changed

Lines changed: 229 additions & 177 deletions

File tree

src/Drivers/MongoDriver.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ export class MongoDriver implements DriverContract {
2727

2828
private client: Connection
2929
private session: ClientSession
30-
private queryBuilder: Collection
3130
private isConnected: boolean
32-
3331
private readonly configs: any
3432
private readonly connection: string
3533

@@ -53,6 +51,18 @@ export class MongoDriver implements DriverContract {
5351
this.isConnected = true
5452
}
5553

54+
private _queryBuilder: Collection
55+
56+
private get queryBuilder() {
57+
if (!this._queryBuilder) {
58+
throw new InternalServerException(
59+
`Query builder does not exist in ${MongoDriver.name}, this usually happens when you don't have called connect method to create the connection with database`,
60+
)
61+
}
62+
63+
return this._queryBuilder
64+
}
65+
5666
// This is important only for update and delete queries
5767
private _where = {}
5868

@@ -248,7 +258,7 @@ export class MongoDriver implements DriverContract {
248258
this._pipeline = query._pipeline
249259
this.defaultTable = query.defaultTable
250260

251-
if (this.defaultTable) this.queryBuilder = this.query()
261+
if (this.defaultTable) this._queryBuilder = this.query()
252262
}
253263

254264
query(): Collection {
@@ -609,7 +619,7 @@ export class MongoDriver implements DriverContract {
609619

610620
buildTable(tableName: string): DriverContract {
611621
this.defaultTable = tableName
612-
this.queryBuilder = this.query()
622+
this._queryBuilder = this.query()
613623

614624
return this
615625
}

src/Drivers/MySqlDriver.ts

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,20 @@
1010
import { Knex } from 'knex'
1111
import { Transaction } from '../Utils/Transaction'
1212
import { DriverFactory } from '../Utils/DriverFactory'
13-
import { paginate, PaginatedResponse } from '@secjs/utils'
1413
import { InternalServerException } from '@secjs/exceptions'
1514
import { DriverContract } from '../Contracts/DriverContract'
15+
import { Is, paginate, PaginatedResponse } from '@secjs/utils'
1616

1717
export class MySqlDriver implements DriverContract {
1818
private isConnected: boolean
1919
private defaultTable: string
2020

2121
private client: Knex | Knex.Transaction
22-
private queryBuilder: Knex.QueryBuilder
23-
2422
private readonly configs: any
2523
private readonly connection: string
2624

2725
constructor(client?: Knex | Knex.Transaction | string, configs?: any) {
28-
if (typeof client === 'string') {
26+
if (Is.String(client)) {
2927
this.isConnected = false
3028
this.defaultTable = null
3129

@@ -37,11 +35,23 @@ export class MySqlDriver implements DriverContract {
3735

3836
this.client = client
3937
this.isConnected = true
40-
this.queryBuilder = this.query()
38+
this._queryBuilder = this.query()
39+
}
40+
41+
private _queryBuilder: Knex.QueryBuilder
42+
43+
private get queryBuilder() {
44+
if (!this._queryBuilder) {
45+
throw new InternalServerException(
46+
`Query builder does not exist in ${MySqlDriver.name}, this usually happens when you don't have called connect method to create the connection with database`,
47+
)
48+
}
49+
50+
return this._queryBuilder
4151
}
4252

4353
setQueryBuilder(query: any) {
44-
this.queryBuilder = query.client
54+
this._queryBuilder = query.client
4555
}
4656

4757
query() {
@@ -71,7 +81,7 @@ export class MySqlDriver implements DriverContract {
7181
]
7282

7383
if (protectedMethods.includes(propertyKey)) {
74-
this.queryBuilder = this.query()
84+
this._queryBuilder = this.query()
7585
}
7686

7787
return target[propertyKey]
@@ -92,7 +102,7 @@ export class MySqlDriver implements DriverContract {
92102
const committedTrx = await client.commit(value)
93103

94104
this.client = null
95-
this.queryBuilder = null
105+
this._queryBuilder = null
96106

97107
return committedTrx
98108
}
@@ -108,7 +118,7 @@ export class MySqlDriver implements DriverContract {
108118
const rolledBackTrx = await client.rollback(error)
109119

110120
this.client = null
111-
this.queryBuilder = null
121+
this._queryBuilder = null
112122

113123
return rolledBackTrx
114124
}
@@ -126,7 +136,7 @@ export class MySqlDriver implements DriverContract {
126136
this.configs,
127137
saveOnDriver,
128138
)
129-
this.queryBuilder = this.query()
139+
this._queryBuilder = this.query()
130140

131141
this.isConnected = true
132142
}
@@ -189,7 +199,7 @@ export class MySqlDriver implements DriverContract {
189199

190200
this.client = null
191201
this.isConnected = false
192-
this.queryBuilder = null
202+
this._queryBuilder = null
193203
this.defaultTable = null
194204
}
195205

@@ -220,7 +230,7 @@ export class MySqlDriver implements DriverContract {
220230
async findMany(): Promise<any[]> {
221231
const data = await this.queryBuilder
222232

223-
this.queryBuilder = this.query()
233+
this._queryBuilder = this.query()
224234

225235
return data
226236
}
@@ -316,25 +326,25 @@ export class MySqlDriver implements DriverContract {
316326
}
317327

318328
buildDistinct(...columns: string[]): MySqlDriver {
319-
this.queryBuilder = this.queryBuilder.distinct(...columns)
329+
this._queryBuilder = this.queryBuilder.distinct(...columns)
320330

321331
return this
322332
}
323333

324334
buildGroupBy(...columns: string[]): MySqlDriver {
325-
this.queryBuilder = this.queryBuilder.groupBy(...columns)
335+
this._queryBuilder = this.queryBuilder.groupBy(...columns)
326336

327337
return this
328338
}
329339

330340
buildGroupByRaw(raw: string, queryValues?: any[]): MySqlDriver {
331-
this.queryBuilder = this.queryBuilder.groupByRaw(raw, queryValues)
341+
this._queryBuilder = this.queryBuilder.groupByRaw(raw, queryValues)
332342

333343
return this
334344
}
335345

336346
buildHaving(column: string, operator: string, value: any): MySqlDriver {
337-
this.queryBuilder = this.queryBuilder.having(column, operator, value)
347+
this._queryBuilder = this.queryBuilder.having(column, operator, value)
338348

339349
return this
340350
}
@@ -347,13 +357,13 @@ export class MySqlDriver implements DriverContract {
347357
joinType = 'join',
348358
): MySqlDriver {
349359
if (operator && !column2)
350-
this.queryBuilder = this.queryBuilder[joinType](
360+
this._queryBuilder = this.queryBuilder[joinType](
351361
tableName,
352362
column1,
353363
operator,
354364
)
355365
if (tableName && column2)
356-
this.queryBuilder = this.queryBuilder[joinType](
366+
this._queryBuilder = this.queryBuilder[joinType](
357367
tableName,
358368
column1,
359369
operator,
@@ -364,19 +374,19 @@ export class MySqlDriver implements DriverContract {
364374
}
365375

366376
buildJoinRaw(raw: string, queryValues?: any[]): MySqlDriver {
367-
this.queryBuilder = this.queryBuilder.joinRaw(raw, queryValues)
377+
this._queryBuilder = this.queryBuilder.joinRaw(raw, queryValues)
368378

369379
return this
370380
}
371381

372382
buildLimit(number: number): MySqlDriver {
373-
this.queryBuilder = this.queryBuilder.limit(number)
383+
this._queryBuilder = this.queryBuilder.limit(number)
374384

375385
return this
376386
}
377387

378388
buildSkip(number: number): MySqlDriver {
379-
this.queryBuilder = this.queryBuilder.offset(number)
389+
this._queryBuilder = this.queryBuilder.offset(number)
380390

381391
return this
382392
}
@@ -386,36 +396,36 @@ export class MySqlDriver implements DriverContract {
386396
value?: any,
387397
): MySqlDriver {
388398
if (typeof statement === 'object') {
389-
this.queryBuilder = this.queryBuilder.where(statement)
399+
this._queryBuilder = this.queryBuilder.where(statement)
390400

391401
return this
392402
}
393403

394-
this.queryBuilder = this.queryBuilder.where(statement, value)
404+
this._queryBuilder = this.queryBuilder.where(statement, value)
395405

396406
return this
397407
}
398408

399409
buildOrderBy(column: string, direction?: 'asc' | 'desc'): MySqlDriver {
400-
this.queryBuilder = this.queryBuilder.orderBy(column, direction)
410+
this._queryBuilder = this.queryBuilder.orderBy(column, direction)
401411

402412
return this
403413
}
404414

405415
buildOrderByRaw(raw: string, queryValues?: any[]): MySqlDriver {
406-
this.queryBuilder = this.queryBuilder.orderByRaw(raw, queryValues)
416+
this._queryBuilder = this.queryBuilder.orderByRaw(raw, queryValues)
407417

408418
return this
409419
}
410420

411421
buildSelect(...columns: string[]): MySqlDriver {
412-
this.queryBuilder = this.queryBuilder.select(...columns)
422+
this._queryBuilder = this.queryBuilder.select(...columns)
413423

414424
return this
415425
}
416426

417427
buildTable(tableName: string): MySqlDriver {
418-
this.queryBuilder = this.queryBuilder.table(tableName)
428+
this._queryBuilder = this.queryBuilder.table(tableName)
419429

420430
this.defaultTable = tableName
421431

@@ -427,12 +437,12 @@ export class MySqlDriver implements DriverContract {
427437
value?: any,
428438
): MySqlDriver {
429439
if (typeof statement === 'object') {
430-
this.queryBuilder = this.queryBuilder.where(statement)
440+
this._queryBuilder = this.queryBuilder.where(statement)
431441

432442
return this
433443
}
434444

435-
this.queryBuilder = this.queryBuilder.where(statement, value)
445+
this._queryBuilder = this.queryBuilder.where(statement, value)
436446

437447
return this
438448
}
@@ -442,12 +452,12 @@ export class MySqlDriver implements DriverContract {
442452
value?: any,
443453
): MySqlDriver {
444454
if (typeof statement === 'object') {
445-
this.queryBuilder = this.queryBuilder.whereLike(statement)
455+
this._queryBuilder = this.queryBuilder.whereLike(statement)
446456

447457
return this
448458
}
449459

450-
this.queryBuilder = this.queryBuilder.whereLike(statement, value)
460+
this._queryBuilder = this.queryBuilder.whereLike(statement, value)
451461

452462
return this
453463
}
@@ -457,30 +467,30 @@ export class MySqlDriver implements DriverContract {
457467
value?: any,
458468
): MySqlDriver {
459469
if (typeof statement === 'object') {
460-
this.queryBuilder = this.queryBuilder.whereIlike(statement)
470+
this._queryBuilder = this.queryBuilder.whereIlike(statement)
461471

462472
return this
463473
}
464474

465-
this.queryBuilder = this.queryBuilder.whereIlike(statement, value)
475+
this._queryBuilder = this.queryBuilder.whereIlike(statement, value)
466476

467477
return this
468478
}
469479

470480
buildWhereBetween(columnName: string, values: [any, any]): MySqlDriver {
471-
this.queryBuilder = this.queryBuilder.whereBetween(columnName, values)
481+
this._queryBuilder = this.queryBuilder.whereBetween(columnName, values)
472482

473483
return this
474484
}
475485

476486
buildWhereExists(callback: any): MySqlDriver {
477-
this.queryBuilder = this.queryBuilder.whereExists(callback)
487+
this._queryBuilder = this.queryBuilder.whereExists(callback)
478488

479489
return this
480490
}
481491

482492
buildWhereIn(columnName: string, values: any[]): MySqlDriver {
483-
this.queryBuilder = this.queryBuilder.whereIn(columnName, values)
493+
this._queryBuilder = this.queryBuilder.whereIn(columnName, values)
484494

485495
return this
486496
}
@@ -490,48 +500,48 @@ export class MySqlDriver implements DriverContract {
490500
value?: any,
491501
): MySqlDriver {
492502
if (typeof statement === 'object') {
493-
this.queryBuilder = this.queryBuilder.whereNot(statement)
503+
this._queryBuilder = this.queryBuilder.whereNot(statement)
494504

495505
return this
496506
}
497507

498-
this.queryBuilder = this.queryBuilder.whereNot(statement, value)
508+
this._queryBuilder = this.queryBuilder.whereNot(statement, value)
499509

500510
return this
501511
}
502512

503513
buildWhereNotBetween(columnName: string, values: [any, any]): MySqlDriver {
504-
this.queryBuilder = this.queryBuilder.whereNotBetween(columnName, values)
514+
this._queryBuilder = this.queryBuilder.whereNotBetween(columnName, values)
505515

506516
return this
507517
}
508518

509519
buildWhereNotExists(callback: any): MySqlDriver {
510-
this.queryBuilder = this.queryBuilder.whereNotExists(callback)
520+
this._queryBuilder = this.queryBuilder.whereNotExists(callback)
511521

512522
return this
513523
}
514524

515525
buildWhereNotIn(columnName: string, values: any[]): MySqlDriver {
516-
this.queryBuilder = this.queryBuilder.whereNotIn(columnName, values)
526+
this._queryBuilder = this.queryBuilder.whereNotIn(columnName, values)
517527

518528
return this
519529
}
520530

521531
buildWhereNull(columnName: string): MySqlDriver {
522-
this.queryBuilder = this.queryBuilder.whereNull(columnName)
532+
this._queryBuilder = this.queryBuilder.whereNull(columnName)
523533

524534
return this
525535
}
526536

527537
buildWhereNotNull(columnName: string): MySqlDriver {
528-
this.queryBuilder = this.queryBuilder.whereNotNull(columnName)
538+
this._queryBuilder = this.queryBuilder.whereNotNull(columnName)
529539

530540
return this
531541
}
532542

533543
buildWhereRaw(raw: string, queryValues?: any[]): MySqlDriver {
534-
this.queryBuilder = this.queryBuilder.whereRaw(raw, queryValues)
544+
this._queryBuilder = this.queryBuilder.whereRaw(raw, queryValues)
535545

536546
return this
537547
}

0 commit comments

Comments
 (0)