@aldb2b/common 1.0.101 → 1.0.104

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 (146) hide show
  1. package/build/db/CustomModel.d.ts +4 -4
  2. package/build/db/CustomModel.js +7 -7
  3. package/build/db/MongooseBase.d.ts +37 -37
  4. package/build/db/MongooseBase.js +321 -321
  5. package/build/db/aggregate/AggregateConvertor.d.ts +23 -23
  6. package/build/db/aggregate/AggregateConvertor.js +211 -211
  7. package/build/db/aggregate/createAggregateResponse.d.ts +2 -2
  8. package/build/db/aggregate/createAggregateResponse.js +49 -49
  9. package/build/db/mongoose-find-options.d.ts +12 -12
  10. package/build/db/mongoose-find-options.js +67 -67
  11. package/build/decorators/get-event-id-decorator.d.ts +1 -1
  12. package/build/decorators/get-event-id-decorator.js +9 -9
  13. package/build/decorators/get-user-decorator.d.ts +1 -1
  14. package/build/decorators/get-user-decorator.js +12 -12
  15. package/build/events/attendee-contact.interface.d.ts +10 -10
  16. package/build/events/attendee-contact.interface.js +2 -2
  17. package/build/events/authorize-user.interface.d.ts +13 -13
  18. package/build/events/authorize-user.interface.js +2 -2
  19. package/build/events/campaign-users.interface.d.ts +11 -11
  20. package/build/events/campaign-users.interface.js +2 -2
  21. package/build/events/compute-calendar.interface.d.ts +14 -14
  22. package/build/events/compute-calendar.interface.js +2 -2
  23. package/build/events/contacts-by-search.interface.d.ts +10 -10
  24. package/build/events/contacts-by-search.interface.js +2 -2
  25. package/build/events/create-company-setting.interface.d.ts +16 -16
  26. package/build/events/create-company-setting.interface.js +2 -2
  27. package/build/events/create-company.interface.d.ts +15 -13
  28. package/build/events/create-company.interface.js +2 -2
  29. package/build/events/create-contact.interface.d.ts +17 -14
  30. package/build/events/create-contact.interface.js +2 -2
  31. package/build/events/data-by-search.interface.d.ts +10 -10
  32. package/build/events/data-by-search.interface.js +2 -2
  33. package/build/events/edit-list-users.interface.d.ts +10 -10
  34. package/build/events/edit-list-users.interface.js +2 -2
  35. package/build/events/email-specs.interface.d.ts +18 -18
  36. package/build/events/email-specs.interface.js +2 -2
  37. package/build/events/get-companies.interface.d.ts +10 -10
  38. package/build/events/get-companies.interface.js +2 -2
  39. package/build/events/get-event.interface.d.ts +10 -10
  40. package/build/events/get-event.interface.js +2 -2
  41. package/build/events/get-unavailable-by-user.interface.d.ts +13 -13
  42. package/build/events/get-unavailable-by-user.interface.js +2 -2
  43. package/build/events/get-user-by-id.interface.d.ts +10 -10
  44. package/build/events/get-user-by-id.interface.js +2 -2
  45. package/build/events/groups-by-company.interface.d.ts +13 -13
  46. package/build/events/groups-by-company.interface.js +2 -2
  47. package/build/events/groups-by-ids.interface.d.ts +10 -10
  48. package/build/events/groups-by-ids.interface.js +2 -2
  49. package/build/events/manage-asseccibillity.interface.d.ts +13 -13
  50. package/build/events/manage-asseccibillity.interface.js +2 -2
  51. package/build/events/meeting-count-by-company.interface.d.ts +10 -10
  52. package/build/events/meeting-count-by-company.interface.js +2 -2
  53. package/build/events/meeting-count-by-user.interface.d.ts +10 -10
  54. package/build/events/meeting-count-by-user.interface.js +2 -2
  55. package/build/events/meeting-request-created.interface.d.ts +20 -20
  56. package/build/events/meeting-request-created.interface.js +2 -2
  57. package/build/events/meeting-requested-users.interface.d.ts +10 -10
  58. package/build/events/meeting-requested-users.interface.js +2 -2
  59. package/build/events/send-emails.interface.d.ts +21 -21
  60. package/build/events/send-emails.interface.js +2 -2
  61. package/build/events/subjects.d.ts +26 -26
  62. package/build/events/subjects.js +30 -30
  63. package/build/events/update-company-setting.interface.d.ts +16 -16
  64. package/build/events/update-company-setting.interface.js +2 -2
  65. package/build/events/update-user-event-info.interface.d.ts +17 -17
  66. package/build/events/update-user-event-info.interface.js +2 -2
  67. package/build/index.d.ts +71 -71
  68. package/build/index.js +83 -83
  69. package/build/interceptors/response.interceptor.d.ts +6 -6
  70. package/build/interceptors/response.interceptor.js +30 -30
  71. package/build/interceptors/serialize.interceptor.d.ts +12 -12
  72. package/build/interceptors/serialize.interceptor.js +24 -24
  73. package/build/middlewares/app.middleware.d.ts +6 -6
  74. package/build/middlewares/app.middleware.js +29 -29
  75. package/build/middlewares/authorizer.middleware.d.ts +10 -10
  76. package/build/middlewares/authorizer.middleware.js +102 -102
  77. package/build/tsconfig.tsbuildinfo +5005 -5001
  78. package/build/types/download-presigned-url.interface.d.ts +4 -4
  79. package/build/types/download-presigned-url.interface.js +2 -2
  80. package/build/types/header-user.interface.d.ts +8 -8
  81. package/build/types/header-user.interface.js +2 -2
  82. package/build/types/match-group.interface.d.ts +7 -7
  83. package/build/types/match-group.interface.js +2 -2
  84. package/build/types/match.interface.d.ts +6 -6
  85. package/build/types/match.interface.js +2 -2
  86. package/build/types/meeting-request-token.interface.d.ts +7 -6
  87. package/build/types/meeting-request-token.interface.js +2 -2
  88. package/build/types/meeting-type.enum.d.ts +6 -6
  89. package/build/types/meeting-type.enum.js +10 -10
  90. package/build/types/operation-types.d.ts +5 -5
  91. package/build/types/operation-types.js +9 -9
  92. package/build/types/read-result.interface.d.ts +5 -5
  93. package/build/types/read-result.interface.js +2 -2
  94. package/build/types/update-input-data.interface.d.ts +10 -10
  95. package/build/types/update-input-data.interface.js +2 -2
  96. package/build/types/upload-presigned-url.interface.d.ts +4 -4
  97. package/build/types/upload-presigned-url.interface.js +2 -2
  98. package/build/types/user-invitations.interface.d.ts +6 -6
  99. package/build/types/user-invitations.interface.js +2 -2
  100. package/build/types/user-role.enum.d.ts +7 -7
  101. package/build/types/user-role.enum.js +11 -11
  102. package/build/types/user-type.enum.d.ts +5 -5
  103. package/build/types/user-type.enum.js +9 -9
  104. package/build/types/visibility-group.interface.d.ts +6 -6
  105. package/build/types/visibility-group.interface.js +2 -2
  106. package/build/types/visibility.interface.d.ts +10 -10
  107. package/build/types/visibility.interface.js +2 -2
  108. package/build/utils/create-default-directories.d.ts +1 -1
  109. package/build/utils/create-default-directories.js +23 -23
  110. package/build/utils/equal-array-object.d.ts +1 -1
  111. package/build/utils/equal-array-object.js +9 -9
  112. package/build/utils/equal-object.d.ts +1 -1
  113. package/build/utils/equal-object.js +8 -8
  114. package/build/utils/parse-query.d.ts +1 -1
  115. package/build/utils/parse-query.js +30 -30
  116. package/build/utils/projection.d.ts +1 -1
  117. package/build/utils/projection.js +25 -25
  118. package/build/utils/timezone.d.ts +2 -2
  119. package/build/utils/timezone.js +14 -14
  120. package/build/validators/conditional-required.d.ts +2 -2
  121. package/build/validators/conditional-required.js +23 -23
  122. package/build/validators/date-validator.d.ts +2 -2
  123. package/build/validators/date-validator.js +20 -20
  124. package/build/validators/responses/customizeArrayResponse.d.ts +3 -3
  125. package/build/validators/responses/customizeArrayResponse.js +23 -23
  126. package/build/validators/responses/error.d.ts +2 -2
  127. package/build/validators/responses/error.interface.d.ts +4 -4
  128. package/build/validators/responses/error.interface.js +2 -2
  129. package/build/validators/responses/error.js +28 -28
  130. package/build/validators/responses/response-option.interface.d.ts +7 -7
  131. package/build/validators/responses/response-option.interface.js +2 -2
  132. package/build/validators/responses/succes-result.interface.d.ts +10 -10
  133. package/build/validators/responses/succes-result.interface.js +2 -2
  134. package/build/validators/responses/success.d.ts +3 -3
  135. package/build/validators/responses/success.interface.d.ts +4 -4
  136. package/build/validators/responses/success.interface.js +2 -2
  137. package/build/validators/responses/success.js +14 -14
  138. package/build/validators/validateNewItem.d.ts +1 -1
  139. package/build/validators/validateNewItem.js +22 -22
  140. package/build/validators/validateProjection.d.ts +1 -1
  141. package/build/validators/validateProjection.js +32 -32
  142. package/build/validators/validateProjectionResult.d.ts +1 -1
  143. package/build/validators/validateProjectionResult.js +36 -36
  144. package/build/validators/validateUpdateItem.d.ts +1 -1
  145. package/build/validators/validateUpdateItem.js +22 -22
  146. package/package.json +35 -35
@@ -1,322 +1,322 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MongooseBase = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const projection_1 = require("../utils/projection");
6
- class MongooseBase {
7
- constructor(dbModelInstance) {
8
- this.projectionOnCreateResult = true;
9
- this.projectionOnUpdateResult = true;
10
- this.dbModelInstance = dbModelInstance;
11
- }
12
- async create(recordObj) {
13
- try {
14
- const validatedNewItem = await this.dbModelInstance.validateNewItem(recordObj);
15
- const createdItem = await this.dbModelInstance.create(validatedNewItem);
16
- const pruningCreatedItem = this.getProjectedCreatedItem(createdItem.toObject(), recordObj);
17
- return pruningCreatedItem;
18
- }
19
- catch (err) {
20
- throw err;
21
- }
22
- }
23
- async createRaw(recordObj) {
24
- try {
25
- return await this.dbModelInstance.create(recordObj);
26
- }
27
- catch (err) {
28
- throw err;
29
- }
30
- }
31
- async createMany(createArr) {
32
- try {
33
- const queryResult = await this.dbModelInstance.insertMany(createArr);
34
- if (queryResult) {
35
- if (queryResult.length > 0) {
36
- return {
37
- records: queryResult,
38
- counts: queryResult.length,
39
- };
40
- }
41
- else {
42
- throw new common_1.BadRequestException('Nothing created');
43
- }
44
- }
45
- else {
46
- throw new common_1.BadRequestException('Nothing created');
47
- }
48
- }
49
- catch (err) {
50
- throw err;
51
- }
52
- }
53
- getProjectedCreatedItem(createdItem, recordObj) {
54
- let pruningCreatedItem = this.projectionOnCreateResult
55
- ? this.dbModelInstance.validateProjectionResult(createdItem)
56
- : createdItem;
57
- if (recordObj.necessaryProjectionArray &&
58
- recordObj.necessaryProjectionArray.length) {
59
- pruningCreatedItem = projection_1.projection(recordObj.necessaryProjectionArray, pruningCreatedItem);
60
- }
61
- return pruningCreatedItem;
62
- }
63
- async unlimitedRead(inputParams) {
64
- try {
65
- const queryOptions = this.getQueryOptions(inputParams);
66
- queryOptions.limit = inputParams.limit ? queryOptions.limit : null;
67
- return await this.readBase(queryOptions, inputParams);
68
- }
69
- catch (err) {
70
- throw err;
71
- }
72
- }
73
- async read(inputParams) {
74
- try {
75
- const queryOptions = this.getQueryOptions(inputParams);
76
- return await this.readBase(queryOptions, inputParams);
77
- }
78
- catch (err) {
79
- throw err;
80
- }
81
- }
82
- async readBase(queryOptions, inputParams) {
83
- const result = Object.assign(Object.assign({}, queryOptions), { hasTotal: false });
84
- const finalQuery = inputParams.query
85
- ? this.getFinalQuery(inputParams.query)
86
- : {};
87
- const validatedProjection = this.dbModelInstance.validateProjection(inputParams.necessaryProjectionArray);
88
- if (inputParams.hasTotal) {
89
- result.hasTotal = true;
90
- result.total = await this.getTotalCount(finalQuery);
91
- }
92
- if (this.needToBePopulated(inputParams)) {
93
- const findInput = { finalQuery, validatedProjection, queryOptions };
94
- result.data = await this.getDataWithDynamicQuery(inputParams, findInput);
95
- }
96
- else {
97
- result.data = await this.dbModelInstance.find(finalQuery, validatedProjection, queryOptions);
98
- }
99
- return result;
100
- }
101
- getQueryOptions(inputParams) {
102
- const queryOptions = {};
103
- if (inputParams.sort || inputParams.limit) {
104
- try {
105
- queryOptions.sort = JSON.parse(inputParams.sort);
106
- }
107
- catch (err) {
108
- queryOptions.sort = inputParams.sort;
109
- }
110
- }
111
- if (inputParams.limit) {
112
- queryOptions.limit = Number(inputParams.limit);
113
- }
114
- else {
115
- queryOptions.limit = 100;
116
- }
117
- if (inputParams.lean) {
118
- queryOptions.lean = true;
119
- }
120
- if (inputParams.skip) {
121
- queryOptions.skip = Number(inputParams.skip);
122
- }
123
- return queryOptions;
124
- }
125
- getFinalQuery(query) {
126
- return query ? (typeof query === 'string' ? JSON.parse(query) : query) : {};
127
- }
128
- async getTotalCount(query) {
129
- return await this.dbModelInstance.countDocuments(query);
130
- }
131
- needToBePopulated(inputParams) {
132
- return !!(inputParams.needPopulate &&
133
- Array.isArray(inputParams.populates) &&
134
- inputParams.populates.length);
135
- }
136
- async getDataWithDynamicQuery(inputParams, findInput) {
137
- inputParams.populates = this.parsePopulationArray(inputParams.populates);
138
- let dynamicQuery = this.dbModelInstance.find(findInput.finalQuery, findInput.validatedProjection, findInput.queryOptions);
139
- inputParams.populates.forEach(populateItem => {
140
- dynamicQuery = dynamicQuery.populate(populateItem);
141
- });
142
- return await dynamicQuery;
143
- }
144
- parsePopulationArray(populates) {
145
- return populates.map(item => {
146
- try {
147
- return JSON.parse(item);
148
- }
149
- catch (err) {
150
- return item;
151
- }
152
- });
153
- }
154
- async findOne(query, projection, populates) {
155
- try {
156
- const finalQuery = this.getFinalQuery(query);
157
- if (Array.isArray(populates) && populates.length) {
158
- return await this.findOneWithDynamicQuery(query, projection, populates);
159
- }
160
- else {
161
- console.log('FINAL QUERY------------', finalQuery);
162
- return await this.dbModelInstance.findOne(finalQuery, projection);
163
- }
164
- }
165
- catch (err) {
166
- throw err;
167
- }
168
- }
169
- async findOneWithDynamicQuery(query, projection, populates) {
170
- let dynamicQuery = this.dbModelInstance.findOne(query, projection);
171
- const finalPopulates = this.parsePopulationArray(populates);
172
- finalPopulates.forEach(populateItem => {
173
- dynamicQuery = dynamicQuery.populate(populateItem);
174
- });
175
- return await dynamicQuery;
176
- }
177
- async update(inputParams) {
178
- try {
179
- const validatedUpdateItem = await this.dbModelInstance.validateUpdateItem(inputParams.data);
180
- const data = this.setDataToUpdate(inputParams, validatedUpdateItem);
181
- return await this.dbModelInstance.updateMany(inputParams.query, data);
182
- }
183
- catch (err) {
184
- throw err;
185
- }
186
- }
187
- setDataToUpdate(inputParams, validatedUpdateItem) {
188
- const data = { data: {}, query: {} };
189
- if (inputParams.data['$unset']) {
190
- data.$unset = inputParams.data['$unset'];
191
- }
192
- else {
193
- data.$set = validatedUpdateItem;
194
- }
195
- if (inputParams.data['$push']) {
196
- data.$push = inputParams.data['$push'];
197
- }
198
- if (inputParams.data['$pull']) {
199
- data.$pull = inputParams.data['$pull'];
200
- }
201
- if (inputParams.data['$addToSet']) {
202
- data.$addToSet = inputParams.data['$addToSet'];
203
- }
204
- return data;
205
- }
206
- async findOneAndUpdate(inputParams) {
207
- const validatedUpdateItem = await this.dbModelInstance.validateUpdateItem(inputParams.data);
208
- const data = this.setDataToUpdate(inputParams, validatedUpdateItem);
209
- const updatedRecord = await this.dbModelInstance.findOneAndUpdate(inputParams.query, data, {
210
- new: true,
211
- lean: true,
212
- });
213
- if (!updatedRecord) {
214
- throw new common_1.BadRequestException('Invlid record Id');
215
- }
216
- return updatedRecord;
217
- }
218
- async findOneAndUpdateRaw(inputParams) {
219
- const data = this.setDataToUpdate(inputParams, inputParams.data);
220
- return this.dbModelInstance.findOneAndUpdate(inputParams.query, data, {
221
- new: true,
222
- lean: true,
223
- });
224
- }
225
- async deleteWithQuery(deleteQuery) {
226
- try {
227
- const deleteResult = await this.dbModelInstance.deleteMany(deleteQuery);
228
- if (deleteResult.deletedCount > 0) {
229
- return deleteResult.deletedCount;
230
- }
231
- throw new common_1.BadRequestException('Invalid query');
232
- }
233
- catch (err) {
234
- throw err;
235
- }
236
- }
237
- async deleteMany(idList) {
238
- try {
239
- const deleteQuery = { _id: idList };
240
- const deleteResult = await this.dbModelInstance.deleteMany(deleteQuery);
241
- if (deleteResult.deletedCount > 0) {
242
- return deleteResult.deletedCount;
243
- }
244
- throw new common_1.BadRequestException('Invalid id list');
245
- }
246
- catch (err) {
247
- throw err;
248
- }
249
- }
250
- async deleteOne(id) {
251
- try {
252
- const deletedDocument = await this.dbModelInstance.findOneAndDelete({
253
- _id: id,
254
- });
255
- if (!deletedDocument)
256
- throw new common_1.BadRequestException('Invalid id');
257
- return deletedDocument;
258
- }
259
- catch (err) {
260
- throw err;
261
- }
262
- }
263
- async count(query) {
264
- return this.dbModelInstance.countDocuments(query);
265
- }
266
- async createNested(query, data, nestedField) {
267
- try {
268
- const createObj = {};
269
- createObj[nestedField] = data;
270
- const queryResult = await this.dbModelInstance.findOneAndUpdate(query, { $push: createObj }, {
271
- runValidators: true,
272
- new: true,
273
- projection: ['_id', nestedField],
274
- });
275
- if (!queryResult) {
276
- throw new common_1.BadRequestException('Invalid Request');
277
- }
278
- const createdItem = queryResult[nestedField].pop();
279
- return createdItem;
280
- }
281
- catch (err) {
282
- throw err;
283
- }
284
- }
285
- async updateNested(inputParams, nestedField) {
286
- try {
287
- const updateItemEntries = Object.entries(inputParams.data);
288
- const validatedNestedUpdateItemSetQuery = {};
289
- for (const entry of updateItemEntries) {
290
- validatedNestedUpdateItemSetQuery[`${nestedField}.$.${entry[0]}`] =
291
- entry[1];
292
- }
293
- const queryResult = await this.dbModelInstance.findOneAndUpdate(inputParams.query, {
294
- $set: validatedNestedUpdateItemSetQuery,
295
- }, {
296
- runValidators: true,
297
- new: true,
298
- projection: ['_id', nestedField],
299
- });
300
- if (!queryResult || !queryResult[nestedField].length) {
301
- throw new common_1.BadRequestException('Invalid request');
302
- }
303
- const updatedItem = queryResult[nestedField].find(obj => obj._id.toString() === inputParams.query[`${nestedField}._id`]);
304
- return updatedItem;
305
- }
306
- catch (err) {
307
- throw err;
308
- }
309
- }
310
- async deleteNested(query, nestedId, nestedField) {
311
- try {
312
- const queryResult = await this.dbModelInstance.findOneAndUpdate(Object.assign(Object.assign({}, query), { [`${nestedField}._id`]: nestedId }), { $pull: { [nestedField]: { _id: nestedId } } }, { projection: ['_id', nestedField] });
313
- const createdItem = queryResult[nestedField].find(obj => obj._id.toString() === nestedId);
314
- return createdItem;
315
- }
316
- catch (err) {
317
- throw err;
318
- }
319
- }
320
- }
321
- exports.MongooseBase = MongooseBase;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongooseBase = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const projection_1 = require("../utils/projection");
6
+ class MongooseBase {
7
+ constructor(dbModelInstance) {
8
+ this.projectionOnCreateResult = true;
9
+ this.projectionOnUpdateResult = true;
10
+ this.dbModelInstance = dbModelInstance;
11
+ }
12
+ async create(recordObj) {
13
+ try {
14
+ const validatedNewItem = await this.dbModelInstance.validateNewItem(recordObj);
15
+ const createdItem = await this.dbModelInstance.create(validatedNewItem);
16
+ const pruningCreatedItem = this.getProjectedCreatedItem(createdItem.toObject(), recordObj);
17
+ return pruningCreatedItem;
18
+ }
19
+ catch (err) {
20
+ throw err;
21
+ }
22
+ }
23
+ async createRaw(recordObj) {
24
+ try {
25
+ return await this.dbModelInstance.create(recordObj);
26
+ }
27
+ catch (err) {
28
+ throw err;
29
+ }
30
+ }
31
+ async createMany(createArr) {
32
+ try {
33
+ const queryResult = await this.dbModelInstance.insertMany(createArr);
34
+ if (queryResult) {
35
+ if (queryResult.length > 0) {
36
+ return {
37
+ records: queryResult,
38
+ counts: queryResult.length,
39
+ };
40
+ }
41
+ else {
42
+ throw new common_1.BadRequestException('Nothing created');
43
+ }
44
+ }
45
+ else {
46
+ throw new common_1.BadRequestException('Nothing created');
47
+ }
48
+ }
49
+ catch (err) {
50
+ throw err;
51
+ }
52
+ }
53
+ getProjectedCreatedItem(createdItem, recordObj) {
54
+ let pruningCreatedItem = this.projectionOnCreateResult
55
+ ? this.dbModelInstance.validateProjectionResult(createdItem)
56
+ : createdItem;
57
+ if (recordObj.necessaryProjectionArray &&
58
+ recordObj.necessaryProjectionArray.length) {
59
+ pruningCreatedItem = projection_1.projection(recordObj.necessaryProjectionArray, pruningCreatedItem);
60
+ }
61
+ return pruningCreatedItem;
62
+ }
63
+ async unlimitedRead(inputParams) {
64
+ try {
65
+ const queryOptions = this.getQueryOptions(inputParams);
66
+ queryOptions.limit = inputParams.limit ? queryOptions.limit : null;
67
+ return await this.readBase(queryOptions, inputParams);
68
+ }
69
+ catch (err) {
70
+ throw err;
71
+ }
72
+ }
73
+ async read(inputParams) {
74
+ try {
75
+ const queryOptions = this.getQueryOptions(inputParams);
76
+ return await this.readBase(queryOptions, inputParams);
77
+ }
78
+ catch (err) {
79
+ throw err;
80
+ }
81
+ }
82
+ async readBase(queryOptions, inputParams) {
83
+ const result = Object.assign(Object.assign({}, queryOptions), { hasTotal: false });
84
+ const finalQuery = inputParams.query
85
+ ? this.getFinalQuery(inputParams.query)
86
+ : {};
87
+ const validatedProjection = this.dbModelInstance.validateProjection(inputParams.necessaryProjectionArray);
88
+ if (inputParams.hasTotal) {
89
+ result.hasTotal = true;
90
+ result.total = await this.getTotalCount(finalQuery);
91
+ }
92
+ if (this.needToBePopulated(inputParams)) {
93
+ const findInput = { finalQuery, validatedProjection, queryOptions };
94
+ result.data = await this.getDataWithDynamicQuery(inputParams, findInput);
95
+ }
96
+ else {
97
+ result.data = await this.dbModelInstance.find(finalQuery, validatedProjection, queryOptions);
98
+ }
99
+ return result;
100
+ }
101
+ getQueryOptions(inputParams) {
102
+ const queryOptions = {};
103
+ if (inputParams.sort || inputParams.limit) {
104
+ try {
105
+ queryOptions.sort = JSON.parse(inputParams.sort);
106
+ }
107
+ catch (err) {
108
+ queryOptions.sort = inputParams.sort;
109
+ }
110
+ }
111
+ if (inputParams.limit) {
112
+ queryOptions.limit = Number(inputParams.limit);
113
+ }
114
+ else {
115
+ queryOptions.limit = 100;
116
+ }
117
+ if (inputParams.lean) {
118
+ queryOptions.lean = true;
119
+ }
120
+ if (inputParams.skip) {
121
+ queryOptions.skip = Number(inputParams.skip);
122
+ }
123
+ return queryOptions;
124
+ }
125
+ getFinalQuery(query) {
126
+ return query ? (typeof query === 'string' ? JSON.parse(query) : query) : {};
127
+ }
128
+ async getTotalCount(query) {
129
+ return await this.dbModelInstance.countDocuments(query);
130
+ }
131
+ needToBePopulated(inputParams) {
132
+ return !!(inputParams.needPopulate &&
133
+ Array.isArray(inputParams.populates) &&
134
+ inputParams.populates.length);
135
+ }
136
+ async getDataWithDynamicQuery(inputParams, findInput) {
137
+ inputParams.populates = this.parsePopulationArray(inputParams.populates);
138
+ let dynamicQuery = this.dbModelInstance.find(findInput.finalQuery, findInput.validatedProjection, findInput.queryOptions);
139
+ inputParams.populates.forEach(populateItem => {
140
+ dynamicQuery = dynamicQuery.populate(populateItem);
141
+ });
142
+ return await dynamicQuery;
143
+ }
144
+ parsePopulationArray(populates) {
145
+ return populates.map(item => {
146
+ try {
147
+ return JSON.parse(item);
148
+ }
149
+ catch (err) {
150
+ return item;
151
+ }
152
+ });
153
+ }
154
+ async findOne(query, projection, populates) {
155
+ try {
156
+ const finalQuery = this.getFinalQuery(query);
157
+ if (Array.isArray(populates) && populates.length) {
158
+ return await this.findOneWithDynamicQuery(query, projection, populates);
159
+ }
160
+ else {
161
+ console.log('FINAL QUERY------------', finalQuery);
162
+ return await this.dbModelInstance.findOne(finalQuery, projection);
163
+ }
164
+ }
165
+ catch (err) {
166
+ throw err;
167
+ }
168
+ }
169
+ async findOneWithDynamicQuery(query, projection, populates) {
170
+ let dynamicQuery = this.dbModelInstance.findOne(query, projection);
171
+ const finalPopulates = this.parsePopulationArray(populates);
172
+ finalPopulates.forEach(populateItem => {
173
+ dynamicQuery = dynamicQuery.populate(populateItem);
174
+ });
175
+ return await dynamicQuery;
176
+ }
177
+ async update(inputParams) {
178
+ try {
179
+ const validatedUpdateItem = await this.dbModelInstance.validateUpdateItem(inputParams.data);
180
+ const data = this.setDataToUpdate(inputParams, validatedUpdateItem);
181
+ return await this.dbModelInstance.updateMany(inputParams.query, data);
182
+ }
183
+ catch (err) {
184
+ throw err;
185
+ }
186
+ }
187
+ setDataToUpdate(inputParams, validatedUpdateItem) {
188
+ const data = { data: {}, query: {} };
189
+ if (inputParams.data['$unset']) {
190
+ data.$unset = inputParams.data['$unset'];
191
+ }
192
+ else {
193
+ data.$set = validatedUpdateItem;
194
+ }
195
+ if (inputParams.data['$push']) {
196
+ data.$push = inputParams.data['$push'];
197
+ }
198
+ if (inputParams.data['$pull']) {
199
+ data.$pull = inputParams.data['$pull'];
200
+ }
201
+ if (inputParams.data['$addToSet']) {
202
+ data.$addToSet = inputParams.data['$addToSet'];
203
+ }
204
+ return data;
205
+ }
206
+ async findOneAndUpdate(inputParams) {
207
+ const validatedUpdateItem = await this.dbModelInstance.validateUpdateItem(inputParams.data);
208
+ const data = this.setDataToUpdate(inputParams, validatedUpdateItem);
209
+ const updatedRecord = await this.dbModelInstance.findOneAndUpdate(inputParams.query, data, {
210
+ new: true,
211
+ lean: true,
212
+ });
213
+ if (!updatedRecord) {
214
+ throw new common_1.BadRequestException('Invlid record Id');
215
+ }
216
+ return updatedRecord;
217
+ }
218
+ async findOneAndUpdateRaw(inputParams) {
219
+ const data = this.setDataToUpdate(inputParams, inputParams.data);
220
+ return this.dbModelInstance.findOneAndUpdate(inputParams.query, data, {
221
+ new: true,
222
+ lean: true,
223
+ });
224
+ }
225
+ async deleteWithQuery(deleteQuery) {
226
+ try {
227
+ const deleteResult = await this.dbModelInstance.deleteMany(deleteQuery);
228
+ if (deleteResult.deletedCount > 0) {
229
+ return deleteResult.deletedCount;
230
+ }
231
+ throw new common_1.BadRequestException('Invalid query');
232
+ }
233
+ catch (err) {
234
+ throw err;
235
+ }
236
+ }
237
+ async deleteMany(idList) {
238
+ try {
239
+ const deleteQuery = { _id: idList };
240
+ const deleteResult = await this.dbModelInstance.deleteMany(deleteQuery);
241
+ if (deleteResult.deletedCount > 0) {
242
+ return deleteResult.deletedCount;
243
+ }
244
+ throw new common_1.BadRequestException('Invalid id list');
245
+ }
246
+ catch (err) {
247
+ throw err;
248
+ }
249
+ }
250
+ async deleteOne(id) {
251
+ try {
252
+ const deletedDocument = await this.dbModelInstance.findOneAndDelete({
253
+ _id: id,
254
+ });
255
+ if (!deletedDocument)
256
+ throw new common_1.BadRequestException('Invalid id');
257
+ return deletedDocument;
258
+ }
259
+ catch (err) {
260
+ throw err;
261
+ }
262
+ }
263
+ async count(query) {
264
+ return this.dbModelInstance.countDocuments(query);
265
+ }
266
+ async createNested(query, data, nestedField) {
267
+ try {
268
+ const createObj = {};
269
+ createObj[nestedField] = data;
270
+ const queryResult = await this.dbModelInstance.findOneAndUpdate(query, { $push: createObj }, {
271
+ runValidators: true,
272
+ new: true,
273
+ projection: ['_id', nestedField],
274
+ });
275
+ if (!queryResult) {
276
+ throw new common_1.BadRequestException('Invalid Request');
277
+ }
278
+ const createdItem = queryResult[nestedField].pop();
279
+ return createdItem;
280
+ }
281
+ catch (err) {
282
+ throw err;
283
+ }
284
+ }
285
+ async updateNested(inputParams, nestedField) {
286
+ try {
287
+ const updateItemEntries = Object.entries(inputParams.data);
288
+ const validatedNestedUpdateItemSetQuery = {};
289
+ for (const entry of updateItemEntries) {
290
+ validatedNestedUpdateItemSetQuery[`${nestedField}.$.${entry[0]}`] =
291
+ entry[1];
292
+ }
293
+ const queryResult = await this.dbModelInstance.findOneAndUpdate(inputParams.query, {
294
+ $set: validatedNestedUpdateItemSetQuery,
295
+ }, {
296
+ runValidators: true,
297
+ new: true,
298
+ projection: ['_id', nestedField],
299
+ });
300
+ if (!queryResult || !queryResult[nestedField].length) {
301
+ throw new common_1.BadRequestException('Invalid request');
302
+ }
303
+ const updatedItem = queryResult[nestedField].find(obj => obj._id.toString() === inputParams.query[`${nestedField}._id`]);
304
+ return updatedItem;
305
+ }
306
+ catch (err) {
307
+ throw err;
308
+ }
309
+ }
310
+ async deleteNested(query, nestedId, nestedField) {
311
+ try {
312
+ const queryResult = await this.dbModelInstance.findOneAndUpdate(Object.assign(Object.assign({}, query), { [`${nestedField}._id`]: nestedId }), { $pull: { [nestedField]: { _id: nestedId } } }, { projection: ['_id', nestedField] });
313
+ const createdItem = queryResult[nestedField].find(obj => obj._id.toString() === nestedId);
314
+ return createdItem;
315
+ }
316
+ catch (err) {
317
+ throw err;
318
+ }
319
+ }
320
+ }
321
+ exports.MongooseBase = MongooseBase;
322
322
  //# sourceMappingURL=MongooseBase.js.map