@intuitionrobotics/db-api-generator 0.47.58 → 1.0.0

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 (48) hide show
  1. package/LICENSE +3 -0
  2. package/{app-backend → dist/app-backend}/BaseDB_ApiGenerator.d.ts +11 -10
  3. package/dist/app-backend/BaseDB_ApiGenerator.d.ts.map +1 -0
  4. package/dist/app-backend/BaseDB_ApiGenerator.js +477 -0
  5. package/dist/app-backend/BaseDB_ApiGenerator.js.map +1 -0
  6. package/{app-backend → dist/app-backend}/apis.d.ts +8 -7
  7. package/dist/app-backend/apis.d.ts.map +1 -0
  8. package/dist/app-backend/apis.js +68 -0
  9. package/dist/app-backend/apis.js.map +1 -0
  10. package/{app-frontend → dist/app-frontend}/BaseDB_ApiGeneratorCaller.d.ts +7 -6
  11. package/dist/app-frontend/BaseDB_ApiGeneratorCaller.d.ts.map +1 -0
  12. package/dist/app-frontend/BaseDB_ApiGeneratorCaller.js +164 -0
  13. package/dist/app-frontend/BaseDB_ApiGeneratorCaller.js.map +1 -0
  14. package/dist/backend.d.ts +3 -0
  15. package/dist/backend.d.ts.map +1 -0
  16. package/dist/backend.js +21 -0
  17. package/dist/backend.js.map +1 -0
  18. package/dist/frontend.d.ts +2 -0
  19. package/dist/frontend.d.ts.map +1 -0
  20. package/dist/frontend.js +3 -0
  21. package/dist/frontend.js.map +1 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -0
  26. package/{shared → dist/shared}/types.d.ts +3 -2
  27. package/dist/shared/types.d.ts.map +1 -0
  28. package/dist/shared/types.js +31 -0
  29. package/dist/shared/types.js.map +1 -0
  30. package/dist/tsconfig.tsbuildinfo +1 -0
  31. package/package.json +63 -14
  32. package/app-backend/BaseDB_ApiGenerator.js +0 -535
  33. package/app-backend/BaseDB_ApiGenerator.js.map +0 -1
  34. package/app-backend/apis.js +0 -93
  35. package/app-backend/apis.js.map +0 -1
  36. package/app-frontend/BaseDB_ApiGeneratorCaller.js +0 -187
  37. package/app-frontend/BaseDB_ApiGeneratorCaller.js.map +0 -1
  38. package/backend.d.ts +0 -2
  39. package/backend.js +0 -37
  40. package/backend.js.map +0 -1
  41. package/frontend.d.ts +0 -1
  42. package/frontend.js +0 -18
  43. package/frontend.js.map +0 -1
  44. package/index.d.ts +0 -1
  45. package/index.js +0 -18
  46. package/index.js.map +0 -1
  47. package/shared/types.js +0 -33
  48. package/shared/types.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ Full license here: http://www.apache.org/licenses/LICENSE-2.0
@@ -1,7 +1,7 @@
1
- import { Clause_Where, DB_Object, FilterKeys, FirestoreQuery } from "@intuitionrobotics/firebase";
2
- import { Module, PartialProperties, ValidatorTypeResolver } from "@intuitionrobotics/ts-common";
3
- import { ServerApi_Create } from "./apis";
4
- import { ExpressRequest, FirestoreBackupDetails, OnFirestoreBackupSchedulerAct, ServerApi } from "@intuitionrobotics/thunderstorm/backend";
1
+ import { type Clause_Where, type DB_Object, type FilterKeys, type FirestoreQuery } from "@intuitionrobotics/firebase";
2
+ import { Module, type PartialProperties, type ValidatorTypeResolver } from "@intuitionrobotics/ts-common";
3
+ import { ServerApi_Create } from "./apis.js";
4
+ import { type ExpressRequest, type FirestoreBackupDetails, type OnFirestoreBackupSchedulerAct, ServerApi } from "@intuitionrobotics/thunderstorm/backend";
5
5
  import { FirestoreCollection, FirestoreTransaction } from "@intuitionrobotics/firebase/backend";
6
6
  export declare const validateId: (length: number, mandatory?: boolean) => import("@intuitionrobotics/ts-common").Validator<string>;
7
7
  export declare const validateEmail: import("@intuitionrobotics/ts-common").Validator<string>;
@@ -94,14 +94,14 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
94
94
  *
95
95
  * @param item - The DB entry that will be used.
96
96
  */
97
- protected internalFilter(item: DBType): Clause_Where<DBType>[];
97
+ protected internalFilter(_item: DBType): Clause_Where<DBType>[];
98
98
  /**
99
99
  * Override this method to customize the assertions that should be done before the insertion of the document to the DB.
100
100
  *
101
101
  * @param transaction - The transaction object.
102
102
  * @param dbInstance - The DB entry for which the uniqueness is being asserted.
103
103
  */
104
- protected preUpsertProcessing(transaction: FirestoreTransaction, dbInstance: DBType, request?: ExpressRequest): Promise<void>;
104
+ protected preUpsertProcessing(_transaction: FirestoreTransaction, _dbInstance: DBType, _request?: ExpressRequest): Promise<void>;
105
105
  /**
106
106
  * Override this method to provide actions or assertions to be executed before the deletion happens.
107
107
  *
@@ -111,7 +111,7 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
111
111
  * @param dbInstance - The DB entry that is going to be deleted.
112
112
  */
113
113
  protected assertDeletion(transaction: FirestoreTransaction, dbInstance: DBType, request?: ExpressRequest): Promise<void>;
114
- protected assertDeletion_Read(transaction: FirestoreTransaction, dbInstance: DBType, request?: ExpressRequest): Promise<() => void>;
114
+ protected assertDeletion_Read(_transaction: FirestoreTransaction, _dbInstance: DBType, _request?: ExpressRequest): Promise<() => void>;
115
115
  /**
116
116
  * A wrapper of the collections's `runInTransaction`.
117
117
  *
@@ -212,7 +212,7 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
212
212
  * @param query - The query to be executed for the deletion.
213
213
  * @param request - The request in order to possibly obtain more info.
214
214
  */
215
- delete(query: FirestoreQuery<DBType>, request?: ExpressRequest): Promise<DBType[]>;
215
+ delete(query: FirestoreQuery<DBType>, _request?: ExpressRequest): Promise<DBType[]>;
216
216
  /**
217
217
  * Queries the database for a specific document in the module's collection.
218
218
  *
@@ -224,7 +224,7 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
224
224
  * @returns
225
225
  * The DB document that was found.
226
226
  */
227
- queryUnique(where: Clause_Where<DBType>, request?: ExpressRequest): Promise<DBType>;
227
+ queryUnique(where: Clause_Where<DBType>, _request?: ExpressRequest): Promise<DBType>;
228
228
  /**
229
229
  * Executes the specified query on the module's collection.
230
230
  *
@@ -234,7 +234,7 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
234
234
  * @returns
235
235
  * A promise of an array of documents.
236
236
  */
237
- query(query: FirestoreQuery<DBType>, request?: ExpressRequest): Promise<DBType[]>;
237
+ query(query: FirestoreQuery<DBType>, _request?: ExpressRequest): Promise<DBType[]>;
238
238
  /**
239
239
  * If propsToPatch is not set, we remove the lock keys from the caller's instance
240
240
  * before merging with the original dbInstance.
@@ -264,3 +264,4 @@ export declare abstract class BaseDB_ApiGenerator<DBType extends DB_Object, Conf
264
264
  */
265
265
  apis(pathPart?: string): ServerApi<any>[];
266
266
  }
267
+ //# sourceMappingURL=BaseDB_ApiGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDB_ApiGenerator.d.ts","sourceRoot":"","sources":["../../src/main/app-backend/BaseDB_ApiGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,477 @@
1
+ import {} from "@intuitionrobotics/firebase";
2
+ import { __stringify, _keys, addItemToArray, BadImplementationException, batchAction, Day, filterDuplicates, filterInstances, generateHex, isErrorOfType, merge, Module, ThisShouldNotHappenException, validate, validateRegexp, ValidationException, validateEmail as _validateEmail } from "@intuitionrobotics/ts-common";
3
+ import { ServerApi_Create, ServerApi_Delete, ServerApi_Query, ServerApi_Unique, ServerApi_Update } from "./apis.js";
4
+ import { ApiException, ServerApi } from "@intuitionrobotics/thunderstorm/backend";
5
+ import { FirebaseModule, FirestoreCollection, FirestoreInterface, FirestoreTransaction, } from "@intuitionrobotics/firebase/backend";
6
+ import { ErrorKey_BadInput } from "../shared/types.js";
7
+ const idLength = 32;
8
+ export const validateId = (length, mandatory = true) => validateRegexp(new RegExp(`^[0-9a-f]{${length}}$`), mandatory);
9
+ export const validateEmail = _validateEmail;
10
+ export const validateBucketUrl = (mandatory) => validateRegexp(/gs?:\/\/[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/, mandatory);
11
+ export const validateGeneralUrl = (mandatory) => validateRegexp(/[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/, mandatory);
12
+ export const validateUniqueId = validateId(idLength);
13
+ export const validateOptionalId = validateId(idLength, false);
14
+ export const validateStringWithDashes = validateRegexp(/^[A-Za-z-]+$/);
15
+ export const validateStringAndNumbersWithDashes = validateRegexp(/^[0-9A-Za-z-]+$/);
16
+ export const validator_JavaObjectMemberName = validateRegexp(/^[a-z][a-zA-Z0-9]+$/);
17
+ export const validateNameWithDashesAndDots = validateRegexp(/^[a-z-.]+$/);
18
+ export const validator_LowercaseStringWithDashes = validateRegexp(/^[a-z-.]+$/);
19
+ export const validator_LowerUpperStringWithSpaces = validateRegexp(/^[A-Za-z ]+$/);
20
+ export const validator_LowerUpperStringWithDashesAndUnderscore = validateRegexp(/^[A-Za-z-_]+$/);
21
+ export const validator_InternationalPhoneNumber = validateRegexp(/^\+(?:[0-9] ?){6,14}[0-9]$/);
22
+ /**
23
+ * An abstract base class used for implementing CRUD operations on a specific collection.
24
+ *
25
+ * By default, it exposes API endpoints for creating, deleting, updating, querying and querying for unique document.
26
+ */
27
+ export class BaseDB_ApiGenerator extends Module {
28
+ collection;
29
+ validator;
30
+ constructor(collectionName, validator, itemName, moduleName) {
31
+ super(moduleName);
32
+ // @ts-expect-error TS struggles with this dynamic typing
33
+ this.setDefaultConfig({ itemName, collectionName, externalFilterKeys: ["_id"], lockKeys: ["_id"] });
34
+ this.validator = validator;
35
+ }
36
+ setValidator(validator) {
37
+ this.validator = validator;
38
+ }
39
+ __onFirestoreBackupSchedulerAct() {
40
+ return [{
41
+ backupQuery: this.resolveBackupQuery(),
42
+ collection: this.collection,
43
+ keepInterval: 7 * Day,
44
+ interval: Day,
45
+ moduleKey: this.config.collectionName
46
+ }];
47
+ }
48
+ resolveBackupQuery() {
49
+ return { where: {} };
50
+ }
51
+ // this.setExternalUniqueKeys(["accessLevelIds"]);
52
+ /**
53
+ * Sets the external unique keys. External keys are the attributes of a document that must be unique inside the
54
+ * collection. Default is `_id`.
55
+ *
56
+ * @remarks
57
+ * You can only update the external unique keys before the module is initialized, preferably from its constructor.
58
+ *
59
+ * @param keys - The external unique keys.
60
+ *
61
+ * @returns
62
+ * The external filter keys.
63
+ */
64
+ setExternalUniqueKeys(keys) {
65
+ if (this.initiated)
66
+ throw new BadImplementationException("You can only update the 'externalUniqueKeys' before the module was initialized.. preferably from its constructor");
67
+ return this.config.externalFilterKeys = keys;
68
+ }
69
+ /**
70
+ * Sets the lock keys. Lock keys are the attributes of a document that must not be changed during a patch.
71
+ * Thr property `_id` is always part of the lock keys.
72
+ *
73
+ * @remarks
74
+ * You can only update the lock keys before the module is initialized, preferably from its constructor.
75
+ *
76
+ * @param keys - The lock keys.
77
+ *
78
+ * @returns
79
+ * The lock keys.
80
+ */
81
+ setLockKeys(keys) {
82
+ if (this.initiated)
83
+ throw new BadImplementationException("You can only update the 'lockKeys' before the module was initialized.. preferably from its constructor");
84
+ return this.config.lockKeys = filterDuplicates([...keys,
85
+ "_id"]);
86
+ }
87
+ getCollectionName() {
88
+ return this.config.collectionName;
89
+ }
90
+ getItemName() {
91
+ return this.config.itemName;
92
+ }
93
+ /**
94
+ * Executed during the initialization of the module.
95
+ * The collection reference is set in this method.
96
+ */
97
+ init() {
98
+ const firestore = FirebaseModule.createAdminSession(this.config?.projectId).getFirestore();
99
+ // @ts-expect-error TS struggles with this dynamic typing
100
+ this.collection = firestore.getCollection(this.config.collectionName, this.config.externalFilterKeys);
101
+ }
102
+ async assertExternalQueryUnique(instance, transaction) {
103
+ const dbInstance = await transaction.queryItem(this.collection, instance);
104
+ if (!dbInstance) {
105
+ const uniqueQuery = FirestoreInterface.buildUniqueQuery(this.collection, instance);
106
+ throw new ApiException(404, `Could not find ${this.config.itemName} with unique query '${__stringify(uniqueQuery)}'`);
107
+ }
108
+ return dbInstance;
109
+ }
110
+ /**
111
+ * Asserts the uniqueness of an instance in two steps:
112
+ * - Executes `this.preUpsertProcessing`.
113
+ * - Asserts uniqueness based on the internal filters.
114
+ *
115
+ * @param transaction - The transaction object.
116
+ * @param instance - The document for which the uniqueness assertion will occur.
117
+ */
118
+ async assertUniqueness(transaction, instance, request) {
119
+ await this.preUpsertProcessing(transaction, instance, request);
120
+ const uniqueQueries = this.internalFilter(instance);
121
+ if (uniqueQueries.length === 0)
122
+ return;
123
+ const dbInstances = await Promise.all(uniqueQueries.map(uniqueQuery => {
124
+ return transaction.queryUnique(this.collection, { where: uniqueQuery });
125
+ }));
126
+ for (const idx in dbInstances) {
127
+ const dbInstance = dbInstances[idx];
128
+ if (!dbInstance || dbInstance._id === instance._id)
129
+ continue;
130
+ const query = uniqueQueries[idx];
131
+ const message = _keys(query).reduce((carry, key) => {
132
+ return carry + "\n" + `${String(key)}: ${query[key]}`;
133
+ }, `${this.config.itemName} uniqueness violation. There is already a document with`);
134
+ this.logWarning(message);
135
+ throw new ApiException(422, message);
136
+ }
137
+ }
138
+ /**
139
+ * Runs the module's validator for the instance.
140
+ *
141
+ * @param instance - The object to be validated.
142
+ *
143
+ * @throws `ApiException` for bad implementation or invalid input.
144
+ */
145
+ validateImpl(instance) {
146
+ try {
147
+ validate(instance, this.validator);
148
+ }
149
+ catch (e) {
150
+ const badImplementation = isErrorOfType(e, BadImplementationException);
151
+ if (badImplementation)
152
+ throw new ApiException(500, badImplementation.message);
153
+ const error = isErrorOfType(e, ValidationException);
154
+ if (error) {
155
+ const errorBody = { type: ErrorKey_BadInput, body: { path: error.path, input: error.input } };
156
+ throw new ApiException(400, error.message).setErrorBody(errorBody);
157
+ }
158
+ throw e;
159
+ }
160
+ }
161
+ /**
162
+ * Override this method to return a list of "where" queries that dictate uniqueness inside the collection.
163
+ * Example return value: [{attribute1: item.attribute1, attribute2: item.attribute2}].
164
+ *
165
+ * @param item - The DB entry that will be used.
166
+ */
167
+ internalFilter(_item) {
168
+ return [];
169
+ }
170
+ /**
171
+ * Override this method to customize the assertions that should be done before the insertion of the document to the DB.
172
+ *
173
+ * @param transaction - The transaction object.
174
+ * @param dbInstance - The DB entry for which the uniqueness is being asserted.
175
+ */
176
+ async preUpsertProcessing(_transaction, _dbInstance, _request) {
177
+ }
178
+ /**
179
+ * Override this method to provide actions or assertions to be executed before the deletion happens.
180
+ *
181
+ * Currently executed only before `deleteUnique()`.
182
+ *
183
+ * @param transaction - The transaction object
184
+ * @param dbInstance - The DB entry that is going to be deleted.
185
+ */
186
+ async assertDeletion(transaction, dbInstance, request) {
187
+ return (await this.assertDeletion_Read(transaction, dbInstance, request))();
188
+ }
189
+ async assertDeletion_Read(_transaction, _dbInstance, _request) {
190
+ return async () => {
191
+ };
192
+ }
193
+ /**
194
+ * A wrapper of the collections's `runInTransaction`.
195
+ *
196
+ * @param processor - The transaction's processor.
197
+ *
198
+ * @returns
199
+ * A promise of the result of the `processor`.
200
+ */
201
+ async runInTransaction(processor) {
202
+ return this.collection.runInTransaction(processor);
203
+ }
204
+ // @ts-expect-error TS struggles with this dynamic typing
205
+ async deleteCollection() {
206
+ await this.collection.deleteAll();
207
+ }
208
+ /**
209
+ * Inserts the `instance` using the `transaction` object.
210
+ *
211
+ * @param transaction - The transaction object.
212
+ * @param instance - The object to be inserted.
213
+ * @param request - The request in order to possibly obtain more info.
214
+ *
215
+ * @returns
216
+ * A promise of the document that was inserted.
217
+ */
218
+ // private async createImpl(transaction: FirestoreTransaction, instance: DBType, request?: ExpressRequest): Promise<DBType> {
219
+ // return (await this.createImpl_Read(transaction, instance, request))()
220
+ // };
221
+ async createImpl_Read(transaction, instance, request) {
222
+ await this.validateImpl(instance);
223
+ await this.assertUniqueness(transaction, instance, request);
224
+ return () => transaction.insert(this.collection, instance);
225
+ }
226
+ ;
227
+ /**
228
+ * Upserts the `instance` using a transaction, after validating it and asserting uniqueness.
229
+ *
230
+ * @param instance - The object to be upserted.
231
+ * @param transaction - OPTIONAL transaction to perform the upsert operation on
232
+ * @param request - The request in order to possibly obtain more info.
233
+ *
234
+ * @returns
235
+ * A promise of the document that was upserted.
236
+ */
237
+ async upsert(instance, transaction, request) {
238
+ const processor = async (_transaction) => {
239
+ return (await this.upsert_Read(instance, _transaction, request))();
240
+ };
241
+ if (transaction)
242
+ return processor(transaction);
243
+ return this.collection.runInTransaction(processor);
244
+ }
245
+ async upsert_Read(instance, transaction, request) {
246
+ if (instance._id === undefined)
247
+ return this.createImpl_Read(transaction, { ...instance, _id: generateHex(idLength) }, request);
248
+ return this.upsertImpl_Read(transaction, instance, request);
249
+ }
250
+ /**
251
+ * Upserts a set of objects. Batching is used to circumvent firestore limitations on the number of objects.
252
+ *
253
+ * @param instances - The objects to be upserted.
254
+ * @param request - The request in order to possibly obtain more info.
255
+ *
256
+ * @returns
257
+ * A promise of an array of documents that were upserted.
258
+ */
259
+ async upsertAll_Batched(instances, request) {
260
+ return batchAction(instances, 500, async (chunked) => this.upsertAll(chunked, undefined, request));
261
+ }
262
+ /**
263
+ * Upserts the `dbInstances` using the `transaction` object.
264
+ *
265
+ * @param transaction - The transaction object.
266
+ * @param instances - The instances to update.
267
+ * @param request - The request in order to possibly obtain more info.
268
+ *
269
+ * @throws `BadImplementationException` when the instances are more than 500.
270
+ *
271
+ * @returns
272
+ * A promise of the array of documents that were upserted.
273
+ */
274
+ async upsertAll(instances, transaction, request) {
275
+ if (instances.length > 500) {
276
+ if (transaction)
277
+ throw new BadImplementationException('Firestore transaction supports maximum 500 at a time');
278
+ return this.upsertAll_Batched(instances, request);
279
+ }
280
+ const processor = async (_transaction) => {
281
+ const writes = await Promise.all(await this.upsertAllImpl_Read(instances, _transaction, request));
282
+ return writes.map(write => write());
283
+ };
284
+ if (transaction)
285
+ return processor(transaction);
286
+ return this.collection.runInTransaction(processor);
287
+ }
288
+ async upsertAllImpl_Read(instances, transaction, request) {
289
+ const actions = [];
290
+ instances.reduce((carry, instance) => {
291
+ addItemToArray(carry, this.upsert_Read(instance, transaction, request));
292
+ return carry;
293
+ }, actions);
294
+ return Promise.all(actions);
295
+ }
296
+ /**
297
+ * Upserts the `dbInstance` using the `transaction` transaction object.
298
+ *
299
+ * @param transaction - The transaction object.
300
+ * @param dbInstance - The object to be upserted.
301
+ * @param request - The request in order to possibly obtain more info.
302
+ *
303
+ * @returns
304
+ * A promise of the document that was upserted.
305
+ */
306
+ async upsertImpl(transaction, dbInstance, request) {
307
+ return (await this.upsertImpl_Read(transaction, dbInstance, request))();
308
+ }
309
+ ;
310
+ async upsertImpl_Read(transaction, dbInstance, request) {
311
+ await this.validateImpl(dbInstance);
312
+ await this.assertUniqueness(transaction, dbInstance, request);
313
+ return transaction.upsert_Read(this.collection, dbInstance);
314
+ }
315
+ ;
316
+ /**
317
+ * Deletes a unique document based on its `_id`. Uses a transaction, after deletion assertions occur.
318
+ *
319
+ * @param _id - The _id of the object to be deleted.
320
+ * @param transaction
321
+ * @param request - The request in order to possibly obtain more info.
322
+ *
323
+ * @throws `ApiException` when the document doesn't exist in the collection.
324
+ *
325
+ * @returns
326
+ * A promise of the document that was deleted.
327
+ */
328
+ async deleteUnique(_id, transaction, request) {
329
+ if (!_id)
330
+ throw new BadImplementationException(`No _id for deletion provided.`);
331
+ const processor = async (_transaction) => {
332
+ const write = await this.deleteUnique_Read(_id, _transaction, request);
333
+ if (!write)
334
+ throw new ApiException(404, `Could not find ${this.config.itemName} with unique id: ${_id}`);
335
+ return write();
336
+ };
337
+ if (transaction)
338
+ return processor(transaction);
339
+ return this.collection.runInTransaction(processor);
340
+ }
341
+ async deleteUnique_Read(_id, transaction, request) {
342
+ if (!_id)
343
+ throw new BadImplementationException(`No _id for deletion provided.`);
344
+ const ourQuery = { where: { _id } };
345
+ const dbInstance = await transaction.queryUnique(this.collection, ourQuery);
346
+ if (!dbInstance)
347
+ throw new ApiException(404, `Could not find ${this.config.itemName} with unique id: ${_id}`);
348
+ const write = await this.deleteImpl_Read(transaction, ourQuery, request);
349
+ return async () => {
350
+ if (!write)
351
+ return dbInstance;
352
+ // Here can do both read an write!
353
+ await this.assertDeletion(transaction, dbInstance, request);
354
+ return write();
355
+ };
356
+ }
357
+ /**
358
+ * Uses the `transaction` to delete a unique document, querying with the `ourQuery`.
359
+ *
360
+ * @param transaction - The transaction object.
361
+ * @param ourQuery - The query to be used for the deletion.
362
+ * @param request - The request in order to possibly obtain more info.
363
+ *
364
+ * @returns
365
+ * A promise of the document that was deleted.
366
+ */
367
+ async deleteImpl_Read(transaction, ourQuery, _request) {
368
+ const write = await transaction.deleteUnique_Read(this.collection, ourQuery);
369
+ if (!write)
370
+ throw new ThisShouldNotHappenException(`I just checked that I had an instance for query: ${__stringify(ourQuery)}`);
371
+ return write;
372
+ }
373
+ /**
374
+ * Calls the `delete` method of the module's collection.
375
+ *
376
+ * @param query - The query to be executed for the deletion.
377
+ * @param request - The request in order to possibly obtain more info.
378
+ */
379
+ async delete(query, _request) {
380
+ return this.collection.delete(query);
381
+ }
382
+ /**
383
+ * Queries the database for a specific document in the module's collection.
384
+ *
385
+ * @param where - The where clause to be used for querying.
386
+ * @param request - The request in order to possibly obtain more info.
387
+ *
388
+ * @throws `ApiException` if the document is not found.
389
+ *
390
+ * @returns
391
+ * The DB document that was found.
392
+ */
393
+ async queryUnique(where, _request) {
394
+ const dbItem = await this.collection.queryUnique({ where });
395
+ if (!dbItem)
396
+ throw new ApiException(404, `Could not find ${this.config.itemName} with unique query: ${JSON.stringify(where)}`);
397
+ return dbItem;
398
+ }
399
+ /**
400
+ * Executes the specified query on the module's collection.
401
+ *
402
+ * @param query - The query to be executed.
403
+ * @param request - The request in order to possibly obtain more info.
404
+ *
405
+ * @returns
406
+ * A promise of an array of documents.
407
+ */
408
+ async query(query, _request) {
409
+ return await this.collection.query(query);
410
+ }
411
+ /**
412
+ * If propsToPatch is not set, we remove the lock keys from the caller's instance
413
+ * before merging with the original dbInstance.
414
+ * If propsToPatch is set, we also remove all of the instance's keys that
415
+ * are not specified in propsToPatch.
416
+ *
417
+ * @param instance - The instance to be upserted.
418
+ * @param propsToPatch - Properties to patch.
419
+ * @param request - The request in order to possibly obtain more info.
420
+ *
421
+ * @returns
422
+ * A promise of the patched document.
423
+ */
424
+ async patch(instance, propsToPatch, request) {
425
+ return this.collection.runInTransaction(async (transaction) => {
426
+ const dbInstance = await this.assertExternalQueryUnique(instance, transaction);
427
+ // If the caller has specified props to be changed, make sure the don't conflict with the lockKeys.
428
+ const wrongKey = propsToPatch?.find(prop => this.config.lockKeys.includes(prop));
429
+ if (wrongKey)
430
+ throw new BadImplementationException(`Key ${String(wrongKey)} is part of the 'lockKeys' and cannot be updated.`);
431
+ // If the caller has not specified props, we remove the keys from the caller's instance
432
+ // before merging with the original dbInstance.
433
+ _keys(instance).forEach(key => {
434
+ if (this.config.lockKeys.includes(key) || (propsToPatch && !propsToPatch.includes(key))) {
435
+ delete instance[key];
436
+ }
437
+ });
438
+ const mergedObject = merge(dbInstance, instance);
439
+ await validate(mergedObject, this.validator);
440
+ await this.assertUniqueness(transaction, mergedObject, request);
441
+ return this.upsertImpl(transaction, mergedObject, request);
442
+ });
443
+ }
444
+ apiCreate(pathPart) {
445
+ return new ServerApi_Create(this, pathPart);
446
+ }
447
+ apiQuery(pathPart) {
448
+ return new ServerApi_Query(this, pathPart);
449
+ }
450
+ apiQueryUnique(pathPart) {
451
+ return new ServerApi_Unique(this, pathPart);
452
+ }
453
+ apiUpdate(pathPart) {
454
+ return new ServerApi_Update(this, pathPart);
455
+ }
456
+ apiDelete(pathPart) {
457
+ return new ServerApi_Delete(this, pathPart);
458
+ }
459
+ /**
460
+ * Override this method, to control which server api endpoints are created automatically.
461
+ *
462
+ * @param pathPart - The path part.
463
+ *
464
+ * @returns
465
+ * An array of api endpoints.
466
+ */
467
+ apis(pathPart) {
468
+ return filterInstances([
469
+ this.apiCreate(pathPart),
470
+ this.apiQuery(pathPart),
471
+ this.apiQueryUnique(pathPart),
472
+ this.apiUpdate(pathPart),
473
+ this.apiDelete(pathPart),
474
+ ]);
475
+ }
476
+ }
477
+ //# sourceMappingURL=BaseDB_ApiGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDB_ApiGenerator.js","sourceRoot":"","sources":["../../src/main/app-backend/BaseDB_ApiGenerator.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { BaseDB_ApiGenerator } from "./BaseDB_ApiGenerator";
2
- import { ApiTypeBinder, QueryParams } from "@intuitionrobotics/thunderstorm";
3
- import { ApiBinder_DBCreate, ApiBinder_DBDelete, ApiBinder_DBQuery, ApiBinder_DBUniuqe, ApiBinder_DBUpdate, GenericApiDef } from "..";
4
- import { Clause_Where, DB_Object } from "@intuitionrobotics/firebase";
5
- import { ApiResponse, ExpressRequest, ServerApi } from "@intuitionrobotics/thunderstorm/backend";
1
+ import { BaseDB_ApiGenerator } from "./BaseDB_ApiGenerator.js";
2
+ import { type ApiTypeBinder, type QueryParams } from "@intuitionrobotics/thunderstorm";
3
+ import { type ApiBinder_DBCreate, type ApiBinder_DBDelete, type ApiBinder_DBQuery, type ApiBinder_DBUniuqe, type ApiBinder_DBUpdate, type GenericApiDef } from "../index.js";
4
+ import { type Clause_Where, type DB_Object } from "@intuitionrobotics/firebase";
5
+ import { ApiResponse, type ExpressRequest, ServerApi } from "@intuitionrobotics/thunderstorm/backend";
6
6
  export declare function resolveUrlPart(dbModule: BaseDB_ApiGenerator<any>, pathPart?: string, pathSuffix?: string): string;
7
7
  export declare abstract class GenericServerApi<DBType extends DB_Object, Binder extends ApiTypeBinder<string, R, B, P>, PostProcessor = never, R = Binder["response"], B = Binder["body"], P extends QueryParams | {} = Binder["queryParams"]> extends ServerApi<Binder> {
8
8
  protected readonly dbModule: BaseDB_ApiGenerator<DBType>;
@@ -20,7 +20,7 @@ export declare class ServerApi_Update<DBType extends DB_Object> extends GenericS
20
20
  }
21
21
  export declare class ServerApi_Unique<DBType extends DB_Object> extends GenericServerApi<DBType, ApiBinder_DBUniuqe<DBType>> {
22
22
  constructor(dbModule: BaseDB_ApiGenerator<DBType>, pathPart?: string);
23
- protected process(request: ExpressRequest, response: ApiResponse, queryParams: DB_Object, body: void): Promise<DBType>;
23
+ protected process(request: ExpressRequest, response: ApiResponse, queryParams: DB_Object, _body: void): Promise<DBType>;
24
24
  }
25
25
  export declare class ServerApi_Query<DBType extends DB_Object> extends GenericServerApi<DBType, ApiBinder_DBQuery<DB_Object>, () => Promise<Partial<DBType>[]>> {
26
26
  constructor(dbModule: BaseDB_ApiGenerator<DBType>, pathPart?: string);
@@ -28,5 +28,6 @@ export declare class ServerApi_Query<DBType extends DB_Object> extends GenericSe
28
28
  }
29
29
  export declare class ServerApi_Delete<DBType extends DB_Object> extends GenericServerApi<DBType, ApiBinder_DBDelete<DBType>> {
30
30
  constructor(dbModule: BaseDB_ApiGenerator<DBType>, pathPart?: string);
31
- protected process(request: ExpressRequest, response: ApiResponse, queryParams: DB_Object, body: void): Promise<DBType>;
31
+ protected process(request: ExpressRequest, response: ApiResponse, queryParams: DB_Object, _body: void): Promise<DBType>;
32
32
  }
33
+ //# sourceMappingURL=apis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apis.d.ts","sourceRoot":"","sources":["../../src/main/app-backend/apis.ts"],"names":[],"mappings":"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"}