@spytecgps/nova-orm 1.0.62 → 1.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import { DataSource, EntityTarget, LoggerOptions, ObjectLiteral, QueryRunner, ReplicationMode, Repository, SelectQueryBuilder } from 'typeorm';
2
+ import { BaseParams } from './types/common';
2
3
  import { Logger } from './types/logger';
3
- export type queryBuilderHandler<T> = (novaDataSource: NovaDataSource) => Promise<T>;
4
+ export type queryBuilderHandler<T> = (novaDataSource: NovaDataSource, queryRunner?: QueryRunner) => Promise<T>;
4
5
  export interface NovaDataSourceConfig {
5
6
  /**
6
7
  * Database username.
@@ -34,7 +35,7 @@ export interface NovaDataSourceConfig {
34
35
  export declare class NovaDataSource {
35
36
  protected readonly dataSource: DataSource;
36
37
  protected readonly logger: Logger;
37
- constructor(config: NovaDataSourceConfig, logger: Logger);
38
+ constructor(config: NovaDataSourceConfig, logger: Logger, replicaConfig?: NovaDataSourceConfig);
38
39
  /**
39
40
  * Performs connection to the database.
40
41
  */
@@ -67,5 +68,6 @@ export declare class NovaDataSource {
67
68
  * if you perform reads you can use slave databases.
68
69
  */
69
70
  createQueryRunner(mode?: ReplicationMode): QueryRunner;
70
- safeQuery<T>(queryBuilderHandler: queryBuilderHandler<T>, tag?: string): Promise<T>;
71
+ createQueryRunnerFromParams(params: BaseParams): QueryRunner;
72
+ safeQuery<T>(queryBuilderHandler: queryBuilderHandler<T>, tag?: string, queryRunner?: QueryRunner): Promise<T>;
71
73
  }
@@ -5,7 +5,7 @@ import { QueryLogger } from './utils/queryLogger';
5
5
  export class NovaDataSource {
6
6
  dataSource;
7
7
  logger;
8
- constructor(config, logger) {
8
+ constructor(config, logger, replicaConfig) {
9
9
  this.logger = logger;
10
10
  const entities = [];
11
11
  for (const key in Entities) {
@@ -21,15 +21,17 @@ export class NovaDataSource {
21
21
  subscribers.push(subscriber);
22
22
  }
23
23
  }
24
- this.dataSource = new DataSource({
25
- type: 'mysql',
26
- connectorPackage: 'mysql2',
24
+ const baseConfig = {
27
25
  host: 'aws.connect.psdb.cloud',
28
26
  port: 3306,
29
27
  database: 'nova',
30
28
  ssl: {
31
29
  rejectUnauthorized: true,
32
30
  },
31
+ };
32
+ this.dataSource = new DataSource({
33
+ type: 'mysql',
34
+ connectorPackage: 'mysql2',
33
35
  synchronize: false,
34
36
  logging: true,
35
37
  logger: new QueryLogger(this.logger, config.logging),
@@ -40,7 +42,27 @@ export class NovaDataSource {
40
42
  extra: {
41
43
  decimalNumbers: true,
42
44
  },
45
+ ...baseConfig,
43
46
  ...config,
47
+ replication: {
48
+ master: {
49
+ ...baseConfig,
50
+ ...config,
51
+ },
52
+ slaves: replicaConfig
53
+ ? [
54
+ {
55
+ ...baseConfig,
56
+ ...replicaConfig,
57
+ },
58
+ ]
59
+ : [
60
+ {
61
+ ...baseConfig,
62
+ ...config,
63
+ },
64
+ ],
65
+ },
44
66
  });
45
67
  }
46
68
  /**
@@ -94,10 +116,14 @@ export class NovaDataSource {
94
116
  createQueryRunner(mode) {
95
117
  return this.dataSource.createQueryRunner(mode);
96
118
  }
97
- async safeQuery(queryBuilderHandler, tag) {
119
+ createQueryRunnerFromParams(params) {
120
+ const replicationMode = params.options?.forceMaster ? 'master' : 'slave';
121
+ return this.dataSource.createQueryRunner(replicationMode);
122
+ }
123
+ async safeQuery(queryBuilderHandler, tag, queryRunner) {
98
124
  try {
99
125
  await this.connect();
100
- const result = await queryBuilderHandler(this);
126
+ const result = await queryBuilderHandler(this, queryRunner);
101
127
  return result;
102
128
  }
103
129
  catch (error) {
@@ -105,6 +131,9 @@ export class NovaDataSource {
105
131
  throw error;
106
132
  }
107
133
  finally {
134
+ if (queryRunner) {
135
+ await queryRunner.release();
136
+ }
108
137
  await this.disconnect();
109
138
  }
110
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"novaDataSource.js","sourceRoot":"","sources":["../src/novaDataSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novaDataSource.js","sourceRoot":"","sources":["../src/novaDataSource.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { NovaDataSourceConfig } from '../novaDataSource';
2
2
  import { Logger } from '../types/logger';
3
3
  export declare class BaseRepository {
4
4
  protected readonly novaDataSourceConfig: NovaDataSourceConfig;
5
+ protected readonly replicaNovaDataSourceConfig?: NovaDataSourceConfig;
5
6
  protected readonly logger: Logger;
6
- constructor(config: NovaDataSourceConfig, logger: Logger);
7
+ constructor(config: NovaDataSourceConfig, logger: Logger, replicaConfig?: NovaDataSourceConfig);
7
8
  }
@@ -1,9 +1,11 @@
1
1
  import { ConsoleLogger } from '../utils/consoleLogger';
2
2
  export class BaseRepository {
3
3
  novaDataSourceConfig;
4
+ replicaNovaDataSourceConfig;
4
5
  logger;
5
- constructor(config, logger) {
6
+ constructor(config, logger, replicaConfig) {
6
7
  this.novaDataSourceConfig = config;
8
+ this.replicaNovaDataSourceConfig = replicaConfig;
7
9
  this.logger = logger ?? new ConsoleLogger();
8
10
  }
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"baseRepository.js","sourceRoot":"","sources":["../../src/repositories/baseRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,MAAM,OAAO,cAAc;IACN,oBAAoB,CAAsB;IAC1C,MAAM,CAAQ;IAEjC,YAAY,MAA4B,EAAE,MAAc;QACtD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,aAAa,EAAE,CAAA;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"baseRepository.js","sourceRoot":"","sources":["../../src/repositories/baseRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,MAAM,OAAO,cAAc;IACN,oBAAoB,CAAsB;IAC1C,2BAA2B,CAAuB;IAClD,MAAM,CAAQ;IAEjC,YAAY,MAA4B,EAAE,MAAc,EAAE,aAAoC;QAC5F,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAA;QAClC,IAAI,CAAC,2BAA2B,GAAG,aAAa,CAAA;QAChD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,aAAa,EAAE,CAAA;IAC7C,CAAC;CACF"}
@@ -1,12 +1,12 @@
1
- import { User } from '../../entities';
2
1
  import { binaryBufferToUuidString } from '../../utils/uuidHelpers';
3
2
  export const getUsersData = async (novaDataSource, params, logger) => {
4
3
  if (!params?.filters?.imei) {
5
4
  logger.warn({ params }, 'UsersRepository::getUsersData - missing required parameters');
6
5
  return [];
7
6
  }
8
- return novaDataSource.safeQuery(async (dataSource) => {
9
- const usersRepository = dataSource.getRepository(User);
7
+ // Force the query to run on master or slave
8
+ const queryRunner = novaDataSource.createQueryRunnerFromParams(params);
9
+ return novaDataSource.safeQuery(async (_dataSource, queryRunner) => {
10
10
  const query = `SELECT U.id as userId, U.telephone, U.email
11
11
  , UC.isMetric, coalesce (UC.timezone, '') as timezone, UC.alertsNotificationsOn, UC.speedUnits , UC.distanceUnits
12
12
  , AC.alertTypeId, AC.smsNotification, AC.emailNotification, AC.alertValue, AC.pushNotification , AC.appNotification , AC.alertMetadata
@@ -51,7 +51,7 @@ export const getUsersData = async (novaDataSource, params, logger) => {
51
51
  JOIN country AS CO
52
52
  ON CO.id = CASE WHEN(U.countryId IS NULL OR U.countryId = 0) THEN 236 ELSE U.countryId END
53
53
  WHERE D.imei = ?`;
54
- const result = await usersRepository.query(query, [params.filters.imei]);
54
+ const result = await queryRunner.query(query, [params.filters.imei]);
55
55
  return result.map(item => ({
56
56
  ...item,
57
57
  userId: binaryBufferToUuidString(item.userId),
@@ -65,6 +65,6 @@ export const getUsersData = async (novaDataSource, params, logger) => {
65
65
  phoneNumbers: item.phoneNumbers ? JSON.parse(item.phoneNumbers) : [],
66
66
  emailAddresses: item.emailAddresses ? JSON.parse(item.emailAddresses) : [],
67
67
  }));
68
- }, 'UsersRepository::getUsersData');
68
+ }, 'UsersRepository::getUsersData', queryRunner);
69
69
  };
70
70
  //# sourceMappingURL=getUserData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getUserData.js","sourceRoot":"","sources":["../../../src/repositories/users/getUserData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAIrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,cAA8B,EAC9B,MAA0B,EAC1B,MAAc,EACO,EAAE;IACvB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,6DAA6D,CAAC,CAAA;QACtF,OAAO,EAAE,CAAA;KACV;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAA0B,EAAuB,EAAE;QACxF,MAAM,eAAe,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAEtD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2CiB,CAAA;QAE/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAExE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,IAAI;YACP,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,CAAC;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC;YAC7B,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,KAAK,CAAC;YACtD,eAAe,EAAE,IAAI,CAAC,eAAe,KAAK,CAAC;YAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,KAAK,CAAC;YAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,eAAe,KAAK,CAAC;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACpE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE;SAC3E,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC,CAAA"}
1
+ {"version":3,"file":"getUserData.js","sourceRoot":"","sources":["../../../src/repositories/users/getUserData.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,cAA8B,EAC9B,MAA0B,EAC1B,MAAc,EACO,EAAE;IACvB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,6DAA6D,CAAC,CAAA;QACtF,OAAO,EAAE,CAAA;KACV;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAEtE,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,WAA2B,EAAE,WAAyB,EAAuB,EAAE;QACpF,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2Ce,CAAA;QAE7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAEpE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,IAAI;YACP,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,CAAC;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC;YAC7B,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,KAAK,CAAC;YACtD,eAAe,EAAE,IAAI,CAAC,eAAe,KAAK,CAAC;YAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,KAAK,CAAC;YAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,eAAe,KAAK,CAAC;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACpE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE;SAC3E,CAAC,CAAC,CAAA;IACL,CAAC,EACD,+BAA+B,EAC/B,WAAW,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -9,9 +9,14 @@ export const getUsers = async (novaDataSource, params, logger) => {
9
9
  logger.warn({ params }, 'UsersRepository::getUsers - missing required parameters');
10
10
  return [];
11
11
  }
12
- return novaDataSource.safeQuery(async (dataSource) => {
12
+ // Force the query to run on master or slave
13
+ const queryRunner = novaDataSource.createQueryRunnerFromParams(params);
14
+ return novaDataSource.safeQuery(async (dataSource, queryRunner) => {
13
15
  const usersRepository = dataSource.getRepository(User);
14
16
  let queryBuilder = usersRepository.createQueryBuilder('user');
17
+ if (queryRunner) {
18
+ queryBuilder = queryBuilder.setQueryRunner(queryRunner);
19
+ }
15
20
  if (params.filters.emailList?.length) {
16
21
  queryBuilder = queryBuilder.where('LOWER(user.email) IN (:...emailList)', {
17
22
  emailList: params.filters.emailList.map(email => email.trim().toLowerCase()),
@@ -45,6 +50,6 @@ export const getUsers = async (novaDataSource, params, logger) => {
45
50
  queryBuilder = queryBuilder.orderBy('user.lastname', 'DESC');
46
51
  const result = await queryBuilder.getMany();
47
52
  return result;
48
- }, 'UsersRepository::getUsers');
53
+ }, 'UsersRepository::getUsers', queryRunner);
49
54
  };
50
55
  //# sourceMappingURL=getUsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getUsers.js","sourceRoot":"","sources":["../../../src/repositories/users/getUsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAIrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,cAA8B,EAC9B,MAAsB,EACtB,MAAc,EACG,EAAE;IACnB,IACE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;QACnC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;QAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;QAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM;QACxB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EACxB;QACA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,yDAAyD,CAAC,CAAA;QAClF,OAAO,EAAE,CAAA;KACV;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAA0B,EAAmB,EAAE;QACpF,MAAM,eAAe,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAEtD,IAAI,YAAY,GAAG,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAE7D,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE;YACpC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACxE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;aAC7E,CAAC,CAAA;SACH;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAClC,+FAA+F,EAC/F;gBACE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;aACzC,CACF,CAAA;SACF;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,2BAA2B,EAAE;gBAChE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;aAClC,CAAC,CAAA;SACH;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACzB,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAEpE,YAAY,GAAG,YAAY,CAAC,QAAQ,CAClC;;;oCAG4B,EAC5B;gBACE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;gBACpC,YAAY;aACb,CACF,CAAA;SACF;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACzB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAC5D,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAA;SACH;QAED,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;QAE3C,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,2BAA2B,CAAC,CAAA;AACjC,CAAC,CAAA"}
1
+ {"version":3,"file":"getUsers.js","sourceRoot":"","sources":["../../../src/repositories/users/getUsers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAIrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,cAA8B,EAC9B,MAAsB,EACtB,MAAc,EACG,EAAE;IACnB,IACE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;QACnC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;QAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;QAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM;QACxB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EACxB;QACA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,yDAAyD,CAAC,CAAA;QAClF,OAAO,EAAE,CAAA;KACV;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAEtE,OAAO,cAAc,CAAC,SAAS,CAC7B,KAAK,EAAE,UAA0B,EAAE,WAAyB,EAAmB,EAAE;QAC/E,MAAM,eAAe,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAEtD,IAAI,YAAY,GAAG,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAE7D,IAAI,WAAW,EAAE;YACf,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;SACxD;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE;YACpC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACxE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;aAC7E,CAAC,CAAA;SACH;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAClC,+FAA+F,EAC/F;gBACE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;aACzC,CACF,CAAA;SACF;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,2BAA2B,EAAE;gBAChE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;aAClC,CAAC,CAAA;SACH;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACzB,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAEpE,YAAY,GAAG,YAAY,CAAC,QAAQ,CAClC;;;oCAG0B,EAC1B;gBACE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;gBACpC,YAAY;aACb,CACF,CAAA;SACF;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACzB,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAC5D,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAA;SACH;QAED,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;QAE3C,OAAO,MAAM,CAAA;IACf,CAAC,EACD,2BAA2B,EAC3B,WAAW,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1,3 +1,8 @@
1
+ export interface BaseParams {
2
+ options?: {
3
+ forceMaster?: boolean;
4
+ };
5
+ }
1
6
  export interface ReportPagination {
2
7
  pagingOptions: {
3
8
  pageSize: number | 25;
@@ -1,4 +1,5 @@
1
1
  import { User } from '../entities/user';
2
+ import { BaseParams } from './common';
2
3
  export interface GetUsersConfigurationByImeiParams {
3
4
  filters: {
4
5
  imei: string;
@@ -9,7 +10,7 @@ export interface GetUserByIdParams {
9
10
  id: string;
10
11
  };
11
12
  }
12
- export interface GetUsersParams {
13
+ export interface GetUsersParams extends BaseParams {
13
14
  filters: {
14
15
  emailList?: string[];
15
16
  userName?: string;
@@ -91,7 +92,7 @@ export interface UpdateUserParams {
91
92
  lastLoginAt?: Date;
92
93
  };
93
94
  }
94
- export interface GetUsersDataParams {
95
+ export interface GetUsersDataParams extends BaseParams {
95
96
  filters: {
96
97
  imei: string;
97
98
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/nova-orm",
3
- "version": "1.0.62",
3
+ "version": "1.0.63",
4
4
  "description": "ORM with PlanetScale",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",