c2-mongoose 2.1.37 → 2.1.38
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.
package/dist/flow/CrudFlow.d.ts
CHANGED
|
@@ -16,5 +16,6 @@ declare class CrudFlow<D> {
|
|
|
16
16
|
get(id: string, pop?: string, sel?: string, session?: ClientSession): Promise<D>;
|
|
17
17
|
getById(id: string, session?: ClientSession): Promise<Partial<D>>;
|
|
18
18
|
sumBy(fieldToSum: any, fieldToGroup: any, addToSet?: any): Promise<any>;
|
|
19
|
+
sumByAndPaging(fieldToSum: any, fieldToGroup: any, addToSet?: any): Promise<SearchResponse<any>>;
|
|
19
20
|
}
|
|
20
21
|
export default CrudFlow;
|
package/dist/flow/CrudFlow.js
CHANGED
|
@@ -179,6 +179,16 @@ var CrudFlow = /** @class */ (function () {
|
|
|
179
179
|
});
|
|
180
180
|
});
|
|
181
181
|
};
|
|
182
|
+
CrudFlow.prototype.sumByAndPaging = function (fieldToSum, fieldToGroup, addToSet) {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
184
|
+
return __generator(this, function (_a) {
|
|
185
|
+
switch (_a.label) {
|
|
186
|
+
case 0: return [4 /*yield*/, this.search.sumByPaging(this.repository, fieldToSum, fieldToGroup, addToSet)];
|
|
187
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
};
|
|
182
192
|
return CrudFlow;
|
|
183
193
|
}());
|
|
184
194
|
exports.default = CrudFlow;
|
|
@@ -22,6 +22,7 @@ declare abstract class SearchFlow {
|
|
|
22
22
|
count(model: mongoose.Model<any>): Promise<number>;
|
|
23
23
|
findOne(repository: mongoose.Model<any>, model: any, params?: any): Promise<any>;
|
|
24
24
|
sumBy(model: mongoose.Model<any>, _sum: any, _by: any, items?: any, session?: ClientSession): Promise<any[]>;
|
|
25
|
+
sumByPaging(model: mongoose.Model<any>, fieldToSum: any, fieldToGroup: any, items?: any): Promise<SearchResponse<any>>;
|
|
25
26
|
buildDefaultFilters(objectSearch: any): any;
|
|
26
27
|
addFilterModel(model: any, filters: any): void;
|
|
27
28
|
}
|
package/dist/flow/SearchFlow.js
CHANGED
|
@@ -232,9 +232,7 @@ var SearchFlow = /** @class */ (function () {
|
|
|
232
232
|
},
|
|
233
233
|
{
|
|
234
234
|
$sort: sort
|
|
235
|
-
}
|
|
236
|
-
{ $skip: (this.page - 1) * this.limit },
|
|
237
|
-
{ $limit: this.limit }
|
|
235
|
+
}
|
|
238
236
|
]).session(session)];
|
|
239
237
|
case 1:
|
|
240
238
|
ret = _a.sent();
|
|
@@ -243,6 +241,55 @@ var SearchFlow = /** @class */ (function () {
|
|
|
243
241
|
});
|
|
244
242
|
});
|
|
245
243
|
};
|
|
244
|
+
SearchFlow.prototype.sumByPaging = function (model, fieldToSum, fieldToGroup, items) {
|
|
245
|
+
if (items === void 0) { items = undefined; }
|
|
246
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
247
|
+
var sort, result;
|
|
248
|
+
return __generator(this, function (_a) {
|
|
249
|
+
switch (_a.label) {
|
|
250
|
+
case 0:
|
|
251
|
+
sort = this.buildOrdenation();
|
|
252
|
+
return [4 /*yield*/, model.aggregate([
|
|
253
|
+
{
|
|
254
|
+
$facet: {
|
|
255
|
+
items: [
|
|
256
|
+
{ $match: this.filters },
|
|
257
|
+
{
|
|
258
|
+
$group: {
|
|
259
|
+
_id: fieldToGroup,
|
|
260
|
+
totalValue: { "$sum": fieldToSum },
|
|
261
|
+
count: { "$sum": 1 },
|
|
262
|
+
items: items
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
{ $sort: sort },
|
|
266
|
+
{ $skip: (this.page - 1) * this.limit },
|
|
267
|
+
{ $limit: this.limit }
|
|
268
|
+
],
|
|
269
|
+
paging: [
|
|
270
|
+
{ $match: this.filters },
|
|
271
|
+
{ $group: { _id: fieldToGroup, count: { $sum: 1 } } },
|
|
272
|
+
{ $count: "total" },
|
|
273
|
+
{
|
|
274
|
+
$addFields: {
|
|
275
|
+
page: this.page,
|
|
276
|
+
limit: this.limit
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
]
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
])];
|
|
283
|
+
case 1:
|
|
284
|
+
result = _a.sent();
|
|
285
|
+
return [2 /*return*/, {
|
|
286
|
+
items: result[0].items,
|
|
287
|
+
paging: result[0].paging[0]
|
|
288
|
+
}];
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
};
|
|
246
293
|
SearchFlow.prototype.buildDefaultFilters = function (objectSearch) {
|
|
247
294
|
var filters = { $and: [] };
|
|
248
295
|
Object.entries(objectSearch.model).forEach(function (_a) {
|
package/package.json
CHANGED
package/src/flow/CrudFlow.ts
CHANGED
|
@@ -68,6 +68,10 @@ class CrudFlow<D> {
|
|
|
68
68
|
public async sumBy(fieldToSum: any, fieldToGroup: any, addToSet?: any): Promise<any> {
|
|
69
69
|
return await this.search.sumBy(this.repository, fieldToSum, fieldToGroup, addToSet)
|
|
70
70
|
}
|
|
71
|
+
|
|
72
|
+
public async sumByAndPaging(fieldToSum: any, fieldToGroup: any, addToSet?: any): Promise<SearchResponse<any>> {
|
|
73
|
+
return await this.search.sumByPaging(this.repository, fieldToSum, fieldToGroup, addToSet)
|
|
74
|
+
}
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
export default CrudFlow
|
package/src/flow/SearchFlow.ts
CHANGED
|
@@ -151,14 +151,55 @@ abstract class SearchFlow {
|
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
$sort: sort
|
|
154
|
-
}
|
|
155
|
-
{ $skip: (this.page - 1) * this.limit },
|
|
156
|
-
{ $limit: this.limit }
|
|
154
|
+
}
|
|
157
155
|
]
|
|
158
156
|
).session(session!)
|
|
159
157
|
return ret
|
|
160
158
|
}
|
|
161
159
|
|
|
160
|
+
async sumByPaging(model: mongoose.Model<any>, fieldToSum: any, fieldToGroup: any, items: any = undefined): Promise<SearchResponse<any>> {
|
|
161
|
+
const sort = this.buildOrdenation()
|
|
162
|
+
const result = await model.aggregate(
|
|
163
|
+
[
|
|
164
|
+
{
|
|
165
|
+
$facet: {
|
|
166
|
+
items: [
|
|
167
|
+
{ $match: this.filters },
|
|
168
|
+
{
|
|
169
|
+
$group: {
|
|
170
|
+
_id: fieldToGroup,
|
|
171
|
+
totalValue: { "$sum": fieldToSum },
|
|
172
|
+
count: { "$sum": 1 },
|
|
173
|
+
items: items
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
{ $sort: sort },
|
|
177
|
+
{ $skip: (this.page - 1) * this.limit },
|
|
178
|
+
{ $limit: this.limit }
|
|
179
|
+
],
|
|
180
|
+
paging: [
|
|
181
|
+
{ $match: this.filters },
|
|
182
|
+
{ $group: { _id: fieldToGroup, count: { $sum: 1 } } },
|
|
183
|
+
{ $count: "total" },
|
|
184
|
+
{
|
|
185
|
+
$addFields:
|
|
186
|
+
{
|
|
187
|
+
page: this.page,
|
|
188
|
+
limit: this.limit
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
items: result[0].items,
|
|
199
|
+
paging: result[0].paging[0]
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
162
203
|
public buildDefaultFilters(objectSearch: any) {
|
|
163
204
|
let filters = { $and: [] } as any
|
|
164
205
|
Object.entries(objectSearch.model).forEach(([key, value]) => {
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
declare interface SearchResponse<T> {
|
|
2
2
|
paging?: Pagination,
|
|
3
3
|
items?: T[]
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
declare interface Pagination {
|
|
7
7
|
total?: number,
|
|
8
8
|
page?: number,
|
|
9
9
|
limit?: number
|
|
10
|
-
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { SearchResponse, Pagination }
|