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,42 @@
1
+ import { TPropertyObject } from 'tscommons-esm-core';
2
+ import { ICommonsFirstClass } from 'tscommons-esm-models';
3
+ import { CommonsDatabaseIndexKey, CommonsDatabaseParam, CommonsDatabaseTypeSerialId, CommonsDatabaseUniqueKey, CommonsSqlDatabaseService, ECommonsDatabaseOrderBy, ICommonsCredentials, TCommonsDatabaseDbValues, TCommonsDatabaseParams, TCommonsDatabaseTypes, TCommonsDatabaseValues } from 'nodecommons-esm-database';
4
+ import { TCommonsModelForeignKeys } from '../types/tcommons-model-foreign-keys.mjs';
5
+ import { CommonsModel } from './commons-model.mjs';
6
+ export type TInternalFirstClassModelParamId = {
7
+ id: CommonsDatabaseParam<number, number>;
8
+ };
9
+ export type TInternalFirstClassModelTypeId = {
10
+ id: CommonsDatabaseTypeSerialId;
11
+ };
12
+ export type TInternalFirstClassModelValueId = Pick<ICommonsFirstClass, 'id'>;
13
+ export type TInternalFirstClassModelDbValueId = TInternalFirstClassModelValueId;
14
+ export type TInternalFirstClassExcludeId<T extends TPropertyObject> = Omit<T, 'id'> & {
15
+ id?: never;
16
+ };
17
+ export type TInternalFirstClassModelParams<ModelParamsT extends TCommonsDatabaseParams> = Omit<ModelParamsT, 'id'> & TInternalFirstClassModelParamId;
18
+ export type TInternalFirstClassModelTypes<ModelTypesT extends TCommonsDatabaseTypes> = Omit<ModelTypesT, 'id'> & TInternalFirstClassModelTypeId;
19
+ export type TInternalFirstClassModelValues<ModelValuesT extends TCommonsDatabaseValues> = Omit<ModelValuesT, 'id'> & TInternalFirstClassModelValueId;
20
+ export type TInternalFirstClassModelDbValues<ModelDbValuesT extends TCommonsDatabaseDbValues> = Omit<ModelDbValuesT, 'id'> & TInternalFirstClassModelDbValueId;
21
+ export declare class CommonsFirstClass<ModelI extends ICommonsFirstClass, ModelParamsT extends TInternalFirstClassExcludeId<TCommonsDatabaseParams>, ModelTypesT extends TInternalFirstClassExcludeId<TCommonsDatabaseTypes>, ModelDbValuesT extends TInternalFirstClassExcludeId<TCommonsDatabaseDbValues>> extends CommonsModel<ModelI, TInternalFirstClassModelParams<ModelParamsT>, TInternalFirstClassModelTypes<ModelTypesT>, TInternalFirstClassModelDbValues<ModelDbValuesT>> {
22
+ constructor(database: CommonsSqlDatabaseService<ICommonsCredentials>, tableName: string, structure: ModelTypesT, foreignKeys?: TCommonsModelForeignKeys, uniqueKeys?: CommonsDatabaseUniqueKey[], indexKeys?: CommonsDatabaseIndexKey[]);
23
+ static get idField(): string;
24
+ get idField(): string;
25
+ protected preprepare(): void;
26
+ protected internalFirstClassGetById(id: number): Promise<ModelI | undefined>;
27
+ getById(id: number): Promise<ModelI | undefined>;
28
+ refresh(object: TInternalFirstClassModelValueId): Promise<ModelI>;
29
+ bulkGetByIds(ids: number[], orderBy?: {
30
+ [field: string]: ECommonsDatabaseOrderBy;
31
+ }): Promise<ModelI[]>;
32
+ searchIdsForNonencryptedFields(value: string, fields: string[]): Promise<number[]>;
33
+ searchIdsForEncryptedFields(value: string, fields: string[]): Promise<number[]>;
34
+ searchFields(value: string, fields: string[], orderBy?: {
35
+ [field: string]: ECommonsDatabaseOrderBy;
36
+ }): Promise<ModelI[]>;
37
+ insert(_values: Partial<ModelI>): Promise<void>;
38
+ insertFirstClass(values: TInternalFirstClassExcludeId<Partial<ModelI>>): Promise<ModelI>;
39
+ delete(object: ModelI): Promise<void>;
40
+ update(object: Partial<ModelI> & TInternalFirstClassModelValueId): Promise<void>;
41
+ defragment(): Promise<void>;
42
+ }
@@ -0,0 +1,262 @@
1
+ import { commonsTypeHasProperty, commonsTypeHasPropertyObject, commonsTypeHasPropertyString, commonsObjectMapObject, commonsArrayChunk, commonsArrayUnique } from 'tscommons-esm-core';
2
+ import { CommonsDatabaseParam, CommonsDatabaseTypeEncrypted, CommonsDatabaseTypeSerialId, CommonsDatabaseTypeString, CommonsDatabaseTypeText, ECommonsDatabaseEngine, ECommonsDatabaseTypeNull, fromECommonsDatabaseOrderBy } from 'nodecommons-esm-database';
3
+ import { CommonsModel } from './commons-model.mjs';
4
+ export class CommonsFirstClass extends CommonsModel {
5
+ constructor(database, tableName, structure, foreignKeys = {}, uniqueKeys = [], indexKeys = []) {
6
+ super(database, tableName, {
7
+ ...structure,
8
+ id: new CommonsDatabaseTypeSerialId()
9
+ }, foreignKeys, uniqueKeys, indexKeys);
10
+ // No harm to do this after to check
11
+ if (structure.id !== undefined)
12
+ throw new Error('The id field is implicit for FirstClass models and should not be explicitly stated in the structure');
13
+ }
14
+ static get idField() {
15
+ return 'id';
16
+ }
17
+ get idField() {
18
+ return CommonsFirstClass.idField;
19
+ }
20
+ //-------------------------------------------------------------------------
21
+ preprepare() {
22
+ super.preprepare();
23
+ this.database.preprepare(`MODELS_FIRSTCLASS__${this.name}__GET_BY_ID`, `
24
+ SELECT ${this.fields}
25
+ FROM ${this.model(this)}
26
+ WHERE ${this.modelField(this, this.idField)} = :id
27
+ `, {
28
+ id: this.structure.id
29
+ }, this.structure);
30
+ const results = {
31
+ id: this.structure.id
32
+ };
33
+ this.database.preprepare(`MODELS_FIRSTCLASS__${this.name}__LIST_ALL_IDS`, `
34
+ SELECT ${this.modelField(this, this.idField)}
35
+ FROM ${this.model(this)}
36
+ `, undefined, results);
37
+ switch (this.database.engine) {
38
+ case ECommonsDatabaseEngine.MYSQL:
39
+ this.database.preprepare(`MODELS_FIRSTCLASS__${this.name}__DEFRAGMENT`, `
40
+ UPDATE ${this.model(this)}
41
+ SET ${this.modelField(this, this.idField)} = :newid
42
+ WHERE ${this.modelField(this, this.idField)} = :oldid
43
+ LIMIT 1
44
+ `, {
45
+ newid: this.structure.id,
46
+ oldid: this.structure.id
47
+ });
48
+ break;
49
+ case ECommonsDatabaseEngine.POSTGRES:
50
+ case ECommonsDatabaseEngine.SQLITE:
51
+ this.database.preprepare(`MODELS_FIRSTCLASS__${this.name}__DEFRAGMENT`, `
52
+ UPDATE ${this.model(this)}
53
+ SET ${this.database.delimit(this.idField)} = :newid
54
+ WHERE ${this.modelField(this, this.idField)} = :oldid
55
+ `, {
56
+ newid: this.structure.id,
57
+ oldid: this.structure.id
58
+ });
59
+ break;
60
+ default:
61
+ throw new Error('Database type is not supported');
62
+ }
63
+ }
64
+ //-------------------------------------------------------------------------
65
+ async internalFirstClassGetById(id) {
66
+ return await this.database.executeParamsSingle(`MODELS_FIRSTCLASS__${this.name}__GET_BY_ID`, {
67
+ id: id
68
+ });
69
+ }
70
+ async getById(id) {
71
+ CommonsModel.assertId(id);
72
+ return await this.internalFirstClassGetById(id);
73
+ }
74
+ async refresh(object) {
75
+ CommonsModel.assertIdObject(object, this.idField);
76
+ const refreshed = await this.internalFirstClassGetById(object.id);
77
+ if (refreshed === undefined)
78
+ throw new Error('Refreshed object no longer exists');
79
+ return refreshed;
80
+ }
81
+ async bulkGetByIds(ids, orderBy) {
82
+ if (ids.length === 0)
83
+ return [];
84
+ if (ids.length > 255) {
85
+ const slice = ids.slice(0, 255);
86
+ const remainder = ids.slice(255);
87
+ return [
88
+ ...(await this.bulkGetByIds(slice, orderBy)),
89
+ ...(await this.bulkGetByIds(remainder, orderBy))
90
+ ];
91
+ }
92
+ for (const id of ids)
93
+ CommonsModel.assertId(id);
94
+ const idsString = ids
95
+ .map((id) => id.toString())
96
+ .join(',');
97
+ const query = [
98
+ `SELECT ${this.fields}`,
99
+ `FROM ${this.model(this)}`,
100
+ `WHERE ${this.modelField(this, this.idField)} IN (${idsString})`
101
+ ];
102
+ if (orderBy) {
103
+ const orderByClauses = [];
104
+ for (const field of Object.keys(orderBy)) {
105
+ const direction = orderBy[field];
106
+ orderByClauses.push(`${this.modelField(this, field)} ${fromECommonsDatabaseOrderBy(direction)}`);
107
+ }
108
+ if (orderByClauses.length > 0)
109
+ query.push(`ORDER BY ${orderByClauses.join(',')}`);
110
+ }
111
+ return await this.database.queryParams(query.join(' '), undefined, this.structure);
112
+ }
113
+ //-------------------------------------------------------------------------
114
+ async searchIdsForNonencryptedFields(value, fields) {
115
+ if (fields.length === 0)
116
+ return [];
117
+ const conditions = [];
118
+ for (const field of fields) {
119
+ if (!commonsTypeHasPropertyObject(this.structure, field))
120
+ throw new Error(`Unknown field to perform non encrypted search on: ${field}`);
121
+ if (this.structure[field] instanceof CommonsDatabaseTypeEncrypted)
122
+ throw new Error(`Attempting to search on an encrypted field: ${field}`);
123
+ if (!(this.structure[field] instanceof CommonsDatabaseTypeString || this.structure[field] instanceof CommonsDatabaseTypeText))
124
+ throw new Error(`Attempting to search on a non-string/text field: ${field}`);
125
+ conditions.push(`${this.modelField(this, field)} LIKE :valuea`);
126
+ conditions.push(`${this.modelField(this, field)} LIKE :valueb`);
127
+ conditions.push(`${this.modelField(this, field)} LIKE :valuec`);
128
+ conditions.push(`${this.modelField(this, field)} LIKE :valued`);
129
+ }
130
+ return await this.database.queryParamsList(`
131
+ SELECT ${this.idField}
132
+ FROM ${this.model(this)}
133
+ WHERE ${conditions.join(' OR ')}
134
+ `, {
135
+ valuea: new CommonsDatabaseParam(value, new CommonsDatabaseTypeString(255, ECommonsDatabaseTypeNull.NOT_NULL)),
136
+ valueb: new CommonsDatabaseParam(`${value}%`, new CommonsDatabaseTypeString(255, ECommonsDatabaseTypeNull.NOT_NULL)),
137
+ valuec: new CommonsDatabaseParam(`%${value}`, new CommonsDatabaseTypeString(255, ECommonsDatabaseTypeNull.NOT_NULL)),
138
+ valued: new CommonsDatabaseParam(`%${value}%`, new CommonsDatabaseTypeString(255, ECommonsDatabaseTypeNull.NOT_NULL))
139
+ }, this.idField, this.structure.id);
140
+ }
141
+ async searchIdsForEncryptedFields(value, fields) {
142
+ if (fields.length === 0)
143
+ return [];
144
+ const resultTypes = {
145
+ id: this.structure.id
146
+ };
147
+ const fieldnames = [];
148
+ for (const field of fields) {
149
+ if (!commonsTypeHasPropertyObject(this.structure, field))
150
+ throw new Error(`Unknown field to perform non encrypted search on: ${field}`);
151
+ if (!(this.structure[field] instanceof CommonsDatabaseTypeEncrypted))
152
+ throw new Error(`Attempting to search on a non-encrypted field: ${field}`);
153
+ resultTypes[field] = this.structure[field];
154
+ fieldnames.push(this.modelField(this, field));
155
+ }
156
+ resultTypes.id = this.structure.id;
157
+ const allIds = await this.database.executeParamsList(`MODELS_FIRSTCLASS__${this.name}__LIST_ALL_IDS`);
158
+ if (allIds.length === 0)
159
+ return [];
160
+ const chunks = commonsArrayChunk(allIds, 500);
161
+ const matches = [];
162
+ for (const ids of chunks) {
163
+ if (ids.length === 0)
164
+ continue;
165
+ const result = await this.database.queryParams(`
166
+ SELECT ${this.modelField(this, this.idField)}, ${fieldnames.join(',')},
167
+ FROM ${this.model(this)}
168
+ WHERE ${this.modelField(this, this.idField)} IN (${ids.join(',')})
169
+ `, undefined, resultTypes);
170
+ for (const row of result) {
171
+ for (const field of fields) {
172
+ if (!commonsTypeHasPropertyString(row, field))
173
+ continue;
174
+ const s = row[field];
175
+ if (!s.toLowerCase().includes(value.toLowerCase()))
176
+ continue;
177
+ matches.push(row.id);
178
+ }
179
+ }
180
+ }
181
+ return commonsArrayUnique(matches);
182
+ }
183
+ async searchFields(value, fields, orderBy) {
184
+ const encrypted = [];
185
+ const regular = [];
186
+ for (const field of fields) {
187
+ if (!commonsTypeHasPropertyObject(this.structure, field))
188
+ throw new Error(`Unknown field to perform search on: ${field}`);
189
+ if (this.structure[field] instanceof CommonsDatabaseTypeEncrypted) {
190
+ encrypted.push(field);
191
+ }
192
+ else {
193
+ regular.push(field);
194
+ }
195
+ }
196
+ const ids = [
197
+ ...(await this.searchIdsForEncryptedFields(value, encrypted)),
198
+ ...(await this.searchIdsForNonencryptedFields(value, regular))
199
+ ];
200
+ return await this.bulkGetByIds(commonsArrayUnique(ids), orderBy);
201
+ }
202
+ //-------------------------------------------------------------------------
203
+ insert(_values) {
204
+ throw new Error('Do not call insert directly, use insertFirstClass instead');
205
+ }
206
+ async insertFirstClass(values) {
207
+ if (commonsTypeHasProperty(values, this.idField))
208
+ throw new Error('ID fields should not be specified explicitly for FirstClass models');
209
+ const params = commonsObjectMapObject(values, (value, field) => {
210
+ if (!commonsTypeHasProperty(this.structure, field))
211
+ throw new Error(`Parameter variable is missing in the model structure: ${field}`);
212
+ return new CommonsDatabaseParam(value, this.structure[field]);
213
+ });
214
+ const isTransactionOwner = await this.database.transactionClaim();
215
+ try {
216
+ const id = await this.database.insertRow(this.name, params, this.idField);
217
+ if (id === undefined)
218
+ throw new Error(`There was an error inserting the data into table: ${this.name}`);
219
+ CommonsModel.assertId(id);
220
+ const object = await this.internalFirstClassGetById(id);
221
+ if (object === undefined)
222
+ throw new Error('Data was not actually inserted into the table');
223
+ CommonsModel.assertIdObject(object, this.idField);
224
+ if (isTransactionOwner)
225
+ await this.database.transactionCommit();
226
+ return object;
227
+ }
228
+ catch (e) {
229
+ if (isTransactionOwner)
230
+ await this.database.transactionRollback();
231
+ console.error(e);
232
+ throw e;
233
+ }
234
+ }
235
+ async delete(object) {
236
+ CommonsModel.assertIdObject(object, this.idField);
237
+ const conditions = {
238
+ id: new CommonsDatabaseParam(object.id, this.structure.id)
239
+ };
240
+ await this.database.deleteRowsByConditions(this.name, conditions, true);
241
+ }
242
+ async update(object) {
243
+ CommonsModel.assertIdObject(object, this.idField);
244
+ const values = {};
245
+ for (const field of Object.keys(object)) {
246
+ if (field === this.idField)
247
+ continue;
248
+ if (!Object.keys(this.structure).includes(field))
249
+ throw new Error(`Parameter variable is missing in the model structure: ${field}`);
250
+ values[field] = new CommonsDatabaseParam(object[field], this.structure[field]);
251
+ }
252
+ const conditions = {
253
+ id: new CommonsDatabaseParam(object.id, this.structure.id)
254
+ };
255
+ await this.database.updateRowsByConditions(this.name, values, conditions, true);
256
+ }
257
+ //-------------------------------------------------------------------------
258
+ async defragment() {
259
+ // not implemented yet
260
+ }
261
+ }
262
+ //# sourceMappingURL=commons-first-class.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commons-first-class.mjs","sourceRoot":"","sources":["../../src/classes/commons-first-class.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { TPropertyObject } from 'tscommons-esm-core';
2
+ import { ICommonsHierarchy, ICommonsFirstClass, ICommonsOrderable, ECommonsMoveDirection } from 'tscommons-esm-models';
3
+ import { CommonsDatabaseParam, CommonsDatabaseTypeId, TCommonsDatabaseParams, TCommonsDatabaseTypes, TCommonsDatabaseDbValues, CommonsSqlDatabaseService, ICommonsCredentials, CommonsDatabaseUniqueKey, CommonsDatabaseIndexKey } from 'nodecommons-esm-database';
4
+ import { TCommonsModelForeignKeys } from '../types/tcommons-model-foreign-keys.mjs';
5
+ import { CommonsFirstClass, TInternalFirstClassExcludeId } from './commons-first-class.mjs';
6
+ import { CommonsSecondClass } from './commons-second-class.mjs';
7
+ import { TInternalOrderedExcludeId, TInternalOrderedModelDbValues, TInternalOrderedModelParams, TInternalOrderedModelTypes } from './commons-ordered.mjs';
8
+ type TInternalHierarchyModelParamParent = {
9
+ parent: CommonsDatabaseParam<number, number>;
10
+ };
11
+ type TInternalHierarchyModelTypeParent = {
12
+ parent: CommonsDatabaseTypeId;
13
+ };
14
+ type TInternalHierarchyModelValueParent = Pick<ICommonsHierarchy<any>, 'parent'>;
15
+ type TInternalHierarchyModelDbValueParent = TInternalHierarchyModelValueParent;
16
+ export type TInternalHierarchyExcludeId<T extends TPropertyObject> = Omit<T, 'parent'> & {
17
+ parent?: never;
18
+ };
19
+ type TInternalHierarchyModelParams<ModelParamsT extends TCommonsDatabaseParams> = Omit<ModelParamsT, 'ordered' | 'parent'> & TInternalHierarchyModelParamParent;
20
+ type TInternalHierarchyModelTypes<ModelTypesT extends TCommonsDatabaseTypes> = Omit<ModelTypesT, 'ordered' | 'parent'> & TInternalHierarchyModelTypeParent;
21
+ type TInternalHierarchyModelDbValues<ModelDbValuesT extends TCommonsDatabaseDbValues> = Omit<ModelDbValuesT, 'ordered' | 'parent'> & TInternalHierarchyModelDbValueParent;
22
+ export declare class CommonsHierarchy<ModelI extends ICommonsHierarchy<FirstClassI>, ModelParamsT extends TInternalFirstClassExcludeId<TInternalOrderedExcludeId<TInternalHierarchyExcludeId<TCommonsDatabaseParams>>>, ModelTypesT extends TInternalFirstClassExcludeId<TInternalOrderedExcludeId<TInternalHierarchyExcludeId<TCommonsDatabaseTypes>>>, ModelDbValuesT extends TInternalFirstClassExcludeId<TInternalOrderedExcludeId<TInternalHierarchyExcludeId<TCommonsDatabaseDbValues>>>, FirstClassI extends ICommonsFirstClass, FirstClassClassT extends CommonsFirstClass<FirstClassI, TCommonsDatabaseParams, TCommonsDatabaseTypes, TCommonsDatabaseDbValues>> extends CommonsSecondClass<ModelI, TInternalOrderedModelParams<TInternalHierarchyModelParams<ModelParamsT>>, TInternalOrderedModelTypes<TInternalHierarchyModelTypes<ModelTypesT>>, TInternalOrderedModelDbValues<TInternalHierarchyModelDbValues<ModelDbValuesT>>, FirstClassI, FirstClassClassT> implements ICommonsOrderable {
23
+ constructor(database: CommonsSqlDatabaseService<ICommonsCredentials>, tableName: string, structure: ModelTypesT, firstClass: FirstClassClassT, firstClassField: string, foreignKeys?: TCommonsModelForeignKeys, uniqueKeys?: CommonsDatabaseUniqueKey[], indexKeys?: CommonsDatabaseIndexKey[]);
24
+ static get orderedField(): string;
25
+ get orderedField(): string;
26
+ static get parentField(): string;
27
+ get parentField(): string;
28
+ protected defineViews(): void;
29
+ protected preprepare(): void;
30
+ getRootByFirstClass(firstClassObject: FirstClassI): Promise<ModelI | undefined>;
31
+ listChildrenOrderedByFirstClass(firstClassObject: FirstClassI, parent: ModelI): Promise<ModelI[]>;
32
+ move(object: ModelI, direction: ECommonsMoveDirection): Promise<ModelI>;
33
+ jump(object: ModelI, destination: FirstClassI): Promise<ModelI>;
34
+ insertForFirstClass(_firstClassObject: FirstClassI, _values: TInternalOrderedExcludeId<TInternalFirstClassExcludeId<Partial<ModelI>>>): Promise<ModelI>;
35
+ insertRootForFirstClass(firstClassObject: FirstClassI, values: TInternalHierarchyExcludeId<TInternalOrderedExcludeId<TInternalFirstClassExcludeId<Partial<ModelI>>>>): Promise<ModelI>;
36
+ insertForFirstClassAndParent(firstClassObject: FirstClassI, parent: ModelI, values: TInternalHierarchyExcludeId<TInternalOrderedExcludeId<TInternalFirstClassExcludeId<Partial<ModelI>>>>): Promise<ModelI>;
37
+ deleteForFirstClass(_firstClassObject: FirstClassI, _object: ModelI): Promise<void>;
38
+ deleteRootForFirstClass(firstClassObject: FirstClassI, object: ModelI): Promise<void>;
39
+ deleteForFirstClassAndParent(firstClassObject: FirstClassI, parent: ModelI, object: ModelI): Promise<void>;
40
+ }
41
+ export {};