nodecommons-esm-models 0.0.2

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.
Files changed (55) hide show
  1. package/dist/classes/commons-first-class.d.mts +42 -0
  2. package/dist/classes/commons-first-class.mjs +262 -0
  3. package/dist/classes/commons-first-class.mjs.map +1 -0
  4. package/dist/classes/commons-hierarchy.d.mts +41 -0
  5. package/dist/classes/commons-hierarchy.mjs +479 -0
  6. package/dist/classes/commons-hierarchy.mjs.map +1 -0
  7. package/dist/classes/commons-m2m-link-table.d.mts +29 -0
  8. package/dist/classes/commons-m2m-link-table.mjs +241 -0
  9. package/dist/classes/commons-m2m-link-table.mjs.map +1 -0
  10. package/dist/classes/commons-model-foreign-key.d.mts +7 -0
  11. package/dist/classes/commons-model-foreign-key.mjs +8 -0
  12. package/dist/classes/commons-model-foreign-key.mjs.map +1 -0
  13. package/dist/classes/commons-model.d.mts +53 -0
  14. package/dist/classes/commons-model.mjs +192 -0
  15. package/dist/classes/commons-model.mjs.map +1 -0
  16. package/dist/classes/commons-multi-parent-second-class.d.mts +45 -0
  17. package/dist/classes/commons-multi-parent-second-class.mjs +335 -0
  18. package/dist/classes/commons-multi-parent-second-class.mjs.map +1 -0
  19. package/dist/classes/commons-ordered.d.mts +29 -0
  20. package/dist/classes/commons-ordered.mjs +217 -0
  21. package/dist/classes/commons-ordered.mjs.map +1 -0
  22. package/dist/classes/commons-orientated-ordered.d.mts +17 -0
  23. package/dist/classes/commons-orientated-ordered.mjs +279 -0
  24. package/dist/classes/commons-orientated-ordered.mjs.map +1 -0
  25. package/dist/classes/commons-relation.d.mts +27 -0
  26. package/dist/classes/commons-relation.mjs +138 -0
  27. package/dist/classes/commons-relation.mjs.map +1 -0
  28. package/dist/classes/commons-second-class.d.mts +51 -0
  29. package/dist/classes/commons-second-class.mjs +301 -0
  30. package/dist/classes/commons-second-class.mjs.map +1 -0
  31. package/dist/enums/ecommons-import-export-encoding.d.mts +19 -0
  32. package/dist/enums/ecommons-import-export-encoding.mjs +111 -0
  33. package/dist/enums/ecommons-import-export-encoding.mjs.map +1 -0
  34. package/dist/helpers/commons-import-export.d.mts +13 -0
  35. package/dist/helpers/commons-import-export.mjs +195 -0
  36. package/dist/helpers/commons-import-export.mjs.map +1 -0
  37. package/dist/index.d.mts +18 -0
  38. package/dist/index.mjs +14 -0
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/interfaces/commons-modelable.d.mts +11 -0
  41. package/dist/interfaces/commons-modelable.mjs +2 -0
  42. package/dist/interfaces/commons-modelable.mjs.map +1 -0
  43. package/dist/types/tcommons-import-export-encodings.d.mts +4 -0
  44. package/dist/types/tcommons-import-export-encodings.mjs +2 -0
  45. package/dist/types/tcommons-import-export-encodings.mjs.map +1 -0
  46. package/dist/types/tcommons-import-export-values.d.mts +7 -0
  47. package/dist/types/tcommons-import-export-values.mjs +2 -0
  48. package/dist/types/tcommons-import-export-values.mjs.map +1 -0
  49. package/dist/types/tcommons-model-foreign-keys.d.mts +4 -0
  50. package/dist/types/tcommons-model-foreign-keys.mjs +2 -0
  51. package/dist/types/tcommons-model-foreign-keys.mjs.map +1 -0
  52. package/dist/types/tcommons-model-multi-parents.d.mts +6 -0
  53. package/dist/types/tcommons-model-multi-parents.mjs +2 -0
  54. package/dist/types/tcommons-model-multi-parents.mjs.map +1 -0
  55. package/package.json +33 -0
@@ -0,0 +1,241 @@
1
+ import { commonsTypeHasProperty } from 'tscommons-esm-core';
2
+ import { CommonsDatabaseTypeId, ECommonsDatabaseTypeNull, ECommonsDatabaseReferentialAction, CommonsDatabaseUniqueKey, CommonsDatabaseParam } from 'nodecommons-esm-database';
3
+ import { CommonsModel } from './commons-model.mjs';
4
+ import { CommonsOrdered } from './commons-ordered.mjs';
5
+ import { CommonsOrientatedOrdered } from './commons-orientated-ordered.mjs';
6
+ import { CommonsHierarchy } from './commons-hierarchy.mjs';
7
+ import { CommonsModelForeignKey } from './commons-model-foreign-key.mjs';
8
+ function buildM2MLinkStructure(structure, aField, bField) {
9
+ if (structure[aField] !== undefined)
10
+ throw new Error('Link fields are implicit for M2M link table models and should not be explicitly stated in the structure');
11
+ if (structure[bField] !== undefined)
12
+ throw new Error('Link fields are implicit for M2M link table models and should not be explicitly stated in the structure');
13
+ structure[aField] = new CommonsDatabaseTypeId(ECommonsDatabaseTypeNull.NOT_NULL);
14
+ structure[bField] = new CommonsDatabaseTypeId(ECommonsDatabaseTypeNull.NOT_NULL);
15
+ return structure;
16
+ }
17
+ function buildM2MLinkForeignKeys(foreignKeys = {}, aFirstClass, bFirstClass, aField, bField, tableName) {
18
+ if (foreignKeys[aField] !== undefined)
19
+ throw new Error('Do not specify the foreign key relationship directly for M2M models');
20
+ if (foreignKeys[bField] !== undefined)
21
+ throw new Error('Do not specify the foreign key relationship directly for M2M models');
22
+ foreignKeys[aField] = new CommonsModelForeignKey(aFirstClass, ECommonsDatabaseReferentialAction.CASCADE, ECommonsDatabaseReferentialAction.CASCADE, `${tableName}__fk_a`);
23
+ foreignKeys[bField] = new CommonsModelForeignKey(bFirstClass, ECommonsDatabaseReferentialAction.CASCADE, ECommonsDatabaseReferentialAction.CASCADE, `${tableName}__fk_b`);
24
+ return foreignKeys;
25
+ }
26
+ function buildUniqueKeys(uniqueKeys = [], aField, bField, tableName) {
27
+ uniqueKeys.push(new CommonsDatabaseUniqueKey([aField, bField], `${tableName}__uk`));
28
+ return uniqueKeys;
29
+ }
30
+ export class CommonsM2MLinkTable extends CommonsModel {
31
+ internalAFirstClass;
32
+ internalBFirstClass;
33
+ internalAField;
34
+ internalBField;
35
+ constructor(database, tableName, internalAFirstClass, internalBFirstClass, internalAField, internalBField, structure, foreignKeys = {}, uniqueKeys = [], indexKeys = []) {
36
+ super(database, tableName, buildM2MLinkStructure(structure, internalAField, internalBField), buildM2MLinkForeignKeys(foreignKeys, internalAFirstClass, internalBFirstClass, internalAField, internalBField, tableName), buildUniqueKeys(uniqueKeys, internalAField, internalBField, tableName), indexKeys);
37
+ this.internalAFirstClass = internalAFirstClass;
38
+ this.internalBFirstClass = internalBFirstClass;
39
+ this.internalAField = internalAField;
40
+ this.internalBField = internalBField;
41
+ }
42
+ get aFirstClass() {
43
+ return this.internalAFirstClass;
44
+ }
45
+ get bFirstClass() {
46
+ return this.internalBFirstClass;
47
+ }
48
+ get aField() {
49
+ return this.internalAField;
50
+ }
51
+ get bField() {
52
+ return this.internalBField;
53
+ }
54
+ get aFieldType() {
55
+ return this.structure[this.internalAField];
56
+ }
57
+ get bFieldType() {
58
+ return this.structure[this.internalBField];
59
+ }
60
+ //-------------------------------------------------------------------------
61
+ defineViews() {
62
+ super.defineViews();
63
+ const aFields = Object.keys(this.internalAFirstClass.structure)
64
+ .map((field) => this.derivedField('tempAFirstClass', field))
65
+ .join(',');
66
+ const bFields = Object.keys(this.internalBFirstClass.structure)
67
+ .map((field) => this.derivedField('tempBFirstClass', field))
68
+ .join(',');
69
+ this.defineView('M2M_JOIN_B2A', `
70
+ SELECT ${aFields},
71
+ ${this.derivedField('tempBFirstClass', this.internalBFirstClass.idField)} AS ${this.tempField('remoteId')}
72
+ FROM ${this.model(this.internalAFirstClass)} AS ${this.derived('tempAFirstClass')}
73
+ INNER JOIN ${this.model(this)}
74
+ ON ${this.modelField(this, this.internalAField)} = ${this.derivedField('tempAFirstClass', this.internalAFirstClass.idField)}
75
+ INNER JOIN ${this.model(this.internalBFirstClass)} AS ${this.derived('tempBFirstClass')}
76
+ ON ${this.modelField(this, this.internalBField)} = ${this.derivedField('tempBFirstClass', this.internalBFirstClass.idField)}
77
+ `);
78
+ this.defineView('M2M_JOIN_A2B', `
79
+ SELECT ${bFields},
80
+ ${this.derivedField('tempAFirstClass', this.internalAFirstClass.idField)} AS ${this.tempField('remoteId')}
81
+ FROM ${this.model(this.internalBFirstClass)} AS ${this.derived('tempBFirstClass')}
82
+ INNER JOIN ${this.model(this)}
83
+ ON ${this.modelField(this, this.internalBField)} = ${this.derivedField('tempBFirstClass', this.internalBFirstClass.idField)}
84
+ INNER JOIN ${this.model(this.internalAFirstClass)} AS ${this.derived('tempAFirstClass')}
85
+ ON ${this.modelField(this, this.internalAField)} = ${this.derivedField('tempAFirstClass', this.internalAFirstClass.idField)}
86
+ `);
87
+ this.defineView('M2M_JOIN_DIRECT', `
88
+ SELECT ${this.fields},
89
+ ${this.derivedField('tempAFirstClass', this.internalAFirstClass.idField)} AS ${this.tempField('aId')},
90
+ ${this.derivedField('tempBFirstClass', this.internalBFirstClass.idField)} AS ${this.tempField('bId')}
91
+ FROM ${this.model(this)}
92
+ INNER JOIN ${this.model(this.internalAFirstClass)} AS ${this.derived('tempAFirstClass')}
93
+ ON ${this.modelField(this, this.internalAField)} = ${this.derivedField('tempAFirstClass', this.internalAFirstClass.idField)}
94
+ INNER JOIN ${this.model(this.internalBFirstClass)} AS ${this.derived('tempBFirstClass')}
95
+ ON ${this.modelField(this, this.internalBField)} = ${this.derivedField('tempBFirstClass', this.internalBFirstClass.idField)}
96
+ `);
97
+ }
98
+ preprepare() {
99
+ super.preprepare();
100
+ const aFields = Object.keys(this.internalAFirstClass.structure)
101
+ .map((field) => this.modelViewField(this, 'M2M_JOIN_B2A', field))
102
+ .join(',');
103
+ const bFields = Object.keys(this.internalBFirstClass.structure)
104
+ .map((field) => this.modelViewField(this, 'M2M_JOIN_A2B', field))
105
+ .join(',');
106
+ {
107
+ const sql = [
108
+ `
109
+ SELECT ${aFields}
110
+ FROM ${this.modelView(this, 'M2M_JOIN_B2A')}
111
+ WHERE ${this.modelViewField(this, 'M2M_JOIN_B2A', 'remoteId')} = :id
112
+ `
113
+ ];
114
+ if (this.internalAFirstClass instanceof CommonsOrdered || this.internalAFirstClass instanceof CommonsOrientatedOrdered || this.internalAFirstClass instanceof CommonsHierarchy) {
115
+ sql.push(`ORDER BY ${this.internalAFirstClass.orderedField} ASC`);
116
+ }
117
+ this.database.preprepare(`MODELS_M2MLINKTABLE__${this.name}__LIST_AS_BY_B`, sql.join(' ').trim(), {
118
+ id: this.bFirstClass.structure.id
119
+ }, this.internalAFirstClass.structure);
120
+ }
121
+ {
122
+ const sql = [
123
+ `
124
+ SELECT ${bFields}
125
+ FROM ${this.modelView(this, 'M2M_JOIN_A2B')}
126
+ WHERE ${this.modelViewField(this, 'M2M_JOIN_A2B', 'remoteId')} = :id
127
+ `
128
+ ];
129
+ if (this.internalBFirstClass instanceof CommonsOrdered || this.internalBFirstClass instanceof CommonsOrientatedOrdered || this.internalBFirstClass instanceof CommonsHierarchy) {
130
+ sql.push(`ORDER BY ${this.internalBFirstClass.orderedField} ASC`);
131
+ }
132
+ this.database.preprepare(`MODELS_M2MLINKTABLE__${this.name}__LIST_BS_BY_A`, sql.join(' ').trim(), {
133
+ id: this.aFirstClass.structure.id
134
+ }, this.internalBFirstClass.structure);
135
+ }
136
+ }
137
+ //-------------------------------------------------------------------------
138
+ async listAsByB(b) {
139
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
140
+ return await this.database.executeParams(`MODELS_M2MLINKTABLE__${this.name}__LIST_AS_BY_B`, {
141
+ id: b.id
142
+ });
143
+ }
144
+ async listBsByA(a) {
145
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
146
+ return await this.database.executeParams(`MODELS_M2MLINKTABLE__${this.name}__LIST_BS_BY_A`, {
147
+ id: a.id
148
+ });
149
+ }
150
+ //-------------------------------------------------------------------------
151
+ async isLinked(a, b) {
152
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
153
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
154
+ const conditions = {};
155
+ conditions[this.internalAField] = new CommonsDatabaseParam(a.id, this.aFieldType);
156
+ conditions[this.internalBField] = new CommonsDatabaseParam(b.id, this.bFieldType);
157
+ return await this.database.doesRowExistByConditions(this.name, conditions);
158
+ }
159
+ async getLinkRow(a, b) {
160
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
161
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
162
+ const conditions = {};
163
+ conditions[this.internalAField] = new CommonsDatabaseParam(a.id, this.aFieldType);
164
+ conditions[this.internalBField] = new CommonsDatabaseParam(b.id, this.bFieldType);
165
+ const rows = await this.database.selectRowsByConditions(this.name, this.structure, conditions);
166
+ if (rows.length === 0)
167
+ throw new Error('No such link row exists');
168
+ if (rows.length > 1)
169
+ throw new Error('More than one link row appears to exist. This should not be possible.');
170
+ return rows[0];
171
+ }
172
+ //-------------------------------------------------------------------------
173
+ async link(a, b, values) {
174
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
175
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
176
+ if (values[this.internalAField] !== undefined)
177
+ throw new Error('The aField is implicit for M2MLinkTable models and should not be explicitly provided in the values');
178
+ values[this.internalAField] = a.id;
179
+ if (values[this.internalBField] !== undefined)
180
+ throw new Error('The bField is implicit for M2MLinkTable models and should not be explicitly provided in the values');
181
+ values[this.internalBField] = b.id;
182
+ await this.insert(values);
183
+ }
184
+ async unlink(a, b, ignoreMissingLink = false) {
185
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
186
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
187
+ const isTransactionOwner = await this.database.transactionClaim();
188
+ try {
189
+ const conditions = {};
190
+ conditions[this.internalAField] = new CommonsDatabaseParam(a.id, this.aFieldType);
191
+ conditions[this.internalBField] = new CommonsDatabaseParam(b.id, this.bFieldType);
192
+ const count = await this.database.countRowsByConditions(this.name, conditions);
193
+ if (count !== 1) {
194
+ if (count === 0 && ignoreMissingLink) {
195
+ if (isTransactionOwner)
196
+ await this.database.transactionCommit();
197
+ return;
198
+ }
199
+ throw new Error(`Unable to unlink because no such link exists or more than one exists: ${a[this.internalAFirstClass.idField]} - ${b[this.internalBFirstClass.idField]}`); // eslint-disable-line @typescript-eslint/restrict-template-expressions
200
+ }
201
+ await this.database.deleteRowsByConditions(this.name, conditions);
202
+ if (isTransactionOwner)
203
+ await this.database.transactionCommit();
204
+ }
205
+ catch (e) {
206
+ if (isTransactionOwner)
207
+ await this.database.transactionRollback();
208
+ console.error(e);
209
+ throw e;
210
+ }
211
+ }
212
+ async deleteAllForA(a) {
213
+ CommonsModel.assertIdObject(a, this.internalAFirstClass.idField);
214
+ const conditions = {};
215
+ conditions[this.internalAField] = new CommonsDatabaseParam(a.id, this.aFieldType);
216
+ await this.database.deleteRowsByConditions(this.name, conditions);
217
+ }
218
+ async deleteAllForB(b) {
219
+ CommonsModel.assertIdObject(b, this.internalBFirstClass.idField);
220
+ const conditions = {};
221
+ conditions[this.internalBField] = new CommonsDatabaseParam(b.id, this.aFieldType);
222
+ await this.database.deleteRowsByConditions(this.name, conditions);
223
+ }
224
+ async updateLinkRow(row) {
225
+ CommonsModel.assertIdObject(row, this.internalAField);
226
+ CommonsModel.assertIdObject(row, this.internalBField);
227
+ const params = {};
228
+ for (const field of Object.keys(row)) {
229
+ if (field === this.internalAField || field === this.internalBField)
230
+ continue;
231
+ if (!commonsTypeHasProperty(this.structure, field))
232
+ throw new Error(`Parameter variable is missing in the model structure: ${field}`);
233
+ params[field] = new CommonsDatabaseParam(row[field], this.structure[field]);
234
+ }
235
+ const conditions = {};
236
+ conditions[this.internalAField] = new CommonsDatabaseParam(row[this.internalAField], this.aFieldType);
237
+ conditions[this.internalBField] = new CommonsDatabaseParam(row[this.internalBField], this.bFieldType);
238
+ await this.database.updateRowsByConditions(this.name, params, conditions, true);
239
+ }
240
+ }
241
+ //# sourceMappingURL=commons-m2m-link-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-m2m-link-table.mjs","sourceRoot":"","sources":["../../src/classes/commons-m2m-link-table.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ICommonsFirstClass } from 'tscommons-esm-models';
2
+ import { CommonsDatabaseForeignKey, TCommonsDatabaseDbValues, TCommonsDatabaseParams, TCommonsDatabaseTypes } from 'nodecommons-esm-database';
3
+ import { ECommonsDatabaseReferentialAction } from 'nodecommons-esm-database';
4
+ import { CommonsFirstClass } from './commons-first-class.mjs';
5
+ export declare class CommonsModelForeignKey<DestModelI extends ICommonsFirstClass = ICommonsFirstClass, DestModelParamsT extends TCommonsDatabaseParams = TCommonsDatabaseParams, DestModelTypesT extends TCommonsDatabaseTypes = TCommonsDatabaseTypes, DestModelDbValuesT extends TCommonsDatabaseDbValues = TCommonsDatabaseDbValues> extends CommonsDatabaseForeignKey {
6
+ constructor(destModel: CommonsFirstClass<DestModelI, DestModelParamsT, DestModelTypesT, DestModelDbValuesT>, onDelete?: ECommonsDatabaseReferentialAction, onUpdate?: ECommonsDatabaseReferentialAction, constraintName?: string);
7
+ }
@@ -0,0 +1,8 @@
1
+ import { CommonsDatabaseForeignKey } from 'nodecommons-esm-database';
2
+ import { ECommonsDatabaseReferentialAction } from 'nodecommons-esm-database';
3
+ export class CommonsModelForeignKey extends CommonsDatabaseForeignKey {
4
+ constructor(destModel, onDelete = ECommonsDatabaseReferentialAction.CASCADE, onUpdate = ECommonsDatabaseReferentialAction.CASCADE, constraintName) {
5
+ super(destModel.name, destModel.idField, onDelete, onUpdate, constraintName);
6
+ }
7
+ }
8
+ //# sourceMappingURL=commons-model-foreign-key.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-model-foreign-key.mjs","sourceRoot":"","sources":["../../src/classes/commons-model-foreign-key.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAA2E,MAAM,0BAA0B,CAAC;AAC9I,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAI7E,MAAM,OAAO,sBAKX,SAAQ,yBAAyB;IAClC,YACE,SAKC,EACD,QAAQ,GAAG,iCAAiC,CAAC,OAAO,EACpD,QAAQ,GAAG,iCAAiC,CAAC,OAAO,EACpD,cAAuB;QAExB,KAAK,CACH,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,OAAO,EACjB,QAAQ,EACR,QAAQ,EACR,cAAc,CACf,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,53 @@
1
+ import { ICommonsModel } from 'tscommons-esm-models';
2
+ import { ICommonsCredentials, TCommonsDatabaseDbValues, CommonsDatabaseIndexKey, CommonsDatabaseUniqueKey, CommonsSqlDatabaseService, TCommonsDatabaseParams, TCommonsDatabaseTypes } from 'nodecommons-esm-database';
3
+ import { CommonsModelable } from '../interfaces/commons-modelable.mjs';
4
+ import { TCommonsModelForeignKeys } from '../types/tcommons-model-foreign-keys.mjs';
5
+ type TModelFields = {
6
+ [field: string]: string;
7
+ };
8
+ export declare class CommonsModel<ModelI extends ICommonsModel, ModelParamsT extends TCommonsDatabaseParams, ModelTypesT extends TCommonsDatabaseTypes, ModelDbValuesT extends TCommonsDatabaseDbValues> implements CommonsModelable<ModelI, ModelTypesT> {
9
+ protected database: CommonsSqlDatabaseService<ICommonsCredentials>;
10
+ private tableName;
11
+ private internalStructure;
12
+ private internalForeignKeys;
13
+ private internalUniqueKeys;
14
+ private internalIndexKeys;
15
+ static assertId(value: any): number | never;
16
+ static assertIdObject(object: ICommonsModel, idField: string): ICommonsModel;
17
+ protected fields: string;
18
+ private views;
19
+ constructor(database: CommonsSqlDatabaseService<ICommonsCredentials>, tableName: string, internalStructure: ModelTypesT, internalForeignKeys?: TCommonsModelForeignKeys, internalUniqueKeys?: CommonsDatabaseUniqueKey[], internalIndexKeys?: CommonsDatabaseIndexKey[]);
20
+ init(): void;
21
+ protected modelFieldArray(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>): TModelFields;
22
+ protected modelFieldCsv(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>): string;
23
+ protected defineViews(): void;
24
+ listViews(): {
25
+ [name: string]: string;
26
+ };
27
+ get name(): string;
28
+ get structure(): ModelTypesT;
29
+ get foreignKeys(): TCommonsModelForeignKeys;
30
+ get uniqueKeys(): CommonsDatabaseUniqueKey[];
31
+ get indexKeys(): CommonsDatabaseIndexKey[];
32
+ table(table: string): string;
33
+ view(table: string, view: string): string;
34
+ modelView(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>, name: string): string;
35
+ tableField(table: string, field: string): string;
36
+ viewField(table: string, name: string, field: string): string;
37
+ derived(name: string): string;
38
+ derivedField(name: string, field: string): string;
39
+ model(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>): string;
40
+ modelField(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>, field: string): string;
41
+ modelViewField(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>, name: string, field: string): string;
42
+ tempField(field: string): string;
43
+ setField(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>, field: string): string;
44
+ protected modelFieldsCsv(model: CommonsModelable<ICommonsModel, TCommonsDatabaseTypes>): string;
45
+ protected preprepare(): void;
46
+ protected defineView(name: string, sql: string): void;
47
+ createTable(ifNotExists?: boolean): Promise<void>;
48
+ dropTable(ifExists?: boolean): Promise<void>;
49
+ listAll(): Promise<ModelI[]>;
50
+ countAll(): Promise<number>;
51
+ insert(values: Partial<ModelI>): Promise<void>;
52
+ }
53
+ export {};
@@ -0,0 +1,192 @@
1
+ import { commonsTypeAssertNumber, commonsTypeAssertObject, commonsTypeHasPropertyNumber, commonsObjectMapObject, commonsTypeHasProperty, MAX_SIGNED_32BIT_INTEGER } from 'tscommons-esm-core';
2
+ import { commonsDatabaseTable, commonsDatabaseView, commonsDatabaseTableField, commonsDatabaseViewField, commonsDatabaseTempField, commonsDatabaseSetField, CommonsDatabaseParam, CommonsDatabaseTypeInt, ECommonsDatabaseEngine, ECommonsDatabaseTypeNull, ECommonsDatabaseTypeSigned } from 'nodecommons-esm-database';
3
+ export class CommonsModel {
4
+ database;
5
+ tableName;
6
+ internalStructure;
7
+ internalForeignKeys;
8
+ internalUniqueKeys;
9
+ internalIndexKeys;
10
+ static assertId(value) {
11
+ const asserted = commonsTypeAssertNumber(value);
12
+ if (asserted < 0 || asserted >= MAX_SIGNED_32BIT_INTEGER)
13
+ throw new Error('Assertion fail: variable is not an ID number');
14
+ return asserted;
15
+ }
16
+ static assertIdObject(object, idField) {
17
+ try {
18
+ commonsTypeAssertObject(object);
19
+ if (!commonsTypeHasPropertyNumber(object, idField))
20
+ throw new Error(`No ${idField} field present in object data`);
21
+ CommonsModel.assertId(object[idField]);
22
+ return object;
23
+ }
24
+ catch (_e) {
25
+ throw new Error('Assertion fail: variable is not an ID object');
26
+ }
27
+ }
28
+ fields;
29
+ views = new Map();
30
+ constructor(database, tableName, internalStructure, internalForeignKeys = {}, internalUniqueKeys = [], internalIndexKeys = []) {
31
+ this.database = database;
32
+ this.tableName = tableName;
33
+ this.internalStructure = internalStructure;
34
+ this.internalForeignKeys = internalForeignKeys;
35
+ this.internalUniqueKeys = internalUniqueKeys;
36
+ this.internalIndexKeys = internalIndexKeys;
37
+ this.fields = this.modelFieldCsv(this);
38
+ // we have to split the defineViews and preprepare into a second post-constructor method, as sometimes field parameters may not have been set
39
+ }
40
+ init() {
41
+ this.defineViews();
42
+ this.preprepare();
43
+ }
44
+ modelFieldArray(model) {
45
+ return commonsObjectMapObject(model.structure, (_, field) => this.modelField(model, field));
46
+ }
47
+ modelFieldCsv(model) {
48
+ const modelFields = this.modelFieldArray(model);
49
+ return Object.values(modelFields).join(',');
50
+ }
51
+ defineViews() {
52
+ // to be overridden if desired
53
+ }
54
+ listViews() {
55
+ const obj = {};
56
+ for (const name of this.views.keys()) {
57
+ obj[name] = this.views.get(name);
58
+ }
59
+ return obj;
60
+ }
61
+ get name() {
62
+ return this.tableName;
63
+ }
64
+ get structure() {
65
+ return this.internalStructure;
66
+ }
67
+ get foreignKeys() {
68
+ return this.internalForeignKeys;
69
+ }
70
+ get uniqueKeys() {
71
+ return this.internalUniqueKeys;
72
+ }
73
+ get indexKeys() {
74
+ return this.internalIndexKeys;
75
+ }
76
+ table(table) {
77
+ return commonsDatabaseTable(table, this.database.engine);
78
+ }
79
+ view(table, view) {
80
+ return commonsDatabaseView(table, view, this.database.engine);
81
+ }
82
+ modelView(model, name) {
83
+ return this.view(model.name, name);
84
+ }
85
+ tableField(table, field) {
86
+ return commonsDatabaseTableField(table, field, this.database.engine);
87
+ }
88
+ viewField(table, name, field) {
89
+ return commonsDatabaseViewField(table, name, field, this.database.engine);
90
+ }
91
+ derived(name) {
92
+ return this.table(name);
93
+ }
94
+ derivedField(name, field) {
95
+ return this.tableField(name, field);
96
+ }
97
+ model(model) {
98
+ return this.table(model.name);
99
+ }
100
+ modelField(model, field) {
101
+ return this.tableField(model.name, field);
102
+ }
103
+ modelViewField(model, name, field) {
104
+ return this.viewField(model.name, name, field);
105
+ }
106
+ tempField(field) {
107
+ return commonsDatabaseTempField(field, this.database.engine);
108
+ }
109
+ setField(model, field) {
110
+ return commonsDatabaseSetField(model.name, field, this.database.engine);
111
+ }
112
+ modelFieldsCsv(model) {
113
+ return Object.keys(model.structure)
114
+ .map((field) => this.modelField(model, field))
115
+ .join(',');
116
+ }
117
+ preprepare() {
118
+ this.database.preprepare(`MODELS__${this.tableName}__LIST_ALL`, `
119
+ SELECT ${this.modelFieldsCsv(this)}
120
+ FROM ${this.table(this.tableName)}
121
+ `, undefined, this.internalStructure);
122
+ }
123
+ defineView(name, sql) {
124
+ if (this.views.has(name))
125
+ throw new Error(`A view definition within the model with that name already exists: ${name}`);
126
+ this.views.set(name, sql);
127
+ }
128
+ async createTable(ifNotExists = false) {
129
+ const alreadyExists = await this.database.doesTableExist(this.tableName);
130
+ switch (this.database.engine) {
131
+ case ECommonsDatabaseEngine.MYSQL:
132
+ case ECommonsDatabaseEngine.POSTGRES: {
133
+ await this.database.createTable(this.tableName, this.internalStructure, ifNotExists);
134
+ if (!alreadyExists) {
135
+ for (const linkField of Object.keys(this.internalForeignKeys)) {
136
+ const foreign = this.internalForeignKeys[linkField];
137
+ await this.database.createForeignKey(this.tableName, foreign.table, linkField, foreign.field, foreign.onDelete, foreign.onUpdate, foreign.constraintName);
138
+ }
139
+ for (const unique of this.internalUniqueKeys) {
140
+ await this.database.createUniqueKey(this.tableName, unique.fields, unique.constraintName);
141
+ }
142
+ for (const index of this.internalIndexKeys) {
143
+ await this.database.createIndexKey(this.tableName, index.fields, index.constraintName);
144
+ }
145
+ }
146
+ break;
147
+ }
148
+ case ECommonsDatabaseEngine.SQLITE: {
149
+ // SQLite doesn't support retrospective foreign keys, so have to be created at the time of table creation
150
+ // this allows us a dirty type checking skip to save having to import the database-sqlite package into this generic models one
151
+ const typecast = this.database;
152
+ await typecast.createTableWithKeys(this.tableName, this.internalStructure, ifNotExists, this.internalForeignKeys, this.internalUniqueKeys);
153
+ break;
154
+ }
155
+ default:
156
+ throw new Error('Unknown database type for model create table');
157
+ }
158
+ if (!alreadyExists) {
159
+ for (const name of this.views.keys()) {
160
+ const sql = this.views.get(name);
161
+ await this.database.createView(this.tableName, name, sql);
162
+ }
163
+ }
164
+ }
165
+ async dropTable(ifExists = false) {
166
+ for (const name of this.views.keys()) {
167
+ await this.database.dropView(this.tableName, name); // views are silently dropped if they don't exist
168
+ }
169
+ await this.database.dropTable(this.tableName, this.internalStructure, ifExists);
170
+ }
171
+ async listAll() {
172
+ return await this.database.executeParams(`MODELS__${this.tableName}__LIST_ALL`);
173
+ }
174
+ async countAll() {
175
+ const count = await this.database.queryParamsValue(`
176
+ SELECT COUNT(*) AS ${this.tempField('count')}
177
+ FROM ${this.model(this)}
178
+ `, undefined, 'count', new CommonsDatabaseTypeInt(ECommonsDatabaseTypeSigned.UNSIGNED, ECommonsDatabaseTypeNull.NOT_NULL));
179
+ if (count === undefined)
180
+ throw new Error('Unable to count model entries');
181
+ return count;
182
+ }
183
+ async insert(values) {
184
+ const params = commonsObjectMapObject(values, (value, key) => {
185
+ if (!commonsTypeHasProperty(this.internalStructure, key))
186
+ throw new Error(`Parameter variable is missing in the model structure: ${key}`);
187
+ return new CommonsDatabaseParam(value, this.internalStructure[key]);
188
+ });
189
+ await this.database.insertRow(this.tableName, params);
190
+ }
191
+ }
192
+ //# sourceMappingURL=commons-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-model.mjs","sourceRoot":"","sources":["../../src/classes/commons-model.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { ICommonsFirstClass, ICommonsMultiParentSecondClass } from 'tscommons-esm-models';
2
+ import { TCommonsDatabaseTypes, CommonsDatabaseTypeId, TCommonsDatabaseParams, TCommonsDatabaseDbValues, CommonsSqlDatabaseService, ICommonsCredentials, CommonsDatabaseUniqueKey, CommonsDatabaseIndexKey, ECommonsDatabaseOrderBy } from 'nodecommons-esm-database';
3
+ import { TCommonsModelForeignKeys } from '../types/tcommons-model-foreign-keys.mjs';
4
+ import { TCommonsMultiParents } from '../types/tcommons-model-multi-parents.mjs';
5
+ import { CommonsFirstClass, TInternalFirstClassModelValueId } from './commons-first-class.mjs';
6
+ import { TInternalFirstClassExcludeId } from './commons-first-class.mjs';
7
+ type TFirstClassParents = {
8
+ [fieldName: string]: ICommonsFirstClass;
9
+ };
10
+ export declare class CommonsMultiParentSecondClass<ModelI extends ICommonsMultiParentSecondClass, ModelParamsT extends TInternalFirstClassExcludeId<TCommonsDatabaseParams>, ModelTypesT extends TInternalFirstClassExcludeId<TCommonsDatabaseTypes>, ModelDbValuesT extends TInternalFirstClassExcludeId<TCommonsDatabaseDbValues>> extends CommonsFirstClass<ModelI, ModelParamsT, ModelTypesT, ModelDbValuesT> {
11
+ private internalFirstClasses;
12
+ constructor(database: CommonsSqlDatabaseService<ICommonsCredentials>, tableName: string, structure: ModelTypesT, internalFirstClasses: TCommonsMultiParents, foreignKeys?: TCommonsModelForeignKeys, uniqueKeys?: CommonsDatabaseUniqueKey[], indexKeys?: CommonsDatabaseIndexKey[]);
13
+ get firstClasses(): TCommonsMultiParents;
14
+ protected firstClassFieldType(field: string): CommonsDatabaseTypeId;
15
+ protected defineViews(): void;
16
+ protected preprepare(): void;
17
+ listByFirstClassParents(firstClassObjects: TFirstClassParents): Promise<ModelI[]>;
18
+ getById(_id: number): Promise<ModelI | undefined>;
19
+ getByIdOnly(id: number): Promise<ModelI | undefined>;
20
+ protected internalMultiParentSecondClassGetByFirstClassAndId(firstClassObjects: TFirstClassParents, id: number): Promise<ModelI | undefined>;
21
+ getByFirstClassesAndId(firstClassObjects: TFirstClassParents, id: number): Promise<ModelI | undefined>;
22
+ bulkGetByIds(_ids: number[], _orderBy?: {
23
+ [field: string]: ECommonsDatabaseOrderBy;
24
+ }): Promise<ModelI[]>;
25
+ bulkGetByFirstClassesAndIds(firstClassObjects: TFirstClassParents, ids: number[], orderBy?: {
26
+ [field: string]: ECommonsDatabaseOrderBy;
27
+ }): Promise<ModelI[]>;
28
+ searchIdsForNonencryptedFields(_value: string, _fields: string[]): Promise<number[]>;
29
+ searchIdsForEncryptedFields(_value: string, _fields: string[]): Promise<number[]>;
30
+ searchFields(_value: string, _fields: string[], _orderBy?: {
31
+ [field: string]: ECommonsDatabaseOrderBy;
32
+ }): Promise<ModelI[]>;
33
+ searchIdsForNonencryptedFieldsByFirstClass(firstClassObjects: TFirstClassParents, value: string, fields: string[]): Promise<number[]>;
34
+ searchIdsForEncryptedFieldsByFirstClass(firstClassObjects: TFirstClassParents, value: string, fields: string[]): Promise<number[]>;
35
+ searchFieldsByFirstClass(firstClassObjects: TFirstClassParents, value: string, fields: string[], orderBy?: {
36
+ [field: string]: ECommonsDatabaseOrderBy;
37
+ }): Promise<ModelI[]>;
38
+ insertFirstClass(_values: TInternalFirstClassExcludeId<Partial<ModelI>>): Promise<ModelI>;
39
+ insertForFirstClasses(firstClassObjects: TFirstClassParents, values: TInternalFirstClassExcludeId<Partial<ModelI>>): Promise<ModelI>;
40
+ delete(_object: ModelI): Promise<void>;
41
+ deleteForFirstClasses(firstClassObjects: TFirstClassParents, object: ModelI): Promise<void>;
42
+ deleteAllForFirstClasses(firstClassObjects: TFirstClassParents): Promise<void>;
43
+ updateForFirstClass(firstClassObjects: TFirstClassParents, object: Partial<ModelI> & TInternalFirstClassModelValueId): Promise<void>;
44
+ }
45
+ export {};