@common-stack/store-mongo 7.0.4-alpha.6 → 7.1.1-alpha.14

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 (63) hide show
  1. package/lib/containers/container.d.ts +14 -0
  2. package/lib/containers/container.js +17 -0
  3. package/lib/containers/container.js.map +1 -0
  4. package/lib/containers/index.d.ts +1 -0
  5. package/lib/dataloaders/bulk-dataloader-v2.d.ts +7 -0
  6. package/lib/dataloaders/bulk-dataloader-v2.js +34 -0
  7. package/lib/dataloaders/bulk-dataloader-v2.js.map +1 -0
  8. package/lib/dataloaders/bulk-dataloader.js.map +1 -1
  9. package/lib/dataloaders/bulk-dataloader.test.d.ts +1 -0
  10. package/lib/dataloaders/index.d.ts +1 -0
  11. package/lib/graphql/schema/base-services.graphql +238 -0
  12. package/lib/helpers/mongoose-connection.js.map +1 -1
  13. package/lib/index.d.ts +1 -1
  14. package/lib/index.js +1 -1
  15. package/lib/interfaces/base-repository.d.ts +1 -5
  16. package/lib/interfaces/base-service.d.ts +1 -1
  17. package/lib/interfaces/getAllArgs.d.ts +133 -0
  18. package/lib/interfaces/getAllArgs.js +39 -0
  19. package/lib/interfaces/getAllArgs.js.map +1 -0
  20. package/lib/interfaces/index.d.ts +1 -1
  21. package/lib/mixins/BaseServiceMixin.d.ts +45 -0
  22. package/lib/mixins/BaseServiceMixin.js +199 -0
  23. package/lib/mixins/BaseServiceMixin.js.map +1 -0
  24. package/lib/mixins/base-service-mixin.js.map +1 -1
  25. package/lib/mixins/index.d.ts +1 -0
  26. package/lib/module.d.ts +2 -0
  27. package/lib/module.js +4 -0
  28. package/lib/module.js.map +1 -0
  29. package/lib/services/BaseProxyService.d.ts +28 -0
  30. package/lib/services/BaseProxyService.js +52 -0
  31. package/lib/services/BaseProxyService.js.map +1 -0
  32. package/lib/services/BaseService.d.ts +23 -0
  33. package/lib/services/BaseService.js +65 -0
  34. package/lib/services/BaseService.js.map +1 -0
  35. package/lib/services/BaseService.test.d.ts +1 -0
  36. package/lib/services/base-proxy-service.js.map +1 -1
  37. package/lib/services/base-service.js.map +1 -1
  38. package/lib/services/index.d.ts +2 -0
  39. package/lib/store/models/common-options-v2.d.ts +16 -0
  40. package/lib/store/models/common-options-v2.js +40 -0
  41. package/lib/store/models/common-options-v2.js.map +1 -0
  42. package/lib/store/models/common-options.js.map +1 -1
  43. package/lib/store/models/index.d.ts +1 -0
  44. package/lib/store/repositories/BaseMongoRepository.d.ts +65 -0
  45. package/lib/store/repositories/BaseMongoRepository.js +389 -0
  46. package/lib/store/repositories/BaseMongoRepository.js.map +1 -0
  47. package/lib/store/repositories/BaseMongoRepository.test.d.ts +1 -0
  48. package/lib/store/repositories/CustomIdRepository.test.d.ts +1 -0
  49. package/lib/store/repositories/base-repository.js +1 -1
  50. package/lib/store/repositories/base-repository.js.map +1 -1
  51. package/lib/store/repositories/index.d.ts +1 -0
  52. package/lib/templates/constants/SERVER_TYPES.ts.template +5 -0
  53. package/lib/templates/repositories/DatabaseMigration.ts.template +13 -0
  54. package/lib/templates/repositories/IBaseMongoRepository.ts.template +284 -0
  55. package/lib/templates/repositories/IBaseService.ts.template +231 -0
  56. package/lib/templates/repositories/IBaseServiceMixin.ts.template +461 -0
  57. package/lib/templates/repositories/IDataloader.ts.template +211 -0
  58. package/lib/templates/repositories/dbCommonTypes.ts.template +139 -0
  59. package/lib/templates/repositories/mongoCommonTypes.ts.template +21 -0
  60. package/package.json +21 -4
  61. package/lib/interfaces/base-repository.js +0 -5
  62. package/lib/interfaces/base-repository.js.map +0 -1
  63. package/lib/interfaces/get-all-args.d.ts +0 -9
@@ -0,0 +1,65 @@
1
+ import { CdmLogger } from '@cdm-logger/core';
2
+ import { Connection, FilterQuery, Model, PipelineStage, UpdateQuery } from 'mongoose';
3
+ import { GetAllArgs, ISort, IBaseMongoRepository, IMongoOptions, AsDomainType, CreateType, UpdateType } from 'common/server';
4
+ export declare class BaseMongoRepository<SchemaType> implements IBaseMongoRepository<SchemaType> {
5
+ private modelFunc;
6
+ private options;
7
+ protected logger: CdmLogger.ILogger;
8
+ model: Model<SchemaType>;
9
+ constructor(modelFunc: (db: Connection) => Model<SchemaType>, db: Connection, logger: CdmLogger.ILogger, options?: IMongoOptions);
10
+ /**
11
+ * Transforms a document to the domain model format
12
+ */
13
+ protected transformDocument(doc: any): AsDomainType<SchemaType> | null;
14
+ /**
15
+ * Transforms an array of documents
16
+ */
17
+ protected transformDocuments(docs: SchemaType[]): AsDomainType<SchemaType>[];
18
+ /**
19
+ * Maps API criteria with 'id' to MongoDB criteria with '_id'
20
+ */
21
+ private mapConditions;
22
+ /**
23
+ * Computes sort object from GetAllArgs sort parameter
24
+ * Handles both string-based and object-based sort specifications
25
+ */
26
+ protected computeSort(sort: ISort | string | ISort[]): Record<string, 1 | -1>;
27
+ /**
28
+ * Prepares an aggregation pipeline with standard stages
29
+ * @param options Query options including filtering, sorting, pagination
30
+ * @param customPipeline Optional custom pipeline stages to include
31
+ * @returns Complete MongoDB aggregation pipeline
32
+ */
33
+ protected preparePipeline(options: GetAllArgs<SchemaType>, customPipeline?: PipelineStage[]): PipelineStage[];
34
+ /**
35
+ * Execute an aggregation pipeline and transform the results
36
+ */
37
+ protected aggregate(pipeline: PipelineStage[]): Promise<AsDomainType<SchemaType>[]>;
38
+ count(conditions?: FilterQuery<SchemaType>): Promise<number>;
39
+ get(conditions?: FilterQuery<SchemaType>, selectedFields?: string): Promise<AsDomainType<SchemaType> | null>;
40
+ find(conditions: Partial<FilterQuery<SchemaType>>, selectedFields?: string): Promise<AsDomainType<SchemaType> | null>;
41
+ getAll(options: GetAllArgs<SchemaType>): Promise<AsDomainType<SchemaType>[]>;
42
+ /**
43
+ * Get all documents using aggregation pipeline
44
+ */
45
+ getAllWithPipeline(options: GetAllArgs<SchemaType>, customPipeline?: PipelineStage[]): Promise<AsDomainType<SchemaType>[]>;
46
+ getAllWithCount(options: GetAllArgs<SchemaType>): Promise<{
47
+ data: AsDomainType<SchemaType>[];
48
+ totalCount: number;
49
+ }>;
50
+ /**
51
+ * Get all documents with count using aggregation pipeline
52
+ */
53
+ getAllWithCountAndPipeline(options: GetAllArgs<SchemaType>, customPipeline?: PipelineStage[]): Promise<{
54
+ data: AsDomainType<SchemaType>[];
55
+ totalCount: number;
56
+ }>;
57
+ create<T = CreateType<SchemaType>>(data: T): Promise<AsDomainType<SchemaType>>;
58
+ bulkCreate<T = CreateType<SchemaType>>(data: T[]): Promise<AsDomainType<SchemaType>[]>;
59
+ upsert<T = UpdateType<SchemaType>>(conditions: FilterQuery<SchemaType>, update: T, options?: Record<string, unknown>): Promise<AsDomainType<SchemaType>>;
60
+ update<T = UpdateType<SchemaType>>(criteria: FilterQuery<SchemaType>, update: T | UpdateQuery<SchemaType>, options?: Record<string, unknown>): Promise<AsDomainType<SchemaType>>;
61
+ bulkUpdate<T = UpdateType<SchemaType>>(criteria: FilterQuery<SchemaType>, update: T | UpdateQuery<SchemaType>, options?: Record<string, unknown>): Promise<AsDomainType<SchemaType>[]>;
62
+ delete(criteria: FilterQuery<SchemaType>): Promise<boolean>;
63
+ bulkDelete(criteria: FilterQuery<SchemaType>): Promise<number>;
64
+ bulkGet(ids: string[], selectedFields?: string): Promise<AsDomainType<SchemaType>[]>;
65
+ }
@@ -0,0 +1,389 @@
1
+ import {__decorate,__param,__metadata}from'tslib';import {isObject}from'lodash-es';import'@cdm-logger/core';import {Connection,Types}from'mongoose';import {injectable,unmanaged}from'inversify';import {IMongoOptions,PAGINATION_OPTIONS}from'common/server';var _a;
2
+ let BaseMongoRepository = class BaseMongoRepository {
3
+ modelFunc;
4
+ options;
5
+ logger;
6
+ model;
7
+ constructor(modelFunc, db, logger, options) {
8
+ this.modelFunc = modelFunc;
9
+ this.model = modelFunc(db);
10
+ this.options = options;
11
+ this.logger = logger.child({ className: BaseRepository2.name });
12
+ }
13
+ /**
14
+ * Transforms a document to the domain model format
15
+ */
16
+ transformDocument(doc) {
17
+ if (!doc)
18
+ return null;
19
+ // If it's already a plain object (not a Mongoose document)
20
+ if (!doc.toObject) {
21
+ // Ensure id exists if _id is present
22
+ if (doc._id && !doc.id) {
23
+ doc.id = typeof doc._id === 'object' && doc._id.toString ? doc._id.toString() : doc._id;
24
+ }
25
+ return doc;
26
+ }
27
+ // For Mongoose documents, use the built-in toObject transformation
28
+ return doc.toObject();
29
+ }
30
+ /**
31
+ * Transforms an array of documents
32
+ */
33
+ transformDocuments(docs) {
34
+ if (!docs || !Array.isArray(docs))
35
+ return [];
36
+ return docs.map((doc) => this.transformDocument(doc)).filter(Boolean);
37
+ }
38
+ /**
39
+ * Maps API criteria with 'id' to MongoDB criteria with '_id'
40
+ */
41
+ mapConditions(conditions) {
42
+ if (!conditions)
43
+ return {};
44
+ const { id, ...remaining } = conditions;
45
+ if (!id)
46
+ return remaining;
47
+ // Handle custom _id that might not be an ObjectId
48
+ let _id;
49
+ if (Types.ObjectId.isValid(id)) {
50
+ _id = new Types.ObjectId(id);
51
+ }
52
+ else {
53
+ _id = id; // Use the id as-is if it's not a valid ObjectId
54
+ }
55
+ return {
56
+ _id,
57
+ ...remaining,
58
+ };
59
+ }
60
+ /**
61
+ * Computes sort object from GetAllArgs sort parameter
62
+ * Handles both string-based and object-based sort specifications
63
+ */
64
+ computeSort(sort) {
65
+ // Default sort by createdAt descending if available, otherwise empty sort
66
+ if (!sort) {
67
+ return { createdAt: -1 };
68
+ }
69
+ // Handle object-based sort { key: 'fieldName', value: 'asc'|'desc' }
70
+ if (isObject(sort) && 'key' in sort) {
71
+ return {
72
+ [sort.key]: sort.value?.toLowerCase() === 'asc' ? 1 : -1,
73
+ };
74
+ }
75
+ // Handle string-based sort 'fieldName:asc' or 'fieldName:desc'
76
+ if (typeof sort === 'string') {
77
+ const [field, direction] = sort.split(':');
78
+ if (field) {
79
+ return {
80
+ [field]: direction?.toLowerCase() === 'asc' ? 1 : -1,
81
+ };
82
+ }
83
+ }
84
+ // Handle array of sort specifications
85
+ if (Array.isArray(sort)) {
86
+ return sort.reduce((acc, sortItem) => {
87
+ if (isObject(sortItem) && sortItem.key) {
88
+ acc[sortItem.key] = sortItem.value?.toLowerCase() === 'asc' ? 1 : -1;
89
+ }
90
+ return acc;
91
+ }, {});
92
+ }
93
+ // Fallback to default sort
94
+ return { createdAt: -1 };
95
+ }
96
+ /**
97
+ * Prepares an aggregation pipeline with standard stages
98
+ * @param options Query options including filtering, sorting, pagination
99
+ * @param customPipeline Optional custom pipeline stages to include
100
+ * @returns Complete MongoDB aggregation pipeline
101
+ */
102
+ preparePipeline(options, customPipeline = []) {
103
+ const { criteria, sort, limit, skip } = options;
104
+ const pipeline = [];
105
+ // Match stage (filtering)
106
+ if (criteria) {
107
+ pipeline.push({
108
+ $match: this.mapConditions(criteria),
109
+ });
110
+ }
111
+ // Add custom pipeline stages
112
+ if (customPipeline.length > 0) {
113
+ pipeline.push(...customPipeline);
114
+ }
115
+ // Sort stage
116
+ const sortBy = this.computeSort(sort);
117
+ if (Object.keys(sortBy).length > 0) {
118
+ pipeline.push({ $sort: sortBy });
119
+ }
120
+ // Pagination stages
121
+ if (skip !== undefined) {
122
+ pipeline.push({ $skip: skip || PAGINATION_OPTIONS.skip });
123
+ }
124
+ if (limit !== undefined) {
125
+ pipeline.push({ $limit: limit || PAGINATION_OPTIONS.limit });
126
+ }
127
+ return pipeline;
128
+ }
129
+ /**
130
+ * Execute an aggregation pipeline and transform the results
131
+ */
132
+ async aggregate(pipeline) {
133
+ try {
134
+ const results = await this.model.aggregate(pipeline).exec();
135
+ return this.transformDocuments(results);
136
+ }
137
+ catch (e) {
138
+ this.logger.error(e, 'Error executing aggregation pipeline: %j', pipeline);
139
+ throw e;
140
+ }
141
+ }
142
+ async count(conditions) {
143
+ return this.model.count(this.mapConditions(conditions)).exec();
144
+ }
145
+ async get(conditions, selectedFields) {
146
+ try {
147
+ const response = await this.model.findOne(this.mapConditions(conditions), selectedFields).lean().exec();
148
+ if (!response)
149
+ return null;
150
+ // Ensure id exists
151
+ if (response && response._id && !response.id) {
152
+ response.id = response._id.toString();
153
+ }
154
+ return response;
155
+ }
156
+ catch (e) {
157
+ this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);
158
+ throw e;
159
+ }
160
+ }
161
+ async find(conditions, selectedFields) {
162
+ try {
163
+ const response = await this.model.findOne(conditions, selectedFields).lean().exec();
164
+ if (!response)
165
+ return null;
166
+ // Ensure id exists
167
+ if (response && response._id && !response.id) {
168
+ response.id = response._id.toString();
169
+ }
170
+ return response;
171
+ }
172
+ catch (e) {
173
+ this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);
174
+ throw e;
175
+ }
176
+ }
177
+ async getAll(options) {
178
+ try {
179
+ const { criteria, selectedFields, sort, limit, skip } = options;
180
+ const mappedCriteria = this.mapConditions(criteria);
181
+ const sortBy = this.computeSort(sort);
182
+ const response = await this.model
183
+ .find(mappedCriteria, selectedFields)
184
+ .sort(sortBy)
185
+ .limit(limit || PAGINATION_OPTIONS.limit)
186
+ .skip(skip || PAGINATION_OPTIONS.skip)
187
+ .lean()
188
+ .exec();
189
+ // Ensure id exists for each document
190
+ return response.map((doc) => {
191
+ if (doc._id && !doc.id) {
192
+ doc.id = doc._id.toString();
193
+ }
194
+ return doc;
195
+ });
196
+ }
197
+ catch (e) {
198
+ this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', options);
199
+ throw e;
200
+ }
201
+ }
202
+ /**
203
+ * Get all documents using aggregation pipeline
204
+ */
205
+ async getAllWithPipeline(options, customPipeline = []) {
206
+ try {
207
+ const pipeline = this.preparePipeline(options, customPipeline);
208
+ return this.aggregate(pipeline);
209
+ }
210
+ catch (e) {
211
+ this.logger.error(e, 'Unable to retrieve Model with pipeline [%j]', customPipeline);
212
+ throw e;
213
+ }
214
+ }
215
+ async getAllWithCount(options) {
216
+ const data = await this.getAll(options);
217
+ const totalCount = await this.count(options.criteria);
218
+ return { totalCount, data };
219
+ }
220
+ /**
221
+ * Get all documents with count using aggregation pipeline
222
+ */
223
+ async getAllWithCountAndPipeline(options, customPipeline = []) {
224
+ // Clone options to avoid modifying the original
225
+ const countOptions = { ...options };
226
+ // Remove pagination for count
227
+ delete countOptions.limit;
228
+ delete countOptions.skip;
229
+ // Prepare count pipeline (without pagination)
230
+ const countPipeline = this.preparePipeline(countOptions, customPipeline);
231
+ countPipeline.push({ $count: 'total' });
232
+ // Execute both queries in parallel
233
+ const [data, countResult] = await Promise.all([
234
+ this.getAllWithPipeline(options, customPipeline),
235
+ this.model.aggregate(countPipeline).exec(),
236
+ ]);
237
+ const totalCount = countResult?.[0]?.total || 0;
238
+ return { data, totalCount };
239
+ }
240
+ async create(data) {
241
+ try {
242
+ // Handle custom _id if provided in the data
243
+ const createData = { ...data };
244
+ // If id is provided but _id is not, map id to _id
245
+ if (createData.id && !createData._id) {
246
+ createData._id = Types.ObjectId.isValid(createData.id)
247
+ ? new Types.ObjectId(createData.id)
248
+ : createData.id;
249
+ delete createData.id; // Remove id to avoid conflicts
250
+ }
251
+ const response = await this.model.create(createData);
252
+ return this.transformDocument(response);
253
+ }
254
+ catch (e) {
255
+ this.logger.error(e, 'Unable to create Model with data [%j]', data);
256
+ throw e;
257
+ }
258
+ }
259
+ async bulkCreate(data) {
260
+ try {
261
+ const response = await this.model.insertMany(data, {
262
+ lean: true,
263
+ ordered: true,
264
+ });
265
+ // Ensure id exists for each document
266
+ return response.map((doc) => {
267
+ if (doc._id && !doc.id) {
268
+ doc.id = doc._id.toString();
269
+ }
270
+ return doc;
271
+ });
272
+ }
273
+ catch (e) {
274
+ this.logger.error(e, 'Unable to bulk create due to error [%s]', e.message);
275
+ throw e;
276
+ }
277
+ }
278
+ async upsert(conditions, update, options = {}) {
279
+ return this.update(conditions, update, {
280
+ upsert: true,
281
+ ...options,
282
+ });
283
+ }
284
+ async update(criteria, update, options = {}) {
285
+ try {
286
+ const mappedCriteria = this.mapConditions(criteria);
287
+ const mergedOptions = {
288
+ new: true,
289
+ useFindAndModify: false,
290
+ ...options,
291
+ };
292
+ const { id } = criteria;
293
+ let response;
294
+ if (id) {
295
+ response = await this.model.findByIdAndUpdate(id, update, mergedOptions).exec();
296
+ }
297
+ else {
298
+ response = await this.model.findOneAndUpdate(mappedCriteria, update, mergedOptions).exec();
299
+ }
300
+ return this.transformDocument(response);
301
+ }
302
+ catch (e) {
303
+ this.logger.error(e, 'Unable to Update with criteria [%j] and data [%j]', criteria, update);
304
+ throw e;
305
+ }
306
+ }
307
+ async bulkUpdate(criteria, update, options = {}) {
308
+ try {
309
+ const mappedCriteria = this.mapConditions(criteria);
310
+ await this.model.updateMany(mappedCriteria, update, options);
311
+ // Fetch the updated documents
312
+ const response = await this.model.find(mappedCriteria).lean().exec();
313
+ // Ensure id exists for each document
314
+ return response.map((doc) => {
315
+ if (doc._id && !doc.id) {
316
+ doc.id = doc._id.toString();
317
+ }
318
+ return doc;
319
+ });
320
+ }
321
+ catch (e) {
322
+ this.logger.error(e, 'Unable to Bulk Update with criteria [%j] and data [%j]', criteria, update);
323
+ throw e;
324
+ }
325
+ }
326
+ async delete(criteria) {
327
+ try {
328
+ const mappedCriteria = this.mapConditions(criteria);
329
+ let deleted;
330
+ if (criteria?.id) {
331
+ deleted = await this.model.findByIdAndDelete(criteria.id);
332
+ }
333
+ else {
334
+ deleted = await this.model.findOneAndDelete(mappedCriteria);
335
+ }
336
+ return !!deleted;
337
+ }
338
+ catch (e) {
339
+ this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);
340
+ throw e;
341
+ }
342
+ }
343
+ async bulkDelete(criteria) {
344
+ try {
345
+ const mappedCriteria = this.mapConditions(criteria);
346
+ const deleted = await this.model.deleteMany(mappedCriteria);
347
+ return deleted?.deletedCount || 0;
348
+ }
349
+ catch (e) {
350
+ this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);
351
+ throw e;
352
+ }
353
+ }
354
+ async bulkGet(ids, selectedFields) {
355
+ try {
356
+ // Create a query that handles both ObjectId and string IDs
357
+ const query = { _id: { $in: [] } };
358
+ // Process each ID
359
+ ids.forEach((id) => {
360
+ if (Types.ObjectId.isValid(id)) {
361
+ query._id.$in.push(new Types.ObjectId(id));
362
+ }
363
+ else {
364
+ query._id.$in.push(id); // Add as string
365
+ }
366
+ });
367
+ const results = await this.model.find(query).select(selectedFields).lean().exec();
368
+ // Ensure id exists for each document
369
+ return results.map((doc) => {
370
+ if (doc._id && !doc.id) {
371
+ doc.id = doc._id.toString();
372
+ }
373
+ return doc;
374
+ });
375
+ }
376
+ catch (e) {
377
+ this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', ids);
378
+ throw e;
379
+ }
380
+ }
381
+ };
382
+ BaseMongoRepository = __decorate([
383
+ injectable(),
384
+ __param(0, unmanaged()),
385
+ __param(1, unmanaged()),
386
+ __param(2, unmanaged()),
387
+ __param(3, unmanaged()),
388
+ __metadata("design:paramtypes", [Function, Connection, Object, typeof (_a = typeof IMongoOptions !== "undefined" && IMongoOptions) === "function" ? _a : Object])
389
+ ], BaseMongoRepository);export{BaseMongoRepository};//# sourceMappingURL=BaseMongoRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseMongoRepository.js","sources":["../../../src/store/repositories/BaseMongoRepository.ts"],"sourcesContent":["/* eslint-disable import/no-unresolved */\n/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable class-methods-use-this */\nimport { isObject } from 'lodash-es';\nimport { CdmLogger } from '@cdm-logger/core';\nimport { Connection, FilterQuery, Model, PipelineStage, Types, UpdateQuery } from 'mongoose';\nimport { injectable, unmanaged } from 'inversify';\nimport {\n GetAllArgs,\n ISort,\n IBaseMongoRepository,\n IMongoOptions,\n PAGINATION_OPTIONS,\n AsDomainType,\n CreateType,\n UpdateType,\n} from 'common/server';\n\n@injectable()\nexport class BaseMongoRepository<SchemaType> implements IBaseMongoRepository<SchemaType> {\n private options: IMongoOptions;\n\n protected logger: CdmLogger.ILogger;\n\n model: Model<SchemaType>;\n\n constructor(\n @unmanaged()\n private modelFunc: (db: Connection) => Model<SchemaType>,\n @unmanaged()\n db: Connection,\n @unmanaged()\n logger: CdmLogger.ILogger,\n @unmanaged()\n options?: IMongoOptions,\n ) {\n this.model = modelFunc(db);\n this.options = options;\n this.logger = logger.child({ className: BaseRepository2.name });\n }\n\n /**\n * Transforms a document to the domain model format\n */\n protected transformDocument(doc: any): AsDomainType<SchemaType> | null {\n if (!doc) return null;\n\n // If it's already a plain object (not a Mongoose document)\n if (!doc.toObject) {\n // Ensure id exists if _id is present\n if (doc._id && !doc.id) {\n doc.id = typeof doc._id === 'object' && doc._id.toString ? doc._id.toString() : doc._id;\n }\n return doc as AsDomainType<SchemaType>;\n }\n\n // For Mongoose documents, use the built-in toObject transformation\n return doc.toObject() as AsDomainType<SchemaType>;\n }\n\n /**\n * Transforms an array of documents\n */\n protected transformDocuments(docs: SchemaType[]): AsDomainType<SchemaType>[] {\n if (!docs || !Array.isArray(docs)) return [];\n return docs.map((doc) => this.transformDocument(doc)).filter(Boolean) as AsDomainType<SchemaType>[];\n }\n\n /**\n * Maps API criteria with 'id' to MongoDB criteria with '_id'\n */\n private mapConditions(conditions?: FilterQuery<SchemaType>): FilterQuery<SchemaType> {\n if (!conditions) return {};\n\n const { id, ...remaining } = conditions as any;\n\n if (!id) return remaining as FilterQuery<SchemaType>;\n\n // Handle custom _id that might not be an ObjectId\n let _id;\n if (Types.ObjectId.isValid(id)) {\n _id = new Types.ObjectId(id);\n } else {\n _id = id; // Use the id as-is if it's not a valid ObjectId\n }\n\n return {\n _id,\n ...remaining,\n } as FilterQuery<SchemaType>;\n }\n\n /**\n * Computes sort object from GetAllArgs sort parameter\n * Handles both string-based and object-based sort specifications\n */\n protected computeSort(sort: ISort | string | ISort[]): Record<string, 1 | -1> {\n // Default sort by createdAt descending if available, otherwise empty sort\n if (!sort) {\n return { createdAt: -1 };\n }\n\n // Handle object-based sort { key: 'fieldName', value: 'asc'|'desc' }\n if (isObject(sort) && 'key' in sort) {\n return {\n [sort.key]: sort.value?.toLowerCase() === 'asc' ? 1 : -1,\n };\n }\n\n // Handle string-based sort 'fieldName:asc' or 'fieldName:desc'\n if (typeof sort === 'string') {\n const [field, direction] = sort.split(':');\n if (field) {\n return {\n [field]: direction?.toLowerCase() === 'asc' ? 1 : -1,\n };\n }\n }\n\n // Handle array of sort specifications\n if (Array.isArray(sort)) {\n return sort.reduce((acc, sortItem) => {\n if (isObject(sortItem) && sortItem.key) {\n acc[sortItem.key] = sortItem.value?.toLowerCase() === 'asc' ? 1 : -1;\n }\n return acc;\n }, {});\n }\n\n // Fallback to default sort\n return { createdAt: -1 };\n }\n\n /**\n * Prepares an aggregation pipeline with standard stages\n * @param options Query options including filtering, sorting, pagination\n * @param customPipeline Optional custom pipeline stages to include\n * @returns Complete MongoDB aggregation pipeline\n */\n protected preparePipeline(options: GetAllArgs<SchemaType>, customPipeline: PipelineStage[] = []): PipelineStage[] {\n const { criteria, sort, limit, skip } = options;\n const pipeline: PipelineStage[] = [];\n\n // Match stage (filtering)\n if (criteria) {\n pipeline.push({\n $match: this.mapConditions(criteria),\n });\n }\n\n // Add custom pipeline stages\n if (customPipeline.length > 0) {\n pipeline.push(...customPipeline);\n }\n\n // Sort stage\n const sortBy = this.computeSort(sort);\n if (Object.keys(sortBy).length > 0) {\n pipeline.push({ $sort: sortBy });\n }\n\n // Pagination stages\n if (skip !== undefined) {\n pipeline.push({ $skip: skip || PAGINATION_OPTIONS.skip });\n }\n\n if (limit !== undefined) {\n pipeline.push({ $limit: limit || PAGINATION_OPTIONS.limit });\n }\n\n return pipeline;\n }\n\n /**\n * Execute an aggregation pipeline and transform the results\n */\n protected async aggregate(pipeline: PipelineStage[]): Promise<AsDomainType<SchemaType>[]> {\n try {\n const results = await this.model.aggregate(pipeline).exec();\n return this.transformDocuments(results);\n } catch (e) {\n this.logger.error(e, 'Error executing aggregation pipeline: %j', pipeline);\n throw e;\n }\n }\n\n public async count(conditions?: FilterQuery<SchemaType>): Promise<number> {\n return this.model.count(this.mapConditions(conditions)).exec();\n }\n\n public async get(\n conditions?: FilterQuery<SchemaType>,\n selectedFields?: string,\n ): Promise<AsDomainType<SchemaType> | null> {\n try {\n const response = await this.model.findOne(this.mapConditions(conditions), selectedFields).lean().exec();\n\n if (!response) return null;\n\n // Ensure id exists\n if (response && (response as any)._id && !(response as any).id) {\n (response as any).id = (response as any)._id.toString();\n }\n\n return response as AsDomainType<SchemaType>;\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);\n throw e;\n }\n }\n\n public async find(\n conditions: Partial<FilterQuery<SchemaType>>,\n selectedFields?: string,\n ): Promise<AsDomainType<SchemaType> | null> {\n try {\n const response = await this.model.findOne(conditions, selectedFields).lean().exec();\n\n if (!response) return null;\n\n // Ensure id exists\n if (response && (response as any)._id && !(response as any).id) {\n (response as any).id = (response as any)._id.toString();\n }\n\n return response as AsDomainType<SchemaType>;\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);\n throw e;\n }\n }\n\n public async getAll(options: GetAllArgs<SchemaType>): Promise<AsDomainType<SchemaType>[]> {\n try {\n const { criteria, selectedFields, sort, limit, skip } = options;\n const mappedCriteria = this.mapConditions(criteria);\n const sortBy = this.computeSort(sort);\n\n const response = await this.model\n .find(mappedCriteria, selectedFields)\n .sort(sortBy as any)\n .limit(limit || PAGINATION_OPTIONS.limit)\n .skip(skip || PAGINATION_OPTIONS.skip)\n .lean()\n .exec();\n\n // Ensure id exists for each document\n return response.map((doc) => {\n if (doc._id && !doc.id) {\n doc.id = doc._id.toString();\n }\n return doc as AsDomainType<SchemaType>;\n });\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', options);\n throw e;\n }\n }\n\n /**\n * Get all documents using aggregation pipeline\n */\n public async getAllWithPipeline(\n options: GetAllArgs<SchemaType>,\n customPipeline: PipelineStage[] = [],\n ): Promise<AsDomainType<SchemaType>[]> {\n try {\n const pipeline = this.preparePipeline(options, customPipeline);\n return this.aggregate(pipeline);\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with pipeline [%j]', customPipeline);\n throw e;\n }\n }\n\n public async getAllWithCount(options: GetAllArgs<SchemaType>): Promise<{\n data: AsDomainType<SchemaType>[];\n totalCount: number;\n }> {\n const data = await this.getAll(options);\n const totalCount = await this.count(options.criteria);\n return { totalCount, data };\n }\n\n /**\n * Get all documents with count using aggregation pipeline\n */\n public async getAllWithCountAndPipeline(\n options: GetAllArgs<SchemaType>,\n customPipeline: PipelineStage[] = [],\n ): Promise<{\n data: AsDomainType<SchemaType>[];\n totalCount: number;\n }> {\n // Clone options to avoid modifying the original\n const countOptions = { ...options };\n\n // Remove pagination for count\n delete countOptions.limit;\n delete countOptions.skip;\n\n // Prepare count pipeline (without pagination)\n const countPipeline = this.preparePipeline(countOptions, customPipeline);\n countPipeline.push({ $count: 'total' });\n\n // Execute both queries in parallel\n const [data, countResult] = await Promise.all([\n this.getAllWithPipeline(options, customPipeline),\n this.model.aggregate(countPipeline).exec(),\n ]);\n\n const totalCount = countResult?.[0]?.total || 0;\n return { data, totalCount };\n }\n\n public async create<T = CreateType<SchemaType>>(data: T): Promise<AsDomainType<SchemaType>> {\n try {\n // Handle custom _id if provided in the data\n const createData = { ...data } as any;\n\n // If id is provided but _id is not, map id to _id\n if (createData.id && !createData._id) {\n createData._id = Types.ObjectId.isValid(createData.id)\n ? new Types.ObjectId(createData.id)\n : createData.id;\n delete createData.id; // Remove id to avoid conflicts\n }\n\n const response = await this.model.create(createData);\n return this.transformDocument(response);\n } catch (e) {\n this.logger.error(e, 'Unable to create Model with data [%j]', data);\n throw e;\n }\n }\n\n public async bulkCreate<T = CreateType<SchemaType>>(data: T[]): Promise<AsDomainType<SchemaType>[]> {\n try {\n const response = await this.model.insertMany(data, {\n lean: true,\n ordered: true,\n });\n\n // Ensure id exists for each document\n return response.map((doc: any) => {\n if (doc._id && !doc.id) {\n doc.id = doc._id.toString();\n }\n return doc as AsDomainType<SchemaType>;\n });\n } catch (e) {\n this.logger.error(e, 'Unable to bulk create due to error [%s]', e.message);\n throw e;\n }\n }\n\n public async upsert<T = UpdateType<SchemaType>>(\n conditions: FilterQuery<SchemaType>,\n update: T,\n options: Record<string, unknown> = {},\n ): Promise<AsDomainType<SchemaType>> {\n return this.update(conditions, update, {\n upsert: true,\n ...options,\n });\n }\n\n public async update<T = UpdateType<SchemaType>>(\n criteria: FilterQuery<SchemaType>,\n update: T | UpdateQuery<SchemaType>,\n options: Record<string, unknown> = {},\n ): Promise<AsDomainType<SchemaType>> {\n try {\n const mappedCriteria = this.mapConditions(criteria);\n const mergedOptions = {\n new: true,\n useFindAndModify: false,\n ...options,\n };\n\n const { id } = criteria as any;\n let response;\n\n if (id) {\n response = await this.model.findByIdAndUpdate(id, update as any, mergedOptions).exec();\n } else {\n response = await this.model.findOneAndUpdate(mappedCriteria, update as any, mergedOptions).exec();\n }\n\n return this.transformDocument(response);\n } catch (e) {\n this.logger.error(e, 'Unable to Update with criteria [%j] and data [%j]', criteria, update);\n throw e;\n }\n }\n\n public async bulkUpdate<T = UpdateType<SchemaType>>(\n criteria: FilterQuery<SchemaType>,\n update: T | UpdateQuery<SchemaType>,\n options: Record<string, unknown> = {},\n ): Promise<AsDomainType<SchemaType>[]> {\n try {\n const mappedCriteria = this.mapConditions(criteria);\n await this.model.updateMany(mappedCriteria, update as any, options);\n\n // Fetch the updated documents\n const response = await this.model.find(mappedCriteria).lean().exec();\n\n // Ensure id exists for each document\n return response.map((doc) => {\n if (doc._id && !doc.id) {\n doc.id = doc._id.toString();\n }\n return doc as AsDomainType<SchemaType>;\n });\n } catch (e) {\n this.logger.error(e, 'Unable to Bulk Update with criteria [%j] and data [%j]', criteria, update);\n throw e;\n }\n }\n\n public async delete(criteria: FilterQuery<SchemaType>): Promise<boolean> {\n try {\n const mappedCriteria = this.mapConditions(criteria);\n let deleted;\n\n if (criteria?.id) {\n deleted = await this.model.findByIdAndDelete(criteria.id);\n } else {\n deleted = await this.model.findOneAndDelete(mappedCriteria);\n }\n\n return !!deleted;\n } catch (e) {\n this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);\n throw e;\n }\n }\n\n public async bulkDelete(criteria: FilterQuery<SchemaType>): Promise<number> {\n try {\n const mappedCriteria = this.mapConditions(criteria);\n const deleted = await this.model.deleteMany(mappedCriteria);\n return deleted?.deletedCount || 0;\n } catch (e) {\n this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);\n throw e;\n }\n }\n\n public async bulkGet(ids: string[], selectedFields?: string): Promise<AsDomainType<SchemaType>[]> {\n try {\n // Create a query that handles both ObjectId and string IDs\n const query: any = { _id: { $in: [] } };\n\n // Process each ID\n ids.forEach((id) => {\n if (Types.ObjectId.isValid(id)) {\n query._id.$in.push(new Types.ObjectId(id));\n } else {\n query._id.$in.push(id); // Add as string\n }\n });\n\n const results = await this.model.find(query).select(selectedFields).lean().exec();\n\n // Ensure id exists for each document\n return results.map((doc) => {\n if ((doc as any)._id && !(doc as any).id) {\n (doc as any).id = (doc as any)._id.toString();\n }\n return doc as AsDomainType<SchemaType>;\n });\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', ids);\n throw e;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -1,4 +1,4 @@
1
- import {__decorate,__param,__metadata}from'tslib';import {isObject}from'lodash-es';import'@cdm-logger/core';import {Connection,Types}from'mongoose';import {injectable,unmanaged}from'inversify';import {PAGINATION_OPTIONS}from'../../interfaces/base-repository.js';var BaseRepository_1;
1
+ import {__decorate,__param,__metadata}from'tslib';import {isObject}from'lodash-es';import'@cdm-logger/core';import {Connection,Types}from'mongoose';import {injectable,unmanaged}from'inversify';import {PAGINATION_OPTIONS}from'../../interfaces/getAllArgs.js';var BaseRepository_1;
2
2
  let BaseRepository = BaseRepository_1 = class BaseRepository {
3
3
  modelFunc;
4
4
  options;
@@ -1 +1 @@
1
- {"version":3,"file":"base-repository.js","sources":["../../../src/store/repositories/base-repository.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-repository.js","sources":["../../../src/store/repositories/base-repository.ts"],"sourcesContent":["import { isObject } from 'lodash-es';\nimport { CdmLogger } from '@cdm-logger/core';\nimport { Connection, Document, FilterQuery, Model, PipelineStage, Types, UpdateQuery } from 'mongoose';\nimport { injectable, unmanaged } from 'inversify';\nimport { GetAllArgs, IBaseRepository, IMongoOptions, PAGINATION_OPTIONS } from '../../interfaces';\n\n@injectable()\nexport class BaseRepository<T, D = Document<T>> implements IBaseRepository<T, D> {\n private options: IMongoOptions;\n\n protected logger: CdmLogger.ILogger;\n\n model: Model<D>;\n\n constructor(\n @unmanaged()\n private modelFunc: (db: Connection) => Model<D>,\n @unmanaged()\n db: Connection,\n @unmanaged()\n logger: CdmLogger.ILogger,\n @unmanaged()\n options?: IMongoOptions,\n ) {\n this.model = modelFunc(db);\n this.options = options;\n this.logger = logger.child({ className: BaseRepository.name });\n }\n\n private computeSort(sort: GetAllArgs<D>['sort']): Record<string, 1 | -1> | null {\n if (isObject(sort)) {\n return { [sort?.key]: sort.value.toLowerCase() === 'asc' ? 1 : -1 };\n }\n return null;\n }\n\n preparePipeLine(options: GetAllArgs<D>): PipelineStage[] {\n const { criteria, selectedFields, sort, limit, skip } = options;\n // map id to mongoose _id\n const mappedCriteria = Object.entries(criteria || {}).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: Types.ObjectId.isValid(value) ? new Types.ObjectId(value) : value,\n }),\n { id: undefined },\n );\n const { id, ...rest } = mappedCriteria;\n const projectedFields = selectedFields?.split(' ').reduce(\n (acc, key) => ({\n ...acc,\n [key]: 1,\n }),\n {},\n );\n return [\n { $match: Object.assign({}, rest, id ? { _id: id } : {}) },\n ...(sort ? [{ $sort: this.computeSort(sort) }] : []),\n ...(selectedFields?.length\n ? [\n {\n $project: projectedFields,\n },\n ]\n : []),\n { $skip: skip || PAGINATION_OPTIONS.skip },\n { $limit: limit || PAGINATION_OPTIONS.limit },\n { $addFields: { id: '$_id' } },\n { $project: { _id: 0 } },\n ];\n }\n\n // public async getAll(options: GetAllArgs<D>): Promise<T[]> {\n // try {\n // return this.model.aggregate(this.preparePipeLine(options));\n // } catch (e) {\n // this.logger.error(e, 'Unable to retrieve Model with options ${JSON.stringify(options)}`);\n // throw e;\n // }\n // }\n\n public async getAll(options: GetAllArgs<D>): Promise<T[]> {\n try {\n const { criteria, selectedFields, sort, limit, skip } = options;\n // map id to mongoose _id\n const { id, ...rest } = criteria || { id: undefined };\n const sortBy = isObject(sort) ? { [sort?.key]: sort.value } : { createdAt: 1 };\n const response = await this.model\n .find({ ...rest, ...(id ? { _id: id } : {}) }, selectedFields)\n .sort(sortBy as never)\n .limit(limit || PAGINATION_OPTIONS.limit)\n .skip(skip || PAGINATION_OPTIONS.skip)\n .exec();\n return response.map((i) => i?.toObject()) as T[];\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', options);\n throw e;\n }\n }\n\n public async getAllWithCount(options: GetAllArgs<D>): Promise<{ data: T[]; totalCount: number }> {\n const data = await this.getAll(options);\n const totalCount = await this.count(options.criteria);\n return { totalCount, data };\n }\n\n // public async getAllWithCount(options: GetAllArgs<D>): Promise<{ data: T[], totalCount: number }> {\n // try {\n // const pipeline: PipelineStage[] = this.preparePipeLine(options);\n // pipeline.push({\n // $facet: {\n // data: [{\n // $group: {\n // _id: null,\n // items: { $push: '$$ROOT' }\n // }\n // }],\n // count: [{ $count: 'count' }],\n // },\n // })\n // const result = await this.model.aggregate(pipeline);\n // const data = result[0]?.data[0]?.items || [];\n // const totalCount = result[0]?.count[0]?.count || 0;\n // return { data, totalCount };\n // } catch (e) {\n // this.logger.error(e, 'Unable to retrieve Model with options ${JSON.stringify(options)}`);\n // throw e;\n // }\n // }\n\n // eslint-disable-next-line class-methods-use-this\n private mapConditions(conditions: FilterQuery<D>): FilterQuery<D> {\n const { id: _id, ...remaining } = conditions;\n return {\n ...(_id ? { _id } : {}),\n ...remaining,\n };\n }\n\n public async count(conditions?: FilterQuery<D>): Promise<number> {\n return this.model.count(conditions).exec();\n }\n\n public async get(conditions?: FilterQuery<D>, selectedFields?: string): Promise<T> {\n try {\n const response = await this.model.findOne(this.mapConditions(conditions), selectedFields).exec();\n return response?.toObject() as T;\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);\n throw e;\n }\n }\n\n public async bulkGet(ids: string[]): Promise<T[]> {\n try {\n const results = await this.model.find().setOptions({ batchSize: 100 }).where('_id').in(ids).exec();\n return results.map((i) => i.toObject()) as T[];\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', ids);\n throw e;\n }\n }\n\n public async find(conditions: Partial<FilterQuery<D>>, selectedFields?: string): Promise<T> {\n try {\n const response = await this.model.findOne(conditions, selectedFields).exec();\n return response?.toObject() as T;\n } catch (e) {\n this.logger.error(e, 'Unable to retrieve Model with criteria [%j]', conditions);\n throw e;\n }\n }\n\n public async create<I>(data: I): Promise<T> {\n try {\n const response = await this.model.create(data);\n return response.toObject() as T;\n } catch (e) {\n this.logger.error(\n e,\n 'Unable to create Model with data ${JSON.stringify(data)} due to error [%s]',\n e.message,\n );\n throw e;\n }\n }\n\n public async bulkCreate<I>(data: I[]): Promise<T[]> {\n try {\n const response = await this.model.insertMany(data, {\n lean: true,\n ordered: true,\n });\n return response as unknown as T[];\n } catch (e) {\n this.logger.error(e, 'Unable to bulk create due to error [%s]', e.message);\n }\n }\n\n public async upsert<I>(conditions: FilterQuery<D>, update: I, options?: Record<string, unknown>): Promise<T> {\n return this.update<I>(conditions, update, {\n upsert: true,\n ...options,\n });\n }\n\n public async bulkUpdate<I>(\n criteria: FilterQuery<D>,\n update: UpdateQuery<D>,\n options: Record<string, unknown>,\n ): Promise<T[]> {\n try {\n const { id, ...rest } = criteria;\n const processedCriteria = id ? { _id: id, ...rest } : criteria;\n const res = await this.model.updateMany(processedCriteria, update);\n if (res) {\n const response = await this.model.find(processedCriteria).exec();\n return response.map((i) => i?.toObject()) as T[];\n } else {\n this.logger.error('Unable to Bulk Update with criteria [%j] and data [%j]', criteria, update);\n throw new Error('Unable to do bulk update');\n }\n } catch (e) {\n this.logger.error(e, 'Unable to Bulk Update with criteria [%j] and data [%j]', criteria, update);\n throw e;\n }\n }\n\n public async update<I>(\n criteria: FilterQuery<D>,\n update: UpdateQuery<D>,\n options: Record<string, unknown>,\n ): Promise<T> {\n try {\n const { id, ...rest } = criteria;\n const processedCriteria = id ? { _id: id, ...rest } : criteria;\n const mergedOptions = {\n new: true,\n useFindAndModify: false,\n ...options,\n };\n if (id) {\n return (await this.model\n .findByIdAndUpdate(id, update as unknown as never, mergedOptions)\n .exec()) as unknown as Promise<T>;\n }\n return (await this.model\n .findOneAndUpdate(processedCriteria, update as unknown as never, mergedOptions)\n .exec()) as unknown as Promise<T>;\n } catch (e) {\n this.logger.error(e, 'Unable to Update with criteria [%j] and data [%j]', criteria, update);\n throw e;\n }\n }\n\n public async delete(criteria: FilterQuery<D>): Promise<boolean> {\n try {\n let deleted;\n if (criteria?.id) {\n deleted = await this.model.findByIdAndDelete(criteria.id);\n } else {\n deleted = await this.model.findOneAndDelete(this.mapConditions(criteria));\n }\n return !!deleted;\n } catch (e) {\n this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);\n throw e;\n }\n }\n\n public async bulkDelete(criteria: FilterQuery<D>): Promise<number> {\n try {\n const deleted = await this.model.deleteMany(this.mapConditions(criteria));\n return deleted?.deletedCount || 0;\n } catch (e) {\n this.logger.error(e, 'Unable to delete the model with criteria [%j]', criteria);\n throw e;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
+ export * from './BaseMongoRepository';
1
2
  export * from './base-repository';
@@ -0,0 +1,5 @@
1
+ export const SERVER_TYPES = {
2
+ BaseMongoRepository: Symbol.for('BaseMongoRepository'),
3
+ BaseMongoService: Symbol.for('BaseMongoService'),
4
+ BaseService: Symbol.for('BaseService'),
5
+ }
@@ -0,0 +1,13 @@
1
+
2
+ export interface IDatabaseMigration {
3
+
4
+ /**
5
+ * ID of the migration, and it should be changed inorder to overwrite previous migration
6
+ */
7
+ id: string;
8
+
9
+ up?(): Promise<void>;
10
+
11
+
12
+ down?(): Promise<void>;
13
+ }