@mee4dy/crud-nestjs 1.0.5 → 1.0.6

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.
@@ -13,7 +13,7 @@ export declare class CrudController<T extends Model> {
13
13
  item(params: CrudParams): Promise<{
14
14
  status: boolean;
15
15
  data: {
16
- item: T;
16
+ item: any;
17
17
  };
18
18
  }>;
19
19
  create(data: object): Promise<CrudResponse>;
@@ -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: ModelStatic<T>;
6
+ protected repository: any;
7
7
  getPK(): string;
8
- getRepository(): ModelStatic<T>;
8
+ getRepository(params?: CrudParams): any;
9
9
  private paramsProcessor;
10
- getItems(params: CrudParams): Promise<T[]>;
11
- getItem(params: CrudParams): Promise<T>;
12
- create(data: object): Promise<T>;
10
+ getItems(params: CrudParams): any;
11
+ getItem(params: CrudParams): any;
12
+ create(data: object): any;
13
13
  update(params: CrudParams, data: object, returning?: boolean): Promise<any>;
14
- delete(params: CrudParams): Promise<number>;
14
+ delete(params: CrudParams): any;
15
15
  }
@@ -11,8 +11,8 @@ class CrudService {
11
11
  getPK() {
12
12
  return this.pk;
13
13
  }
14
- getRepository() {
15
- return this.repository;
14
+ getRepository(params) {
15
+ return (params === null || params === void 0 ? void 0 : params.repository) ? params.repository() : this.repository;
16
16
  }
17
17
  paramsProcessor(params) {
18
18
  const processedParams = (0, replace_pk_util_1.replacePkRecursive)(params, this.pk);
@@ -20,11 +20,13 @@ class CrudService {
20
20
  }
21
21
  getItems(params) {
22
22
  const processedParams = this.paramsProcessor(params);
23
- return this.repository.findAll(processedParams);
23
+ const repository = this.getRepository(params);
24
+ return repository.findAll(processedParams);
24
25
  }
25
26
  getItem(params) {
26
27
  const processedParams = this.paramsProcessor(params);
27
- return this.repository.findOne(processedParams);
28
+ const repository = this.getRepository(params);
29
+ return repository.findOne(processedParams);
28
30
  }
29
31
  create(data) {
30
32
  return this.repository.create(data, {
@@ -33,7 +35,8 @@ class CrudService {
33
35
  }
34
36
  async update(params, data, returning = true) {
35
37
  const processedParams = this.paramsProcessor(params);
36
- return this.repository
38
+ const repository = this.getRepository(params);
39
+ return repository
37
40
  .update(data, {
38
41
  where: processedParams.where,
39
42
  })
@@ -46,7 +49,8 @@ class CrudService {
46
49
  }
47
50
  delete(params) {
48
51
  const processedParams = this.paramsProcessor(params);
49
- return this.repository.destroy({
52
+ const repository = this.getRepository(params);
53
+ return repository.destroy({
50
54
  where: processedParams.where,
51
55
  });
52
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../src/crud.service.ts"],"names":[],"mappings":";;;AAEA,wFAAkF;AAClF,6DAA6D;AAE7D,MAAa,WAAW;IACtB,YAAY,KAAqB,EAAE,KAAa,IAAI;QAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAKM,KAAK;QACV,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,MAAkB;QACxC,MAAM,eAAe,GAAG,IAAA,oCAAkB,EAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,sDAAwB,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IAEM,QAAQ,CAAC,MAAkB;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAEM,OAAO,CAAC,MAAkB;QAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAW,EAAE;YACzC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAkB,EAAE,IAAY,EAAE,YAAqB,IAAI;QAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU;aACnB,MAAM,CAAC,IAAI,EAAE;YACZ,KAAK,EAAE,eAAe,CAAC,KAAK;SAC7B,CAAC;aACD,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE;YACpB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,MAAkB;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,eAAe,CAAC,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;CACF;AA1DD,kCA0DC"}
1
+ {"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../src/crud.service.ts"],"names":[],"mappings":";;;AAEA,wFAAkF;AAClF,6DAA6D;AAE7D,MAAa,WAAW;IACtB,YAAY,KAAqB,EAAE,KAAa,IAAI;QAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAKM,KAAK;QACV,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAEM,aAAa,CAAC,MAAmB;QACtC,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACpE,CAAC;IAEO,eAAe,CAAC,MAAkB;QACxC,MAAM,eAAe,GAAG,IAAA,oCAAkB,EAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,sDAAwB,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IAEM,QAAQ,CAAC,MAAkB;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC;IAEM,OAAO,CAAC,MAAkB;QAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAW,EAAE;YACzC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAkB,EAAE,IAAY,EAAE,YAAqB,IAAI;QAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU;aACd,MAAM,CAAC,IAAI,EAAE;YACZ,KAAK,EAAE,eAAe,CAAC,KAAK;SAC7B,CAAC;aACD,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE;YACpB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,MAAkB;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC;YACxB,KAAK,EAAE,eAAe,CAAC,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;CACF;AA9DD,kCA8DC"}
@@ -39,4 +39,5 @@ export type CrudParams = {
39
39
  limit?: CrudLimit;
40
40
  offset?: CrudOffset;
41
41
  repositoryParams?: Partial<FindOptions>;
42
+ repository?: () => any;
42
43
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mee4dy/crud-nestjs",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "scripts": {
package/readme.md CHANGED
@@ -112,6 +112,7 @@ interface CrudParams {
112
112
  limit?: number; // Лимит записей
113
113
  offset?: number; // Смещение для пагинации
114
114
  repositoryParams?: Partial<FindOptions>; // Прямые параметры Sequelize
115
+ repository?: () => any; // Динамическая смена репозитория со scopes
115
116
  }
116
117
  ```
117
118
 
@@ -388,14 +389,11 @@ export class CommentsController {}
388
389
  {
389
390
  repository: () => Users,
390
391
  attributes: {
391
- exclude: [
392
- 'password',
393
- 'deleted_at'
394
- ]
395
- }
396
- }
397
- ]
398
- }
392
+ exclude: ['password', 'deleted_at'],
393
+ },
394
+ },
395
+ ],
396
+ },
399
397
  },
400
398
  scopes: {
401
399
  item: (req) => ({
@@ -404,30 +402,60 @@ export class CommentsController {}
404
402
  {
405
403
  repository: () => Comments,
406
404
  attributes: {
407
- include: [
408
- [
409
- Sequelize.literal('CONCAT("[", id, "] ", text)'),
410
- 'formatted_text'
411
- ]
412
- ]
405
+ include: [[Sequelize.literal('CONCAT("[", id, "] ", text)'), 'formatted_text']],
413
406
  },
414
407
  join: [
415
408
  {
416
409
  repository: () => Users,
417
410
  attributes: {
418
- exclude: [
419
- 'password'
420
- ]
421
- }
422
- }
423
- ]
424
- }
425
- ]
426
- }
427
- })
428
- }
411
+ exclude: ['password'],
412
+ },
413
+ },
414
+ ],
415
+ },
416
+ ],
417
+ },
418
+ }),
419
+ },
420
+ })
421
+ @Controller('posts')
422
+ export class PostsController {}
423
+ ```
424
+
425
+ ### Контроллер с Sequelize scopes
426
+
427
+ ```typescript
428
+ @Crud({
429
+ repository: () => Posts.scope('active'),
430
+ })
431
+ @Controller('posts')
432
+ export class PostsController {}
433
+
434
+ // Несколько scopes
435
+ @Crud({
436
+ repository: () => Posts.scope(['active', 'withUser', 'withComments']),
437
+ })
438
+ @Controller('posts')
439
+ export class PostsController {}
440
+
441
+ // Динамические scopes через params
442
+ @Crud({
443
+ repository: () => Posts.scope('active'),
444
+ scopes: {
445
+ items: (req) => ({
446
+ params: {
447
+ repository: () => Posts.scope(['published', 'withComments']),
448
+ },
449
+ }),
450
+ item: (req) => ({
451
+ params: {
452
+ repository: () => Posts.scope(['withUser', 'withComments', 'withLikes']),
453
+ },
454
+ }),
455
+ },
429
456
  })
430
457
  @Controller('posts')
458
+ export class PostsController {}
431
459
  ```
432
460
 
433
461
  ## Формат ответа