@mee4dy/crud-nestjs 1.0.10 → 1.0.11
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.
|
@@ -40,8 +40,8 @@ class CrudParamsAdapterService {
|
|
|
40
40
|
const includeObj = {
|
|
41
41
|
model: joinItem.repository(),
|
|
42
42
|
};
|
|
43
|
-
if (joinItem.
|
|
44
|
-
includeObj.attributes = joinItem.
|
|
43
|
+
if (typeof joinItem.fields !== 'undefined') {
|
|
44
|
+
includeObj.attributes = joinItem.fields === false ? [] : this.getAttributes(joinItem.fields);
|
|
45
45
|
}
|
|
46
46
|
if (joinItem.join) {
|
|
47
47
|
if (Array.isArray(joinItem.join)) {
|
|
@@ -56,45 +56,47 @@ class CrudParamsAdapterService {
|
|
|
56
56
|
}
|
|
57
57
|
return result;
|
|
58
58
|
}
|
|
59
|
-
getAttributes() {
|
|
60
|
-
var _a, _b, _c;
|
|
61
|
-
const fields = this.params.fields;
|
|
59
|
+
getAttributes(fields = this.params.fields || {}) {
|
|
62
60
|
const groups = this.params.groups;
|
|
61
|
+
const fieldsExclude = fields.exclude || [];
|
|
62
|
+
const fieldsInclude = fields.include || [];
|
|
63
|
+
const fieldsAggregate = fields.aggregate || [];
|
|
63
64
|
const resultInclude = [];
|
|
64
65
|
const resultExclude = [];
|
|
65
|
-
if (
|
|
66
|
-
for (const [
|
|
67
|
-
resultInclude.push([literal, fieldKey]);
|
|
68
|
-
}
|
|
69
|
-
const overrideFields = fields.override.map(([literal, field]) => field);
|
|
70
|
-
resultExclude.push(...this.getAllModelFields().filter((field) => !overrideFields.includes(field)));
|
|
71
|
-
}
|
|
72
|
-
if (groups === null || groups === void 0 ? void 0 : groups.length) {
|
|
73
|
-
const allFields = this.getAllModelFields();
|
|
74
|
-
const fieldsToExclude = allFields.filter((field) => !groups.includes(field));
|
|
75
|
-
resultExclude.push(...fieldsToExclude);
|
|
76
|
-
}
|
|
77
|
-
if ((_b = fields === null || fields === void 0 ? void 0 : fields.include) === null || _b === void 0 ? void 0 : _b.length) {
|
|
78
|
-
for (const [fieldQuery, fieldKey] of fields.include) {
|
|
66
|
+
if (fieldsInclude.length) {
|
|
67
|
+
for (const [fieldQuery, fieldKey] of fieldsInclude) {
|
|
79
68
|
resultInclude.push([fieldQuery, fieldKey]);
|
|
80
69
|
}
|
|
81
70
|
}
|
|
82
|
-
if (
|
|
83
|
-
for (const fieldKey of
|
|
71
|
+
if (fieldsExclude.length) {
|
|
72
|
+
for (const fieldKey of fieldsExclude) {
|
|
84
73
|
resultExclude.push(fieldKey);
|
|
85
74
|
}
|
|
86
75
|
}
|
|
76
|
+
if (fieldsAggregate.length) {
|
|
77
|
+
const repositoryFields = this.getRepositoryFields();
|
|
78
|
+
const fieldsToExclude = repositoryFields.filter((field) => !fieldsAggregate.map(([_, fieldKey]) => fieldKey).includes(field));
|
|
79
|
+
resultExclude.push(...fieldsToExclude);
|
|
80
|
+
for (const [literal, fieldKey] of fieldsAggregate) {
|
|
81
|
+
if (groups === null || groups === void 0 ? void 0 : groups.length) {
|
|
82
|
+
if (groups.includes(fieldKey)) {
|
|
83
|
+
resultInclude.push([literal, fieldKey]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
resultInclude.push([literal, fieldKey]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const resultIncludeFiltered = resultInclude.filter(([_, fieldKey]) => !fieldsExclude.includes(fieldKey));
|
|
87
92
|
return {
|
|
88
|
-
include:
|
|
93
|
+
include: resultIncludeFiltered,
|
|
89
94
|
exclude: resultExclude,
|
|
90
95
|
};
|
|
91
96
|
}
|
|
92
|
-
|
|
97
|
+
getRepositoryFields() {
|
|
93
98
|
const repository = this.getRepository();
|
|
94
|
-
|
|
95
|
-
return Object.keys(repository.getAttributes());
|
|
96
|
-
}
|
|
97
|
-
return [];
|
|
99
|
+
return Object.keys((repository === null || repository === void 0 ? void 0 : repository.getAttributes()) || {});
|
|
98
100
|
}
|
|
99
101
|
getWhere() {
|
|
100
102
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud-params-adapter.service.js","sourceRoot":"","sources":["../../src/services/crud-params-adapter.service.ts"],"names":[],"mappings":";;;AAAA,yCAA0D;
|
|
1
|
+
{"version":3,"file":"crud-params-adapter.service.js","sourceRoot":"","sources":["../../src/services/crud-params-adapter.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,11 +24,11 @@ export type CrudParamsFilter = {
|
|
|
24
24
|
export type CrudFields = {
|
|
25
25
|
include?: [Literal, CrudField][];
|
|
26
26
|
exclude?: CrudField[];
|
|
27
|
-
|
|
27
|
+
aggregate?: [Literal, CrudField][];
|
|
28
28
|
};
|
|
29
29
|
export type CrudJoin = {
|
|
30
30
|
repository: () => any;
|
|
31
|
-
|
|
31
|
+
fields?: CrudFields | false;
|
|
32
32
|
join?: CrudJoin[];
|
|
33
33
|
};
|
|
34
34
|
export type CrudParams = {
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -209,7 +209,7 @@ GET /posts?limit=20&offset=40
|
|
|
209
209
|
type CrudFields = {
|
|
210
210
|
include?: [Literal, CrudField][]; // Дополнительные SQL выражения
|
|
211
211
|
exclude?: CrudField[]; // Исключаемые поля
|
|
212
|
-
|
|
212
|
+
aggregate?: [Literal, CrudField][]; // Агрегационные поля (для группировки)
|
|
213
213
|
};
|
|
214
214
|
```
|
|
215
215
|
|
|
@@ -225,9 +225,9 @@ const fields = {
|
|
|
225
225
|
exclude: ['password', 'deleted_at'],
|
|
226
226
|
};
|
|
227
227
|
|
|
228
|
-
//
|
|
228
|
+
// Агрегационные поля для группировки
|
|
229
229
|
const fields = {
|
|
230
|
-
|
|
230
|
+
aggregate: [
|
|
231
231
|
[Sequelize.col('name'), 'name'],
|
|
232
232
|
[Sequelize.col('type'), 'type'],
|
|
233
233
|
],
|
|
@@ -247,8 +247,8 @@ const params: CrudParams = {
|
|
|
247
247
|
**Особенности работы с группировкой:**
|
|
248
248
|
|
|
249
249
|
1. **Автоматическое исключение** - при наличии `groups` автоматически исключаются все поля модели, которые не участвуют в группировке
|
|
250
|
-
2.
|
|
251
|
-
3. **Приоритет
|
|
250
|
+
2. **Агрегационные поля** - поле `aggregate` позволяет явно указать поля для группировки, игнорируя автоматическое исключение
|
|
251
|
+
3. **Приоритет aggregate** - если указано `aggregate`, автоматическое исключение не применяется
|
|
252
252
|
|
|
253
253
|
**Примеры SQL запросов:**
|
|
254
254
|
|
|
@@ -262,11 +262,11 @@ const params: CrudParams = {
|
|
|
262
262
|
};
|
|
263
263
|
// SQL: SELECT name, type, COUNT(*) as total FROM table GROUP BY name, type
|
|
264
264
|
|
|
265
|
-
// С группировкой и
|
|
265
|
+
// С группировкой и aggregate
|
|
266
266
|
const params: CrudParams = {
|
|
267
267
|
groups: ['name', 'type'],
|
|
268
268
|
fields: {
|
|
269
|
-
|
|
269
|
+
aggregate: [
|
|
270
270
|
[Sequelize.col('name'), 'name'],
|
|
271
271
|
[Sequelize.col('type'), 'type'],
|
|
272
272
|
],
|
|
@@ -284,36 +284,50 @@ const params: CrudParams = {
|
|
|
284
284
|
```typescript
|
|
285
285
|
type CrudJoin = {
|
|
286
286
|
repository: () => any; // Функция, возвращающая модель Sequelize
|
|
287
|
-
|
|
287
|
+
fields?: CrudFields; // Настройка полей для связанной модели
|
|
288
288
|
join?: CrudJoin[]; // Вложенные join для связанной модели
|
|
289
289
|
};
|
|
290
290
|
```
|
|
291
291
|
|
|
292
292
|
**Примеры join связей:**
|
|
293
293
|
|
|
294
|
+
**Особенности настройки полей в join:**
|
|
295
|
+
|
|
296
|
+
1. **`fields: CrudFields`** - настройка полей для связанной модели
|
|
297
|
+
2. **`fields: false`** - отключить все поля из join (только для фильтрации)
|
|
298
|
+
3. **`fields: undefined`** - использовать все поля по умолчанию
|
|
299
|
+
|
|
294
300
|
```typescript
|
|
295
301
|
// Простой join с пользователем
|
|
296
302
|
const join = [
|
|
297
303
|
{
|
|
298
304
|
repository: () => User,
|
|
299
|
-
|
|
305
|
+
fields: {
|
|
300
306
|
include: [[Sequelize.literal('CONCAT(name, " (", email, ")")'), 'full_info']],
|
|
301
307
|
exclude: ['password', 'deleted_at'],
|
|
302
308
|
},
|
|
303
309
|
},
|
|
304
310
|
];
|
|
305
311
|
|
|
312
|
+
// Join без полей (только для фильтрации)
|
|
313
|
+
const join = [
|
|
314
|
+
{
|
|
315
|
+
repository: () => User,
|
|
316
|
+
fields: false, // Отключить все поля из join
|
|
317
|
+
},
|
|
318
|
+
];
|
|
319
|
+
|
|
306
320
|
// Вложенный join: посты с комментариями и пользователями комментариев
|
|
307
321
|
const join = [
|
|
308
322
|
{
|
|
309
323
|
repository: () => Comment,
|
|
310
|
-
|
|
324
|
+
fields: {
|
|
311
325
|
include: [[Sequelize.literal('CONCAT("[", id, "] ", text)'), 'formatted_text']],
|
|
312
326
|
},
|
|
313
327
|
join: [
|
|
314
328
|
{
|
|
315
329
|
repository: () => User,
|
|
316
|
-
|
|
330
|
+
fields: {
|
|
317
331
|
exclude: ['password', 'deleted_at'],
|
|
318
332
|
},
|
|
319
333
|
},
|
|
@@ -325,17 +339,32 @@ const join = [
|
|
|
325
339
|
const join = [
|
|
326
340
|
{
|
|
327
341
|
repository: () => User,
|
|
328
|
-
|
|
342
|
+
fields: {
|
|
329
343
|
exclude: ['password'],
|
|
330
344
|
},
|
|
331
345
|
},
|
|
332
346
|
{
|
|
333
347
|
repository: () => Category,
|
|
334
|
-
|
|
348
|
+
fields: {
|
|
335
349
|
include: [[Sequelize.literal('UPPER(name)'), 'upper_name']],
|
|
336
350
|
},
|
|
337
351
|
},
|
|
338
352
|
];
|
|
353
|
+
|
|
354
|
+
// Join только для фильтрации (без полей в результате)
|
|
355
|
+
const join = [
|
|
356
|
+
{
|
|
357
|
+
repository: () => User,
|
|
358
|
+
fields: false, // Не включать поля пользователя в результат
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
repository: () => Category,
|
|
362
|
+
fields: {
|
|
363
|
+
include: [[Sequelize.literal('UPPER(name)'), 'category_name']],
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
];
|
|
367
|
+
// Результат: только поля поста + category_name, без полей пользователя
|
|
339
368
|
```
|
|
340
369
|
|
|
341
370
|
### Прямые параметры Sequelize (repositoryParams)
|
|
@@ -466,7 +495,7 @@ export class CommentsController {}
|
|
|
466
495
|
join: [
|
|
467
496
|
{
|
|
468
497
|
repository: () => Users,
|
|
469
|
-
|
|
498
|
+
fields: {
|
|
470
499
|
exclude: ['password', 'deleted_at'],
|
|
471
500
|
},
|
|
472
501
|
},
|
|
@@ -479,13 +508,13 @@ export class CommentsController {}
|
|
|
479
508
|
join: [
|
|
480
509
|
{
|
|
481
510
|
repository: () => Comments,
|
|
482
|
-
|
|
511
|
+
fields: {
|
|
483
512
|
include: [[Sequelize.literal('CONCAT("[", id, "] ", text)'), 'formatted_text']],
|
|
484
513
|
},
|
|
485
514
|
join: [
|
|
486
515
|
{
|
|
487
516
|
repository: () => Users,
|
|
488
|
-
|
|
517
|
+
fields: {
|
|
489
518
|
exclude: ['password'],
|
|
490
519
|
},
|
|
491
520
|
},
|