@squiz/db-lib 1.71.1 → 1.71.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/lib/AbstractRepository.d.ts +57 -0
  3. package/lib/AbstractRepository.d.ts.map +1 -0
  4. package/lib/AbstractRepository.integration.spec.d.ts +2 -0
  5. package/lib/AbstractRepository.integration.spec.d.ts.map +1 -0
  6. package/lib/AbstractRepository.integration.spec.js +118 -0
  7. package/lib/AbstractRepository.integration.spec.js.map +1 -0
  8. package/lib/AbstractRepository.js +187 -0
  9. package/lib/AbstractRepository.js.map +1 -0
  10. package/lib/ConnectionManager.d.ts +26 -0
  11. package/lib/ConnectionManager.d.ts.map +1 -0
  12. package/lib/ConnectionManager.js +58 -0
  13. package/lib/ConnectionManager.js.map +1 -0
  14. package/lib/Migrator.d.ts +25 -0
  15. package/lib/Migrator.d.ts.map +1 -0
  16. package/lib/Migrator.js +160 -0
  17. package/lib/Migrator.js.map +1 -0
  18. package/lib/PostgresErrorCodes.d.ts +269 -0
  19. package/lib/PostgresErrorCodes.d.ts.map +1 -0
  20. package/lib/PostgresErrorCodes.js +274 -0
  21. package/lib/PostgresErrorCodes.js.map +1 -0
  22. package/lib/Repositories.d.ts +3 -0
  23. package/lib/Repositories.d.ts.map +1 -0
  24. package/lib/Repositories.js +3 -0
  25. package/lib/Repositories.js.map +1 -0
  26. package/lib/dynamodb/AbstractDynamoDbRepository.d.ts +162 -0
  27. package/lib/dynamodb/AbstractDynamoDbRepository.d.ts.map +1 -0
  28. package/lib/dynamodb/AbstractDynamoDbRepository.js +367 -0
  29. package/lib/dynamodb/AbstractDynamoDbRepository.js.map +1 -0
  30. package/lib/dynamodb/AbstractDynamoDbRepository.spec.d.ts +27 -0
  31. package/lib/dynamodb/AbstractDynamoDbRepository.spec.d.ts.map +1 -0
  32. package/lib/dynamodb/AbstractDynamoDbRepository.spec.js +698 -0
  33. package/lib/dynamodb/AbstractDynamoDbRepository.spec.js.map +1 -0
  34. package/lib/dynamodb/DynamoDbManager.d.ts +19 -0
  35. package/lib/dynamodb/DynamoDbManager.d.ts.map +1 -0
  36. package/lib/dynamodb/DynamoDbManager.js +66 -0
  37. package/lib/dynamodb/DynamoDbManager.js.map +1 -0
  38. package/lib/dynamodb/getDynamoDbOptions.d.ts +13 -0
  39. package/lib/dynamodb/getDynamoDbOptions.d.ts.map +1 -0
  40. package/lib/dynamodb/getDynamoDbOptions.js +15 -0
  41. package/lib/dynamodb/getDynamoDbOptions.js.map +1 -0
  42. package/lib/error/DuplicateItemError.d.ts +6 -0
  43. package/lib/error/DuplicateItemError.d.ts.map +1 -0
  44. package/lib/error/DuplicateItemError.js +12 -0
  45. package/lib/error/DuplicateItemError.js.map +1 -0
  46. package/lib/error/InvalidDataFormatError.d.ts +6 -0
  47. package/lib/error/InvalidDataFormatError.d.ts.map +1 -0
  48. package/lib/error/InvalidDataFormatError.js +12 -0
  49. package/lib/error/InvalidDataFormatError.js.map +1 -0
  50. package/lib/error/InvalidDbSchemaError.d.ts +6 -0
  51. package/lib/error/InvalidDbSchemaError.d.ts.map +1 -0
  52. package/lib/error/InvalidDbSchemaError.js +12 -0
  53. package/lib/error/InvalidDbSchemaError.js.map +1 -0
  54. package/lib/error/MissingKeyValuesError.d.ts +6 -0
  55. package/lib/error/MissingKeyValuesError.d.ts.map +1 -0
  56. package/lib/error/MissingKeyValuesError.js +12 -0
  57. package/lib/error/MissingKeyValuesError.js.map +1 -0
  58. package/lib/error/TransactionError.d.ts +6 -0
  59. package/lib/error/TransactionError.d.ts.map +1 -0
  60. package/lib/error/TransactionError.js +12 -0
  61. package/lib/error/TransactionError.js.map +1 -0
  62. package/lib/getConnectionInfo.d.ts +6 -0
  63. package/lib/getConnectionInfo.d.ts.map +1 -0
  64. package/lib/getConnectionInfo.js +30 -0
  65. package/lib/getConnectionInfo.js.map +1 -0
  66. package/lib/index.d.ts +15 -0
  67. package/lib/index.d.ts.map +1 -0
  68. package/lib/index.js +34 -0
  69. package/lib/index.js.map +1 -0
  70. package/package.json +5 -5
  71. package/src/AbstractRepository.ts +26 -20
  72. package/src/dynamodb/AbstractDynamoDbRepository.ts +1 -1
  73. package/src/dynamodb/getDynamoDbOptions.ts +1 -1
  74. package/tsconfig.json +5 -2
  75. package/tsconfig.tsbuildinfo +1 -1
  76. package/build.js +0 -31
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.71.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 1187eec: manual bump of dx-common-lib version
8
+ - Updated dependencies [1187eec]
9
+ - @squiz/dx-common-lib@1.68.3
10
+
11
+ ## 1.71.2
12
+
13
+ ### Patch Changes
14
+
15
+ - d9a8506: fix up publish compilation
16
+
3
17
  ## 1.71.1
4
18
 
5
19
  ### Patch Changes
@@ -0,0 +1,57 @@
1
+ import { PoolClient, Pool } from 'pg';
2
+ import { Repositories } from './Repositories';
3
+ export interface Reader<T> {
4
+ find(item: Partial<T>): Promise<T[]>;
5
+ findOne(id: string | Partial<T>): Promise<T | undefined>;
6
+ }
7
+ export interface Writer<T> {
8
+ create(value: Partial<T>): Promise<T>;
9
+ update(where: Partial<T>, newValue: Partial<T>): Promise<T[]>;
10
+ delete(where: Partial<T>): Promise<number>;
11
+ }
12
+ export type Repository<T> = Reader<T> & Writer<T>;
13
+ export type PageResult<T> = {
14
+ items: T[];
15
+ totalCount: number;
16
+ pageSize: number;
17
+ };
18
+ export type SortDirection = 'desc' | 'asc';
19
+ export declare const DEFAULT_PAGE_SIZE = 20;
20
+ export declare abstract class AbstractRepository<SHAPE extends object, DATA_CLASS extends SHAPE> implements Reader<SHAPE>, Writer<SHAPE> {
21
+ protected repositories: Repositories;
22
+ protected pool: Pool;
23
+ protected classRef: {
24
+ new (data?: Record<string, unknown>): DATA_CLASS;
25
+ };
26
+ protected tableName: string;
27
+ /** object where the key is the model property name amd the value is sql column name */
28
+ protected modelPropertyToSqlColumn: {
29
+ [key in keyof SHAPE]: string;
30
+ };
31
+ /** object where the key is the sql column name and the value is the model property name */
32
+ protected sqlColumnToModelProperty: {
33
+ [key: string]: string;
34
+ };
35
+ constructor(repositories: Repositories, pool: Pool, tableName: string, mapping: {
36
+ [key in keyof SHAPE]: string;
37
+ }, classRef: {
38
+ new (data?: Record<string, unknown>): DATA_CLASS;
39
+ });
40
+ protected getConnection(): Promise<PoolClient>;
41
+ private sanitiseValue;
42
+ create(value: SHAPE, transactionClient?: PoolClient | null): Promise<SHAPE>;
43
+ update(where: Partial<SHAPE>, newValue: Exclude<Partial<SHAPE>, Record<string, never>>, transactionClient?: PoolClient | null): Promise<SHAPE[]>;
44
+ delete(where: Partial<SHAPE>, transactionClient?: PoolClient | null): Promise<number>;
45
+ protected createWhereStringFromPartialModel(values: Partial<SHAPE>, initialIndex?: number): string;
46
+ protected executeQueryRaw(query: string, values: any[], transactionClient?: PoolClient | null): Promise<any[]>;
47
+ executeQuery(query: string, values: any[], transactionClient?: PoolClient | null): Promise<SHAPE[]>;
48
+ protected createAndHydrateModel(row: any): SHAPE;
49
+ findOne(item: Partial<SHAPE>, transactionClient?: PoolClient): Promise<SHAPE | undefined>;
50
+ find(item: Partial<SHAPE>): Promise<SHAPE[]>;
51
+ findAll(): Promise<SHAPE[]>;
52
+ getCount(item?: Partial<SHAPE> | null): Promise<number>;
53
+ getPage(pageNumber: number, sortBy?: (keyof SHAPE)[], direction?: SortDirection, pageSize?: number | null, item?: Partial<SHAPE> | null): Promise<PageResult<SHAPE>>;
54
+ getCountRaw(whereClause?: string, values?: any[], tableRef?: string): Promise<number>;
55
+ getPageRaw(pageNumber: number, sortBy?: (keyof SHAPE)[], direction?: SortDirection, whereClause?: string, tableRef?: string, values?: any[], pageSize?: number | null, searchFields?: Partial<SHAPE> | null): Promise<PageResult<SHAPE>>;
56
+ }
57
+ //# sourceMappingURL=AbstractRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRepository.d.ts","sourceRoot":"","sources":["../src/AbstractRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AbstractRepository.integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRepository.integration.spec.d.ts","sourceRoot":"","sources":["../src/AbstractRepository.integration.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AbstractRepository_1 = require("./AbstractRepository");
4
+ const ConnectionManager_1 = require("./ConnectionManager");
5
+ class RepoTest {
6
+ constructor(data = {}) {
7
+ var _a, _b, _c, _d, _e, _f;
8
+ this.lowercase = (_a = data.lowercase) !== null && _a !== void 0 ? _a : 'some lowercase';
9
+ this.camelCase = (_b = data.camelCase) !== null && _b !== void 0 ? _b : 'some camelCase';
10
+ this.PascalCase = (_c = data.PascalCase) !== null && _c !== void 0 ? _c : 'some PascalCase';
11
+ this.snake_case = (_d = data.snake_case) !== null && _d !== void 0 ? _d : 'some snake_case';
12
+ this['kebab-case'] = (_e = data['kebab-case']) !== null && _e !== void 0 ? _e : 'some kebab-case';
13
+ this.UPPERCASE = (_f = data.UPPERCASE) !== null && _f !== void 0 ? _f : 'some UPPERCASE';
14
+ }
15
+ }
16
+ function defaultMapping() {
17
+ return {
18
+ lowercase: 'lowercase',
19
+ camelCase: 'camel_case',
20
+ PascalCase: 'pascal_case',
21
+ snake_case: 'snake_case',
22
+ 'kebab-case': 'kebab_case',
23
+ UPPERCASE: 'uppercase',
24
+ };
25
+ }
26
+ const allProperties = Object.keys(defaultMapping());
27
+ class AbstractRepositoryIntegrationTest extends AbstractRepository_1.AbstractRepository {
28
+ }
29
+ describe('AbstractRepository', () => {
30
+ let db;
31
+ beforeAll(async () => {
32
+ db = new ConnectionManager_1.ConnectionManager('AbstractRepositoryIntegrationTest', process.env.COMPONENT_DB_CONNECTION_STRING, '', [], (db) => ({
33
+ test: new AbstractRepositoryIntegrationTest(db.repositories, db.pool, 'abstract_repository_db_test', defaultMapping(), RepoTest),
34
+ }));
35
+ await db.pool.query(`
36
+ CREATE TABLE IF NOT EXISTS abstract_repository_db_test (
37
+ lowercase text,
38
+ camel_case text,
39
+ pascal_case text,
40
+ snake_case text,
41
+ kebab_case text,
42
+ uppercase text
43
+ );
44
+ `);
45
+ });
46
+ afterAll(async () => {
47
+ await db.pool.query('DROP TABLE IF EXISTS abstract_repository_db_test;');
48
+ await db.close();
49
+ });
50
+ describe('properties are always mapped to columns', () => {
51
+ beforeEach(async () => {
52
+ await db.pool.query('DELETE FROM abstract_repository_db_test;');
53
+ });
54
+ it('create', async () => {
55
+ const repo = db.repositories.test;
56
+ const data = new RepoTest();
57
+ const result = await repo.create(data);
58
+ expect(result).toEqual(data);
59
+ });
60
+ it.each(allProperties)('update %s', async (property) => {
61
+ const repo = db.repositories.test;
62
+ const data = await repo.create(new RepoTest());
63
+ const result = await repo.update({ [property]: data[property] }, { [property]: `new ${data[property]}` });
64
+ expect(result).toEqual([{ ...data, [property]: `new ${data[property]}` }]);
65
+ });
66
+ it.each(allProperties)('delete %s', async (property) => {
67
+ const repo = db.repositories.test;
68
+ const data = await repo.create(new RepoTest());
69
+ const result = await repo.delete({ [property]: data[property] });
70
+ expect(result).toEqual(1);
71
+ });
72
+ it.each(allProperties)('findOne %s', async (property) => {
73
+ const repo = db.repositories.test;
74
+ const findData = await repo.create(new RepoTest({ [property]: 'some value' }));
75
+ const _differentData = await repo.create(new RepoTest({ [property]: 'some other value' }));
76
+ const result = await repo.findOne({ [property]: findData[property] });
77
+ expect(result).toEqual(findData);
78
+ });
79
+ it.each(allProperties)('find %s', async (property) => {
80
+ const repo = db.repositories.test;
81
+ const findData = await repo.create(new RepoTest({ [property]: 'some value' }));
82
+ const _differentData = await repo.create(new RepoTest({ [property]: 'some other value' }));
83
+ const result = await repo.find({ [property]: findData[property] });
84
+ expect(result).toEqual([findData]);
85
+ });
86
+ it.each(allProperties)('findAll %s', async (property) => {
87
+ const repo = db.repositories.test;
88
+ const findData = await repo.create(new RepoTest({ [property]: 'some value' }));
89
+ const differentData = await repo.create(new RepoTest({ [property]: 'some other value' }));
90
+ const result = await repo.findAll();
91
+ expect(result).toEqual([findData, differentData]);
92
+ });
93
+ it.each(allProperties)('getPage %s', async (property) => {
94
+ const repo = db.repositories.test;
95
+ const firstData = await repo.create(new RepoTest({ [property]: 'aaaaa' }));
96
+ const secondData = await repo.create(new RepoTest({ [property]: 'bbbb' }));
97
+ const ascResult = await repo.getPage(1, [property], 'asc');
98
+ expect(ascResult).toMatchObject({ items: [firstData, secondData], totalCount: 2 });
99
+ const descResult = await repo.getPage(1, [property], 'desc');
100
+ expect(descResult).toMatchObject({ items: [secondData, firstData], totalCount: 2 });
101
+ });
102
+ it.each(allProperties)('getPageRaw %s', async (property) => {
103
+ const repo = db.repositories.test;
104
+ const firstData = await repo.create(new RepoTest({ [property]: 'aaaaa' }));
105
+ const secondData = await repo.create(new RepoTest({ [property]: 'bbbb' }));
106
+ const ascResult = await repo.getPageRaw(1, [property], 'asc');
107
+ expect(ascResult).toMatchObject({ items: [firstData, secondData], totalCount: 2 });
108
+ const descResult = await repo.getPageRaw(1, [property], 'desc');
109
+ expect(descResult).toMatchObject({ items: [secondData, firstData], totalCount: 2 });
110
+ });
111
+ it.each(allProperties)('update Fails when new value is empty object - %s', async (property) => {
112
+ const repo = db.repositories.test;
113
+ const data = await repo.create(new RepoTest());
114
+ await expect(repo.update({ [property]: data[property] }, {})).rejects.toThrowErrorMatchingInlineSnapshot('"Failed updating the repository, update values cannot be empty"');
115
+ });
116
+ });
117
+ });
118
+ //# sourceMappingURL=AbstractRepository.integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRepository.integration.spec.js","sourceRoot":"","sources":["../src/AbstractRepository.integration.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractRepository = exports.DEFAULT_PAGE_SIZE = void 0;
4
+ const pg_1 = require("pg");
5
+ const dx_common_lib_1 = require("@squiz/dx-common-lib");
6
+ exports.DEFAULT_PAGE_SIZE = 20;
7
+ class AbstractRepository {
8
+ constructor(repositories, pool, tableName, mapping, classRef) {
9
+ this.repositories = repositories;
10
+ this.pool = pool;
11
+ this.classRef = classRef;
12
+ this.tableName = `"${tableName}"`;
13
+ this.modelPropertyToSqlColumn = mapping;
14
+ this.sqlColumnToModelProperty = Object.entries(mapping).reduce((prev, curr) => {
15
+ const [modelProp, columnName] = curr;
16
+ prev[columnName] = modelProp;
17
+ return prev;
18
+ }, {});
19
+ }
20
+ async getConnection() {
21
+ return await this.pool.connect();
22
+ }
23
+ sanitiseValue(value) {
24
+ const sanitisedValue = Object.entries(value)
25
+ .map(([key, value]) => [this.modelPropertyToSqlColumn[key], value])
26
+ .filter(([column, _v]) => !!column);
27
+ const columns = sanitisedValue.map(([column]) => (0, pg_1.escapeIdentifier)(column));
28
+ const bindingParams = sanitisedValue.map((_, index) => `$${index + 1}`);
29
+ const values = sanitisedValue.map(([_column, value]) => value);
30
+ return {
31
+ columns,
32
+ bindingParams,
33
+ values,
34
+ };
35
+ }
36
+ async create(value, transactionClient = null) {
37
+ const valueAsClass = new this.classRef(value);
38
+ const { columns, bindingParams, values } = this.sanitiseValue(valueAsClass);
39
+ const result = await this.executeQuery(`INSERT INTO ${this.tableName} (${columns.join(', ')}) VALUES (${bindingParams.join(', ')}) RETURNING *`, values, transactionClient);
40
+ return result[0];
41
+ }
42
+ async update(where, newValue, transactionClient = null) {
43
+ if (Object.keys(newValue).length === 0) {
44
+ throw new dx_common_lib_1.InvalidUpdateValueError('Failed updating the repository, update values cannot be empty');
45
+ }
46
+ const whereValues = Object.values(where);
47
+ const newValues = this.sanitiseValue(newValue);
48
+ const setValues = newValues.columns.map((c, i) => `${c} = ${newValues.bindingParams[i]}`);
49
+ const whereString = this.createWhereStringFromPartialModel(where, setValues.length);
50
+ const result = await this.executeQuery(`UPDATE ${this.tableName}
51
+ SET ${setValues.join(', ')}
52
+ WHERE ${whereString}
53
+ RETURNING *`, [...newValues.values, ...whereValues], transactionClient);
54
+ return result;
55
+ }
56
+ async delete(where, transactionClient = null) {
57
+ var _a;
58
+ const client = transactionClient !== null && transactionClient !== void 0 ? transactionClient : (await this.getConnection());
59
+ try {
60
+ const whereString = this.createWhereStringFromPartialModel(where);
61
+ const result = await client.query(`DELETE FROM ${this.tableName} WHERE ${whereString}`, Object.values(where));
62
+ return (_a = result.rowCount) !== null && _a !== void 0 ? _a : 0;
63
+ }
64
+ finally {
65
+ if (client && !transactionClient) {
66
+ client.release();
67
+ }
68
+ }
69
+ }
70
+ createWhereStringFromPartialModel(values, initialIndex = 0) {
71
+ const keys = Object.keys(values);
72
+ if (keys.length == 0) {
73
+ throw new Error(`Values cannot be an empty object. It must have at least one property`);
74
+ }
75
+ const sql = keys.reduce((acc, key, index) => {
76
+ const condition = `"${this.modelPropertyToSqlColumn[key]}" = $${1 + index + initialIndex}`;
77
+ return acc === '' ? `${acc} ${condition}` : `${acc} AND ${condition}`;
78
+ }, '');
79
+ return sql;
80
+ }
81
+ async executeQueryRaw(query, values, transactionClient = null) {
82
+ const client = transactionClient !== null && transactionClient !== void 0 ? transactionClient : (await this.getConnection());
83
+ try {
84
+ const result = await client.query(query, values);
85
+ return result.rows;
86
+ }
87
+ finally {
88
+ if (client && !transactionClient) {
89
+ client.release();
90
+ }
91
+ }
92
+ }
93
+ async executeQuery(query, values, transactionClient = null) {
94
+ const rows = await this.executeQueryRaw(query, values, transactionClient);
95
+ return rows.map((a) => this.createAndHydrateModel(a));
96
+ }
97
+ createAndHydrateModel(row) {
98
+ const inputData = {};
99
+ for (const key of Object.keys(row)) {
100
+ const translatedKey = this.sqlColumnToModelProperty[key];
101
+ inputData[translatedKey] = row[key];
102
+ }
103
+ return new this.classRef(inputData);
104
+ }
105
+ async findOne(item, transactionClient) {
106
+ const result = await this.executeQuery(`SELECT *
107
+ FROM ${this.tableName}
108
+ WHERE ${this.createWhereStringFromPartialModel(item)}
109
+ LIMIT 1`, Object.values(item), transactionClient);
110
+ return result[0];
111
+ }
112
+ async find(item) {
113
+ const result = await this.executeQuery(`SELECT *
114
+ FROM ${this.tableName}
115
+ WHERE ${this.createWhereStringFromPartialModel(item)}`, Object.values(item));
116
+ return result;
117
+ }
118
+ async findAll() {
119
+ const result = await this.executeQuery(`SELECT *
120
+ FROM ${this.tableName}`, []);
121
+ return result;
122
+ }
123
+ async getCount(item = null) {
124
+ let whereClause = '';
125
+ if (item) {
126
+ whereClause = `WHERE ${this.createWhereStringFromPartialModel(item)}`;
127
+ }
128
+ return this.getCountRaw(whereClause, item ? Object.values(item) : []);
129
+ }
130
+ async getPage(pageNumber, sortBy = [], direction = 'asc', pageSize = null, item = null) {
131
+ let whereClause = '';
132
+ if (item) {
133
+ whereClause = `WHERE ${this.createWhereStringFromPartialModel(item)}`;
134
+ }
135
+ return this.getPageRaw(pageNumber, sortBy, direction, whereClause, this.tableName, Object.values(item !== null && item !== void 0 ? item : {}), pageSize);
136
+ }
137
+ async getCountRaw(whereClause = '', values = [], tableRef = '') {
138
+ const result = await this.executeQueryRaw(`SELECT COUNT(*) FROM ${this.tableName} ${tableRef} ${whereClause}`, values);
139
+ return parseInt(result[0].count);
140
+ }
141
+ async getPageRaw(pageNumber, sortBy = [], direction = 'asc', whereClause = '', tableRef = '', values = [], pageSize = null, searchFields = null) {
142
+ if (pageSize === null) {
143
+ pageSize = exports.DEFAULT_PAGE_SIZE;
144
+ }
145
+ if (pageNumber <= 0) {
146
+ throw new Error(`Page number value cannot be less than 1`);
147
+ }
148
+ if (pageSize <= 0) {
149
+ throw new Error(`Page size value cannot be less than 1`);
150
+ }
151
+ let orderByClause = '';
152
+ if (sortBy.length) {
153
+ orderByClause = `ORDER BY ${sortBy
154
+ .map((a) => this.modelPropertyToSqlColumn[a])
155
+ .join(',')} ${direction}`;
156
+ }
157
+ const offset = (pageNumber - 1) * pageSize;
158
+ if (searchFields !== null) {
159
+ const searchFieldsWhere = [];
160
+ for (const [key, value] of Object.entries(searchFields)) {
161
+ if (typeof value !== 'string') {
162
+ throw new Error(`Search field ${key} needs to be of type string`);
163
+ }
164
+ searchFieldsWhere.push(`${this.modelPropertyToSqlColumn[key]} LIKE $${values.length + 1}`);
165
+ values.push(`%${value}%`);
166
+ }
167
+ if (whereClause.length) {
168
+ whereClause = `${whereClause} AND`;
169
+ }
170
+ whereClause = `${whereClause} (${searchFieldsWhere.join(' OR ')})`;
171
+ }
172
+ const query = `
173
+ SELECT *
174
+ FROM ${this.tableName} ${tableRef} ${whereClause} ${orderByClause}
175
+ OFFSET ${offset}
176
+ LIMIT ${pageSize}
177
+ `;
178
+ const items = await this.executeQuery(query, values);
179
+ return {
180
+ items,
181
+ totalCount: await this.getCountRaw(whereClause, values, tableRef),
182
+ pageSize,
183
+ };
184
+ }
185
+ }
186
+ exports.AbstractRepository = AbstractRepository;
187
+ //# sourceMappingURL=AbstractRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRepository.js","sourceRoot":"","sources":["../src/AbstractRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Pool } from 'pg';
2
+ import { PoolClient } from 'pg';
3
+ import { Repositories } from './Repositories';
4
+ export interface DbConnection {
5
+ user: string;
6
+ password: string;
7
+ host: string;
8
+ port: number;
9
+ database: string;
10
+ }
11
+ export interface ConnectionStringObj {
12
+ connectionString: string;
13
+ }
14
+ export type TransactionClient = PoolClient;
15
+ export declare class ConnectionManager<T extends Repositories> {
16
+ protected applicationName: string;
17
+ protected migrationDirectory: string;
18
+ protected migrationList: string[];
19
+ readonly pool: Pool;
20
+ readonly repositories: T;
21
+ constructor(applicationName: string, connection: string | DbConnection, migrationDirectory: string, migrationList: string[], repositoryCreator: (dbManager: ConnectionManager<T>) => T);
22
+ applyMigrations(): Promise<void>;
23
+ close(): Promise<void>;
24
+ executeInTransaction<T>(func: (client: TransactionClient) => Promise<T>): Promise<T>;
25
+ }
26
+ //# sourceMappingURL=ConnectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../src/ConnectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAK1B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE3C,qBAAa,iBAAiB,CAAC,CAAC,SAAS,YAAY;IAKjD,SAAS,CAAC,eAAe,EAAE,MAAM;IAEjC,SAAS,CAAC,kBAAkB,EAAE,MAAM;IACpC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE;IAPnC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,SAAgB,YAAY,EAAE,CAAC,CAAC;gBAGpB,eAAe,EAAE,MAAM,EACjC,UAAU,EAAE,MAAM,GAAG,YAAY,EACvB,kBAAkB,EAAE,MAAM,EAC1B,aAAa,EAAE,MAAM,EAAE,EACjC,iBAAiB,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;IAyB9C,eAAe;IAOf,KAAK;IAKL,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAiBlG"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionManager = void 0;
4
+ const pg_1 = require("pg");
5
+ // import os from 'os';
6
+ const Migrator_1 = require("./Migrator");
7
+ class ConnectionManager {
8
+ constructor(applicationName, connection, migrationDirectory, migrationList, repositoryCreator) {
9
+ this.applicationName = applicationName;
10
+ this.migrationDirectory = migrationDirectory;
11
+ this.migrationList = migrationList;
12
+ let connectionInfo;
13
+ if (typeof connection === 'string') {
14
+ connectionInfo = { connectionString: connection };
15
+ }
16
+ else {
17
+ connectionInfo = connection;
18
+ }
19
+ this.pool = new pg_1.Pool({
20
+ ...connectionInfo,
21
+ application_name: applicationName,
22
+ query_timeout: 5000, // TODO consider
23
+ // idleTimeoutMillis: 0, // TODO consider
24
+ // connectionTimeoutMillis: 2000,
25
+ // max: os.cpus().length * 2,
26
+ });
27
+ this.repositories = repositoryCreator(this);
28
+ }
29
+ async applyMigrations() {
30
+ const connection = await this.pool.connect();
31
+ const migrator = new Migrator_1.Migrator(this.migrationDirectory, this.migrationList, connection);
32
+ await migrator.migrate();
33
+ }
34
+ async close() {
35
+ await this.pool.end();
36
+ this.pool.removeAllListeners();
37
+ }
38
+ async executeInTransaction(func) {
39
+ const client = await this.pool.connect();
40
+ try {
41
+ await client.query('BEGIN');
42
+ const value = await func(client);
43
+ await client.query('COMMIT');
44
+ return value;
45
+ }
46
+ catch (e) {
47
+ await client.query('ROLLBACK');
48
+ throw e;
49
+ }
50
+ finally {
51
+ if (client) {
52
+ client.release();
53
+ }
54
+ }
55
+ }
56
+ }
57
+ exports.ConnectionManager = ConnectionManager;
58
+ //# sourceMappingURL=ConnectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../src/ConnectionManager.ts"],"names":[],"mappings":";;;AAAA,2BAA0B;AAE1B,uBAAuB;AACvB,yCAAsC;AAmBtC,MAAa,iBAAiB;IAI5B,YACY,eAAuB,EACjC,UAAiC,EACvB,kBAA0B,EAC1B,aAAuB,EACjC,iBAAyD;QAJ/C,oBAAe,GAAf,eAAe,CAAQ;QAEvB,uBAAkB,GAAlB,kBAAkB,CAAQ;QAC1B,kBAAa,GAAb,aAAa,CAAU;QAGjC,IAAI,cAAkD,CAAC;QAEvD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,cAAc,GAAG,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;SACnD;aAAM;YACL,cAAc,GAAG,UAAU,CAAC;SAC7B;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,SAAI,CAAC;YACnB,GAAG,cAAc;YAEjB,gBAAgB,EAAE,eAAe;YAEjC,aAAa,EAAE,IAAI,EAAE,gBAAgB;YACrC,yCAAyC;YACzC,iCAAiC;YAEjC,6BAA6B;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACvF,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAI,IAA+C;QAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAEzC,IAAI;YACF,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,OAAO,EAAE,CAAC;aAClB;SACF;IACH,CAAC;CACF;AA/DD,8CA+DC"}
@@ -0,0 +1,25 @@
1
+ import { PoolClient } from 'pg';
2
+ import { Logger } from '@squiz/dx-logger-lib';
3
+ export type Migration = {
4
+ (db: PoolClient, logger: Logger): Promise<void>;
5
+ };
6
+ export declare class Migrator {
7
+ protected migrationDir: string;
8
+ protected migrationList: string[];
9
+ protected pool: PoolClient;
10
+ constructor(migrationDir: string, migrationList: string[], pool: PoolClient);
11
+ protected ensureMigrationTableExists(): Promise<import("pg").QueryResult<any>>;
12
+ protected getAppliedMigrations(): Promise<any[]>;
13
+ protected doSqlMigration(migration: string, sql: string): Promise<void>;
14
+ protected getPending(migrationsList: string[], appliedMigrations: string[]): Promise<string[]>;
15
+ protected getSql(migration: string): Promise<string>;
16
+ protected tryToObtainLock(): Promise<boolean>;
17
+ protected releaseLock(): Promise<void>;
18
+ migrate(): Promise<any>;
19
+ protected runMigrations(): Promise<void>;
20
+ protected doScriptMigration(migration: string): Promise<void>;
21
+ protected runMigration(migration: string): Promise<void>;
22
+ protected doMigrationWork(migration: string): Promise<void>;
23
+ protected dispose(): void;
24
+ }
25
+ //# sourceMappingURL=Migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Migrator.d.ts","sourceRoot":"","sources":["../src/Migrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAa,MAAM,sBAAsB,CAAC;AAQzD,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,CAAC;AAEF,qBAAa,QAAQ;IACP,SAAS,CAAC,YAAY,EAAE,MAAM;IAAE,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE;IAAE,SAAS,CAAC,IAAI,EAAE,UAAU;gBAAnF,YAAY,EAAE,MAAM,EAAY,aAAa,EAAE,MAAM,EAAE,EAAY,IAAI,EAAE,UAAU;cAEzF,0BAA0B;cAI1B,oBAAoB;cASpB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;cAc7C,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;cAiChE,MAAM,CAAC,SAAS,EAAE,MAAM;cAMxB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;cAMnC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;cAsBpB,aAAa;cAgBb,iBAAiB,CAAC,SAAS,EAAE,MAAM;cAkBnC,YAAY,CAAC,SAAS,EAAE,MAAM;cAe9B,eAAe,CAAC,SAAS,EAAE,MAAM;IAWjD,SAAS,CAAC,OAAO;CAGlB"}