@mee4dy/crud-nestjs 1.0.8 → 1.0.10
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 +27 -3
- 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 +64 -8
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;
|
|
@@ -27,6 +27,9 @@ class CrudParamsAdapterService {
|
|
|
27
27
|
};
|
|
28
28
|
return (0, merge_util_1.merge)(baseOptions, repositoryParams);
|
|
29
29
|
}
|
|
30
|
+
getRepository() {
|
|
31
|
+
return this.params.repository ? this.params.repository() : null;
|
|
32
|
+
}
|
|
30
33
|
getRepositoryParams() {
|
|
31
34
|
return this.params.repositoryParams || {};
|
|
32
35
|
}
|
|
@@ -54,24 +57,45 @@ class CrudParamsAdapterService {
|
|
|
54
57
|
return result;
|
|
55
58
|
}
|
|
56
59
|
getAttributes() {
|
|
60
|
+
var _a, _b, _c;
|
|
57
61
|
const fields = this.params.fields;
|
|
62
|
+
const groups = this.params.groups;
|
|
58
63
|
const resultInclude = [];
|
|
59
64
|
const resultExclude = [];
|
|
60
|
-
if ((fields === null || fields === void 0 ? void 0 : fields.
|
|
65
|
+
if ((_a = fields === null || fields === void 0 ? void 0 : fields.override) === null || _a === void 0 ? void 0 : _a.length) {
|
|
66
|
+
for (const [literal, fieldKey] of fields.override) {
|
|
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) {
|
|
61
78
|
for (const [fieldQuery, fieldKey] of fields.include) {
|
|
62
79
|
resultInclude.push([fieldQuery, fieldKey]);
|
|
63
80
|
}
|
|
64
81
|
}
|
|
65
|
-
if ((fields === null || fields === void 0 ? void 0 : fields.exclude)
|
|
82
|
+
if ((_c = fields === null || fields === void 0 ? void 0 : fields.exclude) === null || _c === void 0 ? void 0 : _c.length) {
|
|
66
83
|
for (const fieldKey of fields.exclude) {
|
|
67
84
|
resultExclude.push(fieldKey);
|
|
68
85
|
}
|
|
69
86
|
}
|
|
70
87
|
return {
|
|
71
|
-
include: resultInclude,
|
|
88
|
+
include: resultInclude.filter(([literal, fieldKey]) => !resultExclude.includes(fieldKey)),
|
|
72
89
|
exclude: resultExclude,
|
|
73
90
|
};
|
|
74
91
|
}
|
|
92
|
+
getAllModelFields() {
|
|
93
|
+
const repository = this.getRepository();
|
|
94
|
+
if (repository && repository.getAttributes) {
|
|
95
|
+
return Object.keys(repository.getAttributes());
|
|
96
|
+
}
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
75
99
|
getWhere() {
|
|
76
100
|
const result = {};
|
|
77
101
|
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;AAY1D,oDAA4C;
|
|
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
|
@@ -156,17 +156,15 @@ const params: CrudParams = {
|
|
|
156
156
|
repositoryParams: {
|
|
157
157
|
where: {
|
|
158
158
|
created_at: {
|
|
159
|
-
[Op.lte]: '2025-07-28 12:00:00'
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
159
|
+
[Op.lte]: '2025-07-28 12:00:00',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
// Результат объединения:
|
|
166
166
|
// WHERE user_id = 1 AND status = 'active' AND created_at <= '2025-07-28 12:00:00'
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
````
|
|
167
|
+
```
|
|
170
168
|
|
|
171
169
|
### Сортировка (orders)
|
|
172
170
|
|
|
@@ -211,9 +209,14 @@ GET /posts?limit=20&offset=40
|
|
|
211
209
|
type CrudFields = {
|
|
212
210
|
include?: [Literal, CrudField][]; // Дополнительные SQL выражения
|
|
213
211
|
exclude?: CrudField[]; // Исключаемые поля
|
|
212
|
+
override?: [Literal, CrudField][]; // Переопределение полей (для агрегации)
|
|
214
213
|
};
|
|
214
|
+
```
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
**Примеры использования:**
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Обычная выборка полей
|
|
217
220
|
const fields = {
|
|
218
221
|
include: [
|
|
219
222
|
[Sequelize.literal('CONCAT(name, " (", email, ")")'), 'full_info'],
|
|
@@ -221,6 +224,59 @@ const fields = {
|
|
|
221
224
|
],
|
|
222
225
|
exclude: ['password', 'deleted_at'],
|
|
223
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
|
|
224
280
|
```
|
|
225
281
|
|
|
226
282
|
### Связи (join)
|