@mee4dy/crud-nestjs 1.0.7 → 1.0.9
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/crud.controller.d.ts +1 -1
- package/dist/crud.service.d.ts +6 -6
- package/dist/decorators/crud-params.decorator.js +3 -1
- package/dist/decorators/crud-params.decorator.js.map +1 -1
- package/dist/decorators/crud.decorator.js +1 -3
- package/dist/decorators/crud.decorator.js.map +1 -1
- package/dist/services/crud-params-adapter.service.d.ts +2 -0
- package/dist/services/crud-params-adapter.service.js +22 -4
- package/dist/services/crud-params-adapter.service.js.map +1 -1
- package/dist/types/crud-params.types.d.ts +1 -0
- package/package.json +1 -1
- package/readme.md +80 -2
package/dist/crud.service.d.ts
CHANGED
|
@@ -3,13 +3,13 @@ import { CrudParams } from './types/crud-params.types';
|
|
|
3
3
|
export declare class CrudService<T extends Model> {
|
|
4
4
|
constructor(model: ModelStatic<T>, pk?: string);
|
|
5
5
|
protected pk: string;
|
|
6
|
-
protected repository:
|
|
6
|
+
protected repository: ModelStatic<T>;
|
|
7
7
|
getPK(): string;
|
|
8
|
-
getRepository(params?: CrudParams):
|
|
8
|
+
getRepository(params?: CrudParams): ModelStatic<T>;
|
|
9
9
|
private paramsProcessor;
|
|
10
|
-
getItems(params: CrudParams):
|
|
11
|
-
getItem(params: CrudParams):
|
|
12
|
-
create(data: object):
|
|
10
|
+
getItems(params: CrudParams): Promise<T[]>;
|
|
11
|
+
getItem(params: CrudParams): Promise<T>;
|
|
12
|
+
create(data: object): Promise<T>;
|
|
13
13
|
update(params: CrudParams, data: object, returning?: boolean): Promise<any>;
|
|
14
|
-
delete(params: CrudParams):
|
|
14
|
+
delete(params: CrudParams): Promise<number>;
|
|
15
15
|
}
|
|
@@ -18,7 +18,9 @@ exports.CrudParamsDecorator = (0, common_1.createParamDecorator)((data, ctx) =>
|
|
|
18
18
|
const config = Reflect.getMetadata('crud:config', ctx.getClass());
|
|
19
19
|
const pk = config.pk;
|
|
20
20
|
const defaultParams = ((_b = config === null || config === void 0 ? void 0 : config.params) === null || _b === void 0 ? void 0 : _b.default) || {};
|
|
21
|
-
let params = {
|
|
21
|
+
let params = {
|
|
22
|
+
repository: config.repository,
|
|
23
|
+
};
|
|
22
24
|
if (pkValue !== undefined) {
|
|
23
25
|
params = (0, merge_util_1.merge)(params, {
|
|
24
26
|
filters: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud-params.decorator.js","sourceRoot":"","sources":["../../src/decorators/crud-params.decorator.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAwE;AAExE,+FAAyF;AACzF,oDAA4C;AAC5C,4CAAoB;AACpB,4BAA0B;AAC1B,8DAA8D;AAC9D,4CAAkC;AAGrB,QAAA,mBAAmB,GAAG,IAAA,6BAAoB,EACrD,CAAC,IAAgD,EAAE,GAAqB,EAAE,EAAE;;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,MAAM,0CAAG,cAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAErB,MAAM,aAAa,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAC;IACpD,IAAI,MAAM,GAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"crud-params.decorator.js","sourceRoot":"","sources":["../../src/decorators/crud-params.decorator.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAwE;AAExE,+FAAyF;AACzF,oDAA4C;AAC5C,4CAAoB;AACpB,4BAA0B;AAC1B,8DAA8D;AAC9D,4CAAkC;AAGrB,QAAA,mBAAmB,GAAG,IAAA,6BAAoB,EACrD,CAAC,IAAgD,EAAE,GAAqB,EAAE,EAAE;;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,MAAM,0CAAG,cAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAErB,MAAM,aAAa,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,OAAO,KAAI,EAAE,CAAC;IACpD,IAAI,MAAM,GAAe;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,IAAA,kBAAK,EAAC,MAAM,EAAE;YACrB,OAAO,EAAE;gBACP,CAAC,cAAE,CAAC,EAAE,OAAO;aACd;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,YAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,aAAa,KAAI,EAAE,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,4DAA2B,CAC/C,IAAA,oCAAkB,EAAC,KAAK,EAAE,EAAE,CAAC,EAC7B,IAAA,oCAAkB,EAAC,kBAAkB,EAAE,EAAE,CAAC,CAC3C,CAAC;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAExC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,EAAE,CAAC;IACpC,IAAI,YAAY,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;IAEzC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACtC,YAAY,GAAG,IAAA,kBAAK,EAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACtC,YAAY,GAAG,IAAA,kBAAK,EAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,IAAA,kBAAK,EACV;QACE,GAAG,IAAA,oCAAkB,EAAC,aAAa,EAAE,EAAE,CAAC;QACxC,GAAG,IAAA,kBAAK,EAAC,IAAA,oCAAkB,EAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAA,oCAAkB,EAAC,YAAY,EAAE,EAAE,CAAC,CAAC;KAC/E,EACD,IAAA,oCAAkB,EAAC,WAAW,EAAE,EAAE,CAAC,CACpC,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.decorator.js","sourceRoot":"","sources":["../../src/decorators/crud.decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,
|
|
1
|
+
{"version":3,"file":"crud.decorator.js","sourceRoot":"","sources":["../../src/decorators/crud.decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,oBAoCC;AAxCD,4BAA0B;AAC1B,4CAAkC;AAClC,0CAA4B;AAE5B,SAAgB,IAAI,CAAC,MAAkB;IACrC,OAAO,UAAU,MAAW;QAC1B,MAAM,aAAa,GAAmC;YACpD,EAAE,EAAE,IAAI;YACR,SAAS,EAAE;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;aACd;YACD,KAAK,EAAE;gBACL,aAAa,EAAE;oBACb,OAAO,EAAE,CAAC,cAAE,CAAC;oBACb,MAAM,EAAE,CAAC,cAAE,CAAC;oBACZ,MAAM,EAAE,CAAC,cAAE,CAAC;oBACZ,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,KAAK;iBACd;aACF;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,EAAE;aACZ;SACF,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;YACrF,MAAM,mBAAmB,GAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -4,9 +4,11 @@ export declare class CrudParamsAdapterService {
|
|
|
4
4
|
private params;
|
|
5
5
|
constructor(params: CrudParams);
|
|
6
6
|
adapt(): FindOptions;
|
|
7
|
+
private getRepository;
|
|
7
8
|
private getRepositoryParams;
|
|
8
9
|
private getInclude;
|
|
9
10
|
private getAttributes;
|
|
11
|
+
private getAllModelFields;
|
|
10
12
|
private getWhere;
|
|
11
13
|
private getGroup;
|
|
12
14
|
private getOrder;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CrudParamsAdapterService = void 0;
|
|
4
4
|
const sequelize_1 = require("sequelize");
|
|
5
|
+
const merge_util_1 = require("../utils/merge.util");
|
|
5
6
|
class CrudParamsAdapterService {
|
|
6
7
|
constructor(params) {
|
|
7
8
|
this.params = params;
|
|
@@ -24,10 +25,10 @@ class CrudParamsAdapterService {
|
|
|
24
25
|
limit,
|
|
25
26
|
offset,
|
|
26
27
|
};
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
return (0, merge_util_1.merge)(baseOptions, repositoryParams);
|
|
29
|
+
}
|
|
30
|
+
getRepository() {
|
|
31
|
+
return this.params.repository ? this.params.repository() : null;
|
|
31
32
|
}
|
|
32
33
|
getRepositoryParams() {
|
|
33
34
|
return this.params.repositoryParams || {};
|
|
@@ -57,8 +58,18 @@ class CrudParamsAdapterService {
|
|
|
57
58
|
}
|
|
58
59
|
getAttributes() {
|
|
59
60
|
const fields = this.params.fields;
|
|
61
|
+
const groups = this.params.groups;
|
|
60
62
|
const resultInclude = [];
|
|
61
63
|
const resultExclude = [];
|
|
64
|
+
if ((fields === null || fields === void 0 ? void 0 : fields.override) && fields.override.length) {
|
|
65
|
+
const overrideFields = fields.override.map(([literal, field]) => field);
|
|
66
|
+
resultExclude.push(...this.getAllModelFields().filter((field) => !overrideFields.includes(field)));
|
|
67
|
+
}
|
|
68
|
+
if (groups && groups.length && !(fields === null || fields === void 0 ? void 0 : fields.override)) {
|
|
69
|
+
const allFields = this.getAllModelFields();
|
|
70
|
+
const fieldsToExclude = allFields.filter((field) => !groups.includes(field));
|
|
71
|
+
resultExclude.push(...fieldsToExclude);
|
|
72
|
+
}
|
|
62
73
|
if ((fields === null || fields === void 0 ? void 0 : fields.include) && fields.include.length) {
|
|
63
74
|
for (const [fieldQuery, fieldKey] of fields.include) {
|
|
64
75
|
resultInclude.push([fieldQuery, fieldKey]);
|
|
@@ -74,6 +85,13 @@ class CrudParamsAdapterService {
|
|
|
74
85
|
exclude: resultExclude,
|
|
75
86
|
};
|
|
76
87
|
}
|
|
88
|
+
getAllModelFields() {
|
|
89
|
+
const repository = this.getRepository();
|
|
90
|
+
if (repository && repository.getAttributes) {
|
|
91
|
+
return Object.keys(repository.getAttributes());
|
|
92
|
+
}
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
77
95
|
getWhere() {
|
|
78
96
|
const result = {};
|
|
79
97
|
const filters = this.params.filters;
|
|
@@ -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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"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -147,6 +147,25 @@ const filters = {
|
|
|
147
147
|
GET /posts?filters[user_id]=1&filters[title][op]=like&filters[title][value]=test&filters[created_at][op]=range&filters[created_at][from]=2024-01-01&filters[created_at][to]=2024-12-31
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
+
**Пример объединения условий:**
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// CRUD фильтры + repositoryParams
|
|
154
|
+
const params: CrudParams = {
|
|
155
|
+
filters: { user_id: 1, status: 'active' },
|
|
156
|
+
repositoryParams: {
|
|
157
|
+
where: {
|
|
158
|
+
created_at: {
|
|
159
|
+
[Op.lte]: '2025-07-28 12:00:00',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Результат объединения:
|
|
166
|
+
// WHERE user_id = 1 AND status = 'active' AND created_at <= '2025-07-28 12:00:00'
|
|
167
|
+
```
|
|
168
|
+
|
|
150
169
|
### Сортировка (orders)
|
|
151
170
|
|
|
152
171
|
```typescript
|
|
@@ -190,9 +209,14 @@ GET /posts?limit=20&offset=40
|
|
|
190
209
|
type CrudFields = {
|
|
191
210
|
include?: [Literal, CrudField][]; // Дополнительные SQL выражения
|
|
192
211
|
exclude?: CrudField[]; // Исключаемые поля
|
|
212
|
+
override?: [Literal, CrudField][]; // Переопределение полей (для агрегации)
|
|
193
213
|
};
|
|
214
|
+
```
|
|
194
215
|
|
|
195
|
-
|
|
216
|
+
**Примеры использования:**
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Обычная выборка полей
|
|
196
220
|
const fields = {
|
|
197
221
|
include: [
|
|
198
222
|
[Sequelize.literal('CONCAT(name, " (", email, ")")'), 'full_info'],
|
|
@@ -200,6 +224,59 @@ const fields = {
|
|
|
200
224
|
],
|
|
201
225
|
exclude: ['password', 'deleted_at'],
|
|
202
226
|
};
|
|
227
|
+
|
|
228
|
+
// Переопределение полей для агрегации
|
|
229
|
+
const fields = {
|
|
230
|
+
override: [
|
|
231
|
+
[Sequelize.col('name'), 'name'],
|
|
232
|
+
[Sequelize.col('type'), 'type'],
|
|
233
|
+
],
|
|
234
|
+
include: [
|
|
235
|
+
[Sequelize.literal('COUNT(*)'), 'total_count'],
|
|
236
|
+
[Sequelize.literal('MAX(created_at)'), 'last_created'],
|
|
237
|
+
],
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// Автоматическое исключение при группировке
|
|
241
|
+
const params: CrudParams = {
|
|
242
|
+
groups: ['name', 'type'],
|
|
243
|
+
// Автоматически исключатся все поля кроме name и type
|
|
244
|
+
};
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Особенности работы с группировкой:**
|
|
248
|
+
|
|
249
|
+
1. **Автоматическое исключение** - при наличии `groups` автоматически исключаются все поля модели, которые не участвуют в группировке
|
|
250
|
+
2. **Переопределение полей** - поле `override` позволяет явно указать нужные поля, игнорируя автоматическое исключение
|
|
251
|
+
3. **Приоритет override** - если указано `override`, автоматическое исключение не применяется
|
|
252
|
+
|
|
253
|
+
**Примеры SQL запросов:**
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// С группировкой без override
|
|
257
|
+
const params: CrudParams = {
|
|
258
|
+
groups: ['name', 'type'],
|
|
259
|
+
fields: {
|
|
260
|
+
include: [[Sequelize.literal('COUNT(*)'), 'total']],
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
// SQL: SELECT name, type, COUNT(*) as total FROM table GROUP BY name, type
|
|
264
|
+
|
|
265
|
+
// С группировкой и override
|
|
266
|
+
const params: CrudParams = {
|
|
267
|
+
groups: ['name', 'type'],
|
|
268
|
+
fields: {
|
|
269
|
+
override: [
|
|
270
|
+
[Sequelize.col('name'), 'name'],
|
|
271
|
+
[Sequelize.col('type'), 'type'],
|
|
272
|
+
],
|
|
273
|
+
include: [
|
|
274
|
+
[Sequelize.literal('COUNT(*)'), 'total'],
|
|
275
|
+
[Sequelize.literal('MAX(date)'), 'last_date'],
|
|
276
|
+
],
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
// SQL: SELECT name, type, COUNT(*) as total, MAX(date) as last_date FROM table GROUP BY name, type
|
|
203
280
|
```
|
|
204
281
|
|
|
205
282
|
### Связи (join)
|
|
@@ -307,9 +384,10 @@ const params: CrudParams = {
|
|
|
307
384
|
},
|
|
308
385
|
},
|
|
309
386
|
};
|
|
387
|
+
// Результат: Объединяется с любыми существующими фильтрами и атрибутами
|
|
310
388
|
```
|
|
311
389
|
|
|
312
|
-
**Важно:** Параметры из `repositoryParams`
|
|
390
|
+
**Важно:** Параметры из `repositoryParams` объединяются с параметрами, сгенерированными из других полей `CrudParams`, используя глубокое слияние объектов. Это позволяет комбинировать CRUD фильтры с прямыми Sequelize условиями.
|
|
313
391
|
|
|
314
392
|
## Примеры контроллеров
|
|
315
393
|
|