@steroidsjs/nest 3.2.5 → 3.2.7

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.
Files changed (129) hide show
  1. package/infrastructure/applications/console/ConsoleApplication.d.ts +2 -1
  2. package/infrastructure/applications/console/ConsoleApplication.js.map +1 -1
  3. package/infrastructure/applications/rest/RestApplication.d.ts +6 -2
  4. package/infrastructure/applications/rest/RestApplication.js +3 -0
  5. package/infrastructure/applications/rest/RestApplication.js.map +1 -1
  6. package/infrastructure/decorators/ApiOkAutocompleteResponse.d.ts +6 -0
  7. package/infrastructure/decorators/ApiOkAutocompleteResponse.js +30 -0
  8. package/infrastructure/decorators/ApiOkAutocompleteResponse.js.map +1 -0
  9. package/infrastructure/decorators/fields/EnumField.js +19 -7
  10. package/infrastructure/decorators/fields/EnumField.js.map +1 -1
  11. package/infrastructure/decorators/fields/EnumField.test.js +31 -0
  12. package/infrastructure/decorators/fields/EnumField.test.js.map +1 -0
  13. package/infrastructure/decorators/fields/JSONBField.js +1 -0
  14. package/infrastructure/decorators/fields/JSONBField.js.map +1 -1
  15. package/package.json +3 -2
  16. package/tsconfig.tsbuildinfo +1 -1
  17. package/usecases/dtos/SearchInputDto.d.ts +2 -0
  18. package/usecases/dtos/SearchInputDto.js +19 -3
  19. package/usecases/dtos/SearchInputDto.js.map +1 -1
  20. package/usecases/services/ReadService.d.ts +13 -1
  21. package/usecases/services/ReadService.js +21 -1
  22. package/usecases/services/ReadService.js.map +1 -1
  23. package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.d.ts +10 -0
  24. package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.js +36 -0
  25. package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.js.map +1 -0
  26. package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.d.ts +4 -0
  27. package/{infrastructure/tests/app/schemas/FileSchema.js → usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.js} +13 -13
  28. package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.js.map +1 -0
  29. package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.d.ts +9 -0
  30. package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.js +56 -0
  31. package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.js.map +1 -0
  32. package/infrastructure/tests/ModelTest.test.js +0 -146
  33. package/infrastructure/tests/ModelTest.test.js.map +0 -1
  34. package/infrastructure/tests/app/models/ArticleModel.d.ts +0 -15
  35. package/infrastructure/tests/app/models/ArticleModel.js +0 -79
  36. package/infrastructure/tests/app/models/ArticleModel.js.map +0 -1
  37. package/infrastructure/tests/app/models/CommentModel.d.ts +0 -11
  38. package/infrastructure/tests/app/models/CommentModel.js +0 -58
  39. package/infrastructure/tests/app/models/CommentModel.js.map +0 -1
  40. package/infrastructure/tests/app/models/FileModel.d.ts +0 -7
  41. package/infrastructure/tests/app/models/FileModel.js +0 -41
  42. package/infrastructure/tests/app/models/FileModel.js.map +0 -1
  43. package/infrastructure/tests/app/models/ImageModel.d.ts +0 -8
  44. package/infrastructure/tests/app/models/ImageModel.js +0 -45
  45. package/infrastructure/tests/app/models/ImageModel.js.map +0 -1
  46. package/infrastructure/tests/app/models/TagModel.d.ts +0 -4
  47. package/infrastructure/tests/app/models/TagModel.js +0 -25
  48. package/infrastructure/tests/app/models/TagModel.js.map +0 -1
  49. package/infrastructure/tests/app/models/UserInfoModel.d.ts +0 -10
  50. package/infrastructure/tests/app/models/UserInfoModel.js +0 -56
  51. package/infrastructure/tests/app/models/UserInfoModel.js.map +0 -1
  52. package/infrastructure/tests/app/models/UserModel.d.ts +0 -12
  53. package/infrastructure/tests/app/models/UserModel.js +0 -71
  54. package/infrastructure/tests/app/models/UserModel.js.map +0 -1
  55. package/infrastructure/tests/app/repositories/ArticleRepository.d.ts +0 -9
  56. package/infrastructure/tests/app/repositories/ArticleRepository.js +0 -35
  57. package/infrastructure/tests/app/repositories/ArticleRepository.js.map +0 -1
  58. package/infrastructure/tests/app/repositories/CommentRepository.d.ts +0 -9
  59. package/infrastructure/tests/app/repositories/CommentRepository.js +0 -35
  60. package/infrastructure/tests/app/repositories/CommentRepository.js.map +0 -1
  61. package/infrastructure/tests/app/repositories/FileRepository.d.ts +0 -9
  62. package/infrastructure/tests/app/repositories/FileRepository.js +0 -35
  63. package/infrastructure/tests/app/repositories/FileRepository.js.map +0 -1
  64. package/infrastructure/tests/app/repositories/ImageRepository.d.ts +0 -9
  65. package/infrastructure/tests/app/repositories/ImageRepository.js +0 -35
  66. package/infrastructure/tests/app/repositories/ImageRepository.js.map +0 -1
  67. package/infrastructure/tests/app/repositories/TagRepository.d.ts +0 -9
  68. package/infrastructure/tests/app/repositories/TagRepository.js +0 -35
  69. package/infrastructure/tests/app/repositories/TagRepository.js.map +0 -1
  70. package/infrastructure/tests/app/repositories/UserRepository.d.ts +0 -9
  71. package/infrastructure/tests/app/repositories/UserRepository.js +0 -35
  72. package/infrastructure/tests/app/repositories/UserRepository.js.map +0 -1
  73. package/infrastructure/tests/app/schemas/ArticleSchema.d.ts +0 -11
  74. package/infrastructure/tests/app/schemas/ArticleSchema.js +0 -54
  75. package/infrastructure/tests/app/schemas/ArticleSchema.js.map +0 -1
  76. package/infrastructure/tests/app/schemas/FileSchema.d.ts +0 -4
  77. package/infrastructure/tests/app/schemas/FileSchema.js.map +0 -1
  78. package/infrastructure/tests/app/schemas/ImageSchema.d.ts +0 -5
  79. package/infrastructure/tests/app/schemas/ImageSchema.js +0 -30
  80. package/infrastructure/tests/app/schemas/ImageSchema.js.map +0 -1
  81. package/infrastructure/tests/app/schemas/UserInfoSchema.d.ts +0 -6
  82. package/infrastructure/tests/app/schemas/UserInfoSchema.js +0 -33
  83. package/infrastructure/tests/app/schemas/UserInfoSchema.js.map +0 -1
  84. package/infrastructure/tests/app/schemas/UserSchema.d.ts +0 -8
  85. package/infrastructure/tests/app/schemas/UserSchema.js +0 -40
  86. package/infrastructure/tests/app/schemas/UserSchema.js.map +0 -1
  87. package/infrastructure/tests/app/services/ArticleService.d.ts +0 -12
  88. package/infrastructure/tests/app/services/ArticleService.js +0 -31
  89. package/infrastructure/tests/app/services/ArticleService.js.map +0 -1
  90. package/infrastructure/tests/app/services/CommentService.d.ts +0 -12
  91. package/infrastructure/tests/app/services/CommentService.js +0 -31
  92. package/infrastructure/tests/app/services/CommentService.js.map +0 -1
  93. package/infrastructure/tests/app/services/FileService.d.ts +0 -12
  94. package/infrastructure/tests/app/services/FileService.js +0 -31
  95. package/infrastructure/tests/app/services/FileService.js.map +0 -1
  96. package/infrastructure/tests/app/services/ImageService.d.ts +0 -12
  97. package/infrastructure/tests/app/services/ImageService.js +0 -31
  98. package/infrastructure/tests/app/services/ImageService.js.map +0 -1
  99. package/infrastructure/tests/app/services/TagService.d.ts +0 -12
  100. package/infrastructure/tests/app/services/TagService.js +0 -31
  101. package/infrastructure/tests/app/services/TagService.js.map +0 -1
  102. package/infrastructure/tests/app/services/UserService.d.ts +0 -12
  103. package/infrastructure/tests/app/services/UserService.js +0 -31
  104. package/infrastructure/tests/app/services/UserService.js.map +0 -1
  105. package/infrastructure/tests/app/tables/ArticleTable.d.ts +0 -3
  106. package/infrastructure/tests/app/tables/ArticleTable.js +0 -18
  107. package/infrastructure/tests/app/tables/ArticleTable.js.map +0 -1
  108. package/infrastructure/tests/app/tables/CommentTable.d.ts +0 -3
  109. package/infrastructure/tests/app/tables/CommentTable.js +0 -18
  110. package/infrastructure/tests/app/tables/CommentTable.js.map +0 -1
  111. package/infrastructure/tests/app/tables/FileTable.d.ts +0 -3
  112. package/infrastructure/tests/app/tables/FileTable.js +0 -18
  113. package/infrastructure/tests/app/tables/FileTable.js.map +0 -1
  114. package/infrastructure/tests/app/tables/ImageTable.d.ts +0 -3
  115. package/infrastructure/tests/app/tables/ImageTable.js +0 -18
  116. package/infrastructure/tests/app/tables/ImageTable.js.map +0 -1
  117. package/infrastructure/tests/app/tables/TagTable.d.ts +0 -3
  118. package/infrastructure/tests/app/tables/TagTable.js +0 -18
  119. package/infrastructure/tests/app/tables/TagTable.js.map +0 -1
  120. package/infrastructure/tests/app/tables/UserInfoTable.d.ts +0 -3
  121. package/infrastructure/tests/app/tables/UserInfoTable.js +0 -18
  122. package/infrastructure/tests/app/tables/UserInfoTable.js.map +0 -1
  123. package/infrastructure/tests/app/tables/UserTable.d.ts +0 -3
  124. package/infrastructure/tests/app/tables/UserTable.js +0 -18
  125. package/infrastructure/tests/app/tables/UserTable.js.map +0 -1
  126. package/infrastructure/tests/bootstrap.d.ts +0 -1
  127. package/infrastructure/tests/bootstrap.js +0 -55
  128. package/infrastructure/tests/bootstrap.js.map +0 -1
  129. /package/infrastructure/{tests/ModelTest.test.d.ts → decorators/fields/EnumField.test.d.ts} +0 -0
@@ -2,9 +2,11 @@ export interface ISearchInputDto {
2
2
  page?: number;
3
3
  pageSize?: number;
4
4
  sort?: string | string[];
5
+ query?: string;
5
6
  }
6
7
  export declare class SearchInputDto {
7
8
  page?: number;
8
9
  pageSize?: number;
10
+ query?: string;
9
11
  sort?: string | string[];
10
12
  }
@@ -14,15 +14,31 @@ const fields_1 = require("../../infrastructure/decorators/fields");
14
14
  class SearchInputDto {
15
15
  }
16
16
  __decorate([
17
- (0, fields_1.IntegerField)({ nullable: true }),
17
+ (0, fields_1.IntegerField)({
18
+ label: 'Номер страницы',
19
+ nullable: true,
20
+ }),
18
21
  __metadata("design:type", Number)
19
22
  ], SearchInputDto.prototype, "page", void 0);
20
23
  __decorate([
21
- (0, fields_1.IntegerField)({ nullable: true }),
24
+ (0, fields_1.IntegerField)({
25
+ label: 'Размер страницы',
26
+ nullable: true,
27
+ }),
22
28
  __metadata("design:type", Number)
23
29
  ], SearchInputDto.prototype, "pageSize", void 0);
24
30
  __decorate([
25
- (0, fields_1.StringField)({ nullable: true }),
31
+ (0, fields_1.StringField)({
32
+ label: 'Поисковый запрос',
33
+ nullable: true,
34
+ }),
35
+ __metadata("design:type", String)
36
+ ], SearchInputDto.prototype, "query", void 0);
37
+ __decorate([
38
+ (0, fields_1.StringField)({
39
+ label: 'Поле или массив полей, по которым будет выполнена сортировка',
40
+ nullable: true,
41
+ }),
26
42
  __metadata("design:type", Object)
27
43
  ], SearchInputDto.prototype, "sort", void 0);
28
44
  exports.SearchInputDto = SearchInputDto;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInputDto.js","sourceRoot":"","sources":["../../../src/usecases/dtos/SearchInputDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAAiF;AAQjF,MAAa,cAAc;CAU1B;AARG;IAAC,IAAA,qBAAY,EAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;4CACjB;AAEd;IAAC,IAAA,qBAAY,EAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;gDACb;AAElB;IAAC,IAAA,oBAAW,EAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;4CACL;AAT7B,wCAUC"}
1
+ {"version":3,"file":"SearchInputDto.js","sourceRoot":"","sources":["../../../src/usecases/dtos/SearchInputDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAAiF;AASjF,MAAa,cAAc;CAwB1B;AAvBG;IAAC,IAAA,qBAAY,EAAC;QACV,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,IAAI;KACjB,CAAC;;4CACY;AAEd;IAAC,IAAA,qBAAY,EAAC;QACV,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,IAAI;KACjB,CAAC;;gDACgB;AAElB;IAAC,IAAA,oBAAW,EAAC;QACT,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE,IAAI;KACjB,CAAC;;6CACa;AAEf;IAAC,IAAA,oBAAW,EAAC;QACT,KAAK,EAAE,8DAA8D;QACrE,QAAQ,EAAE,IAAI;KACjB,CAAC;;4CACuB;AAvB7B,wCAwBC"}
@@ -8,7 +8,7 @@ import { IType } from '../interfaces/IType';
8
8
  /**
9
9
  * Generic Read service (search and find)
10
10
  */
11
- export declare class ReadService<TModel, TSearchDto = ISearchInputDto> {
11
+ export declare class ReadService<TModel, TSearchDto extends ISearchInputDto = ISearchInputDto> {
12
12
  /**
13
13
  * Model primary key
14
14
  */
@@ -35,6 +35,14 @@ export declare class ReadService<TModel, TSearchDto = ISearchInputDto> {
35
35
  init(repository: ICrudRepository<TModel>, ModelClass: IType<TModel>): void;
36
36
  search(dto: TSearchDto, context?: ContextDto | null): Promise<SearchResultDto<TModel>>;
37
37
  search<TSchema>(dto: TSearchDto, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<SearchResultDto<TSchema>>;
38
+ /**
39
+ * Для переопределения в проекте в рамках сервиса конкретной сущности, чтобы не переписывать search метод
40
+ * @param searchQuery
41
+ * @param dto
42
+ * @param context
43
+ * @protected
44
+ */
45
+ protected fillQueryFromSearchDto(searchQuery: SearchQuery<TModel>, dto: TSearchDto, context?: ContextDto): SearchQuery<TModel>;
38
46
  findById(id: number | string, context?: ContextDto | null): Promise<TModel>;
39
47
  findById<TSchema>(id: number | string, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<TSchema>;
40
48
  /**
@@ -79,4 +87,8 @@ export declare class ReadService<TModel, TSearchDto = ISearchInputDto> {
79
87
  * @protected
80
88
  */
81
89
  protected isModel(obj: unknown): obj is TModel;
90
+ /**
91
+ * Get entity primary key
92
+ */
93
+ getPrimaryKey(): string;
82
94
  }
@@ -34,12 +34,26 @@ class ReadService {
34
34
  await this.validate(dto, {
35
35
  context,
36
36
  });
37
- const result = await this.repository.search(dto, schemaClass ? SearchQuery_1.default.createFromSchema(schemaClass) : new SearchQuery_1.default());
37
+ const searchQuery = schemaClass
38
+ ? SearchQuery_1.default.createFromSchema(schemaClass)
39
+ : new SearchQuery_1.default();
40
+ this.fillQueryFromSearchDto(searchQuery, dto, context);
41
+ const result = await this.repository.search(dto, searchQuery);
38
42
  if (schemaClass) {
39
43
  result.items = result.items.map((model) => this.modelToSchema(model, schemaClass));
40
44
  }
41
45
  return result;
42
46
  }
47
+ /**
48
+ * Для переопределения в проекте в рамках сервиса конкретной сущности, чтобы не переписывать search метод
49
+ * @param searchQuery
50
+ * @param dto
51
+ * @param context
52
+ * @protected
53
+ */
54
+ fillQueryFromSearchDto(searchQuery, dto, context = null) {
55
+ return searchQuery;
56
+ }
43
57
  /**
44
58
  * Find model by id
45
59
  * @param id
@@ -108,6 +122,12 @@ class ReadService {
108
122
  isModel(obj) {
109
123
  return obj instanceof this.modelClass;
110
124
  }
125
+ /**
126
+ * Get entity primary key
127
+ */
128
+ getPrimaryKey() {
129
+ return this.primaryKey;
130
+ }
111
131
  }
112
132
  exports.ReadService = ReadService;
113
133
  //# sourceMappingURL=ReadService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReadService.js","sourceRoot":"","sources":["../../../src/usecases/services/ReadService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReadService.js","sourceRoot":"","sources":["../../../src/usecases/services/ReadService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AutocompleteBaseDto } from './dtos/AutocompleteBaseDto';
2
+ import { AutocompleteBaseItemSchema, AutocompleteBaseSchema } from './dtos/AutocompleteBaseSchema';
3
+ import { ContextDto } from '../../dtos/ContextDto';
4
+ import { ReadService } from '../../services/ReadService';
5
+ export declare abstract class AutoCompleteSearchUseCase<TModel> {
6
+ protected readonly entityService: ReadService<TModel>;
7
+ protected constructor(entityService: ReadService<TModel>);
8
+ handle<TSchema extends new (...args: any[]) => AutocompleteBaseItemSchema>(dto: AutocompleteBaseDto, context: ContextDto | null, schemaClass: TSchema): Promise<AutocompleteBaseSchema<InstanceType<TSchema>>>;
9
+ private getSelectedItems;
10
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoCompleteSearchUseCase = void 0;
4
+ const SearchQuery_1 = require("../../base/SearchQuery");
5
+ const DataMapper_1 = require("../../helpers/DataMapper");
6
+ const ValidationHelper_1 = require("../../helpers/ValidationHelper");
7
+ class AutoCompleteSearchUseCase {
8
+ constructor(entityService) {
9
+ this.entityService = entityService;
10
+ }
11
+ async handle(dto, context, schemaClass) {
12
+ await ValidationHelper_1.ValidationHelper.validate(dto, { context });
13
+ const [selectedItems, searchResult] = await Promise.all([
14
+ this.getSelectedItems(schemaClass, dto.withIds),
15
+ this.entityService.search(dto, context, schemaClass),
16
+ ]);
17
+ return {
18
+ selectedItems,
19
+ items: searchResult.items,
20
+ total: searchResult.total,
21
+ };
22
+ }
23
+ async getSelectedItems(schemaClass, selectedIds) {
24
+ if (!(selectedIds === null || selectedIds === void 0 ? void 0 : selectedIds.length)) {
25
+ return [];
26
+ }
27
+ const primaryKey = this.entityService.getPrimaryKey();
28
+ const searchQuery = SearchQuery_1.default.createFromSchema(schemaClass);
29
+ searchQuery.where(['in', primaryKey, selectedIds]);
30
+ const selectedModels = await this.entityService.findMany(searchQuery);
31
+ // TODO разобраться с типизацией, чтобы убрать явное приведение
32
+ return DataMapper_1.DataMapper.create(schemaClass, selectedModels);
33
+ }
34
+ }
35
+ exports.AutoCompleteSearchUseCase = AutoCompleteSearchUseCase;
36
+ //# sourceMappingURL=AutoCompleteSearchUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoCompleteSearchUseCase.js","sourceRoot":"","sources":["../../../../src/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.ts"],"names":[],"mappings":";;;AAEA,wDAAiD;AACjD,yDAAoD;AACpD,qEAAgE;AAIhE,MAAsB,yBAAyB;IAC3C,YACsB,aAAkC;QAAlC,kBAAa,GAAb,aAAa,CAAqB;IACtD,CAAC;IAEI,KAAK,CAAC,MAAM,CACf,GAAwB,EACxB,OAA0B,EAC1B,WAAoB;QAEpB,MAAM,mCAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;QAEhD,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC;SACvD,CAAC,CAAC;QAEH,OAAO;YACH,aAAa;YACb,KAAK,EAAE,YAAY,CAAC,KAAgC;YACpD,KAAK,EAAE,YAAY,CAAC,KAAK;SAC5B,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC1B,WAAoB,EACpB,WAAsB;QAEtB,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,EAAE;YACtB,OAAO,EAAE,CAAC;SACb;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAEtD,MAAM,WAAW,GAAG,qBAAW,CAAC,gBAAgB,CAAS,WAAW,CAAC,CAAC;QAEtE,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAEnD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEtE,+DAA+D;QAC/D,OAAO,uBAAU,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAA4B,CAAC;IACrF,CAAC;CACJ;AA3CD,8DA2CC"}
@@ -0,0 +1,4 @@
1
+ import { SearchInputDto } from '../../../dtos/SearchInputDto';
2
+ export declare class AutocompleteBaseDto extends SearchInputDto {
3
+ withIds?: number[];
4
+ }
@@ -9,18 +9,18 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.FileSchema = void 0;
13
- const ExtendField_1 = require("../../../decorators/fields/ExtendField");
14
- const FileModel_1 = require("../models/FileModel");
15
- class FileSchema {
12
+ exports.AutocompleteBaseDto = void 0;
13
+ const SearchInputDto_1 = require("../../../dtos/SearchInputDto");
14
+ const fields_1 = require("../../../../infrastructure/decorators/fields");
15
+ class AutocompleteBaseDto extends SearchInputDto_1.SearchInputDto {
16
16
  }
17
17
  __decorate([
18
- (0, ExtendField_1.ExtendField)(FileModel_1.FileModel),
19
- __metadata("design:type", Number)
20
- ], FileSchema.prototype, "id", void 0);
21
- __decorate([
22
- (0, ExtendField_1.ExtendField)(FileModel_1.FileModel),
23
- __metadata("design:type", String)
24
- ], FileSchema.prototype, "name", void 0);
25
- exports.FileSchema = FileSchema;
26
- //# sourceMappingURL=FileSchema.js.map
18
+ (0, fields_1.IntegerField)({
19
+ label: 'ID выбранных значений. Возвращаются в поле selectedItems',
20
+ nullable: true,
21
+ isArray: true,
22
+ }),
23
+ __metadata("design:type", Array)
24
+ ], AutocompleteBaseDto.prototype, "withIds", void 0);
25
+ exports.AutocompleteBaseDto = AutocompleteBaseDto;
26
+ //# sourceMappingURL=AutocompleteBaseDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteBaseDto.js","sourceRoot":"","sources":["../../../../../src/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iEAA4D;AAC5D,yEAA0E;AAE1E,MAAa,mBAAoB,SAAQ,+BAAc;CAOtD;AANG;IAAC,IAAA,qBAAY,EAAC;QACV,KAAK,EAAE,0DAA0D;QACjE,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;KAChB,CAAC;;oDACiB;AANvB,kDAOC"}
@@ -0,0 +1,9 @@
1
+ export declare class AutocompleteBaseItemSchema {
2
+ id: number;
3
+ label: string;
4
+ }
5
+ export declare class AutocompleteBaseSchema<ItemSchema = AutocompleteBaseItemSchema> {
6
+ items: ItemSchema[];
7
+ selectedItems: ItemSchema[];
8
+ total: number;
9
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AutocompleteBaseSchema = exports.AutocompleteBaseItemSchema = void 0;
13
+ const fields_1 = require("../../../../infrastructure/decorators/fields");
14
+ class AutocompleteBaseItemSchema {
15
+ }
16
+ __decorate([
17
+ (0, fields_1.IntegerField)({
18
+ label: 'Ключ значения',
19
+ }),
20
+ __metadata("design:type", Number)
21
+ ], AutocompleteBaseItemSchema.prototype, "id", void 0);
22
+ __decorate([
23
+ (0, fields_1.StringField)({
24
+ label: 'Название элемента',
25
+ }),
26
+ __metadata("design:type", String)
27
+ ], AutocompleteBaseItemSchema.prototype, "label", void 0);
28
+ exports.AutocompleteBaseItemSchema = AutocompleteBaseItemSchema;
29
+ class AutocompleteBaseSchema {
30
+ }
31
+ __decorate([
32
+ (0, fields_1.RelationField)({
33
+ label: 'Результат поиска',
34
+ type: 'ManyToMany',
35
+ isOwningSide: true,
36
+ relationClass: () => AutocompleteBaseItemSchema,
37
+ }),
38
+ __metadata("design:type", Array)
39
+ ], AutocompleteBaseSchema.prototype, "items", void 0);
40
+ __decorate([
41
+ (0, fields_1.RelationField)({
42
+ label: 'Выбранные значения',
43
+ type: 'ManyToMany',
44
+ isOwningSide: true,
45
+ relationClass: () => AutocompleteBaseItemSchema,
46
+ }),
47
+ __metadata("design:type", Array)
48
+ ], AutocompleteBaseSchema.prototype, "selectedItems", void 0);
49
+ __decorate([
50
+ (0, fields_1.IntegerField)({
51
+ label: 'Количество найденных элементов',
52
+ }),
53
+ __metadata("design:type", Number)
54
+ ], AutocompleteBaseSchema.prototype, "total", void 0);
55
+ exports.AutocompleteBaseSchema = AutocompleteBaseSchema;
56
+ //# sourceMappingURL=AutocompleteBaseSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutocompleteBaseSchema.js","sourceRoot":"","sources":["../../../../../src/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yEAAsG;AAEtG,MAAa,0BAA0B;CAUtC;AATG;IAAC,IAAA,qBAAY,EAAC;QACV,KAAK,EAAE,eAAe;KACzB,CAAC;;sDACQ;AAEV;IAAC,IAAA,oBAAW,EAAC;QACT,KAAK,EAAE,mBAAmB;KAC7B,CAAC;;yDACY;AATlB,gEAUC;AAED,MAAa,sBAAsB;CAqBlC;AApBG;IAAC,IAAA,sBAAa,EAAC;QACX,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,CAAC,0BAA0B;KAClD,CAAC;;qDACkB;AAEpB;IAAC,IAAA,sBAAa,EAAC;QACX,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,CAAC,0BAA0B;KAClD,CAAC;;6DAC0B;AAE5B;IAAC,IAAA,qBAAY,EAAC;QACV,KAAK,EAAE,gCAAgC;KAC1C,CAAC;;qDACW;AApBjB,wDAqBC"}
@@ -1,146 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const globals_1 = require("@jest/globals");
4
- const bootstrap_1 = require("./bootstrap");
5
- const UserService_1 = require("./app/services/UserService");
6
- const DataMapper_1 = require("../../usecases/helpers/DataMapper");
7
- const UserModel_1 = require("./app/models/UserModel");
8
- const FileService_1 = require("./app/services/FileService");
9
- const FileModel_1 = require("./app/models/FileModel");
10
- const SearchQuery_1 = require("../../usecases/base/SearchQuery");
11
- const UserInfoModel_1 = require("./app/models/UserInfoModel");
12
- const ImageService_1 = require("./app/services/ImageService");
13
- const ImageModel_1 = require("./app/models/ImageModel");
14
- const ArticleService_1 = require("./app/services/ArticleService");
15
- const ArticleModel_1 = require("./app/models/ArticleModel");
16
- const TagModel_1 = require("./app/models/TagModel");
17
- const ArticleSchema_1 = require("./app/schemas/ArticleSchema");
18
- const createPhoto = (app) => {
19
- return app.get(FileService_1.FileService).create(DataMapper_1.DataMapper.create(FileModel_1.FileModel, {
20
- name: 'file ' + Date.now(),
21
- images: [
22
- {
23
- size: 'thumbnail',
24
- url: 'https://test.com/image-thumbnail.png',
25
- },
26
- {
27
- size: 'full',
28
- url: 'https://test.com/image-full.png',
29
- },
30
- ],
31
- }));
32
- };
33
- (0, globals_1.describe)('ModelTest', () => {
34
- let app;
35
- (0, globals_1.beforeAll)(async () => {
36
- app = await (0, bootstrap_1.bootstrap)();
37
- });
38
- /**
39
- * Want test relations saves:
40
- * - OneToMany::ids v
41
- */
42
- (0, globals_1.it)('OneToMany ids', async () => {
43
- var _a, _b;
44
- // Create file and image models with OneToMany::ids relations
45
- const additionalImage1 = await app.get(ImageService_1.ImageService).create(DataMapper_1.DataMapper.create(ImageModel_1.ImageModel, {
46
- size: 'thumbnail',
47
- url: 'https://test.com/image-thumbnail.png',
48
- }));
49
- expect(additionalImage1 === null || additionalImage1 === void 0 ? void 0 : additionalImage1.id).toBeGreaterThan(0);
50
- let additionalPhoto = await app.get(FileService_1.FileService).create(DataMapper_1.DataMapper.create(FileModel_1.FileModel, {
51
- name: 'file ' + Date.now(),
52
- imagesIds: [additionalImage1.id]
53
- }));
54
- expect(additionalPhoto === null || additionalPhoto === void 0 ? void 0 : additionalPhoto.id).toBeGreaterThan(0);
55
- expect((_a = additionalPhoto === null || additionalPhoto === void 0 ? void 0 : additionalPhoto.imagesIds) === null || _a === void 0 ? void 0 : _a.length).toEqual(1);
56
- additionalPhoto = await app
57
- .get(FileService_1.FileService)
58
- .findOne(new SearchQuery_1.default()
59
- .with(['imagesIds'])
60
- .where({ id: additionalPhoto.id }));
61
- expect(additionalPhoto === null || additionalPhoto === void 0 ? void 0 : additionalPhoto.id).toBeGreaterThan(0);
62
- expect((_b = additionalPhoto === null || additionalPhoto === void 0 ? void 0 : additionalPhoto.imagesIds) === null || _b === void 0 ? void 0 : _b.length).toEqual(1);
63
- });
64
- /**
65
- * Want test relations saves:
66
- * - ManyToMany::data v
67
- */
68
- (0, globals_1.it)('ManyToMany data', async () => {
69
- var _a, _b;
70
- const passportScan = await createPhoto(app);
71
- let user = await app.get(UserService_1.UserService).create(DataMapper_1.DataMapper.create(UserModel_1.UserModel, {
72
- name: 'Test user ' + Date.now(),
73
- info: DataMapper_1.DataMapper.create(UserInfoModel_1.UserInfoModel, {
74
- passport: '0409 123456',
75
- passportScanId: passportScan.id,
76
- }),
77
- }));
78
- // Create file and image models with OneToMany::ids relations
79
- let article = await app.get(ArticleService_1.ArticleService).create(DataMapper_1.DataMapper.create(ArticleModel_1.ArticleModel, {
80
- title: 'How to load relations in entities',
81
- creatorUserId: user.id,
82
- tags: [
83
- DataMapper_1.DataMapper.create(TagModel_1.TagModel, { title: 'Tag 1' }),
84
- DataMapper_1.DataMapper.create(TagModel_1.TagModel, { title: 'Tag 2' }),
85
- ],
86
- }));
87
- expect(article === null || article === void 0 ? void 0 : article.id).toBeGreaterThan(0);
88
- expect((_a = article === null || article === void 0 ? void 0 : article.tags) === null || _a === void 0 ? void 0 : _a.length).toEqual(2);
89
- article = await app.get(ArticleService_1.ArticleService).findById(article.id, null, ArticleSchema_1.ArticleSchema);
90
- expect(article === null || article === void 0 ? void 0 : article.id).toBeGreaterThan(0);
91
- expect((_b = article === null || article === void 0 ? void 0 : article.tags) === null || _b === void 0 ? void 0 : _b.length).toEqual(2);
92
- // Check transform and computable decorators
93
- expect(article === null || article === void 0 ? void 0 : article.title).toEqual('HOW TO LOAD RELATIONS IN ENTITIES');
94
- expect(article === null || article === void 0 ? void 0 : article.shortTitle).toEqual('How t');
95
- });
96
- /**
97
- * Want test relations saves:
98
- * - ManyToOne::ids v
99
- * - ManyToMany::ids v
100
- * - OneToOne::data v
101
- * - OneToMany::data v
102
- */
103
- (0, globals_1.it)('Complex test', async () => {
104
- var _a, _b;
105
- // Create main photo: test OneToMany::data
106
- const mainPhoto = await createPhoto(app);
107
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.id).toBeGreaterThan(0);
108
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.images.length).toEqual(2);
109
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.images[0].id).toBeGreaterThan(0);
110
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.images[0].size).toEqual('thumbnail');
111
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.images[1].id).toBeGreaterThan(0);
112
- expect(mainPhoto === null || mainPhoto === void 0 ? void 0 : mainPhoto.images[1].size).toEqual('full');
113
- // Create photos for gallery
114
- const photos = [];
115
- for (let i = 0; i < 3; i++) {
116
- photos.push(await createPhoto(app));
117
- }
118
- // Create user: test ManyToOne::ids, ManyToMany::ids, OneToOne::data
119
- let user = await app.get(UserService_1.UserService).create(DataMapper_1.DataMapper.create(UserModel_1.UserModel, {
120
- name: 'Test user ' + Date.now(),
121
- info: DataMapper_1.DataMapper.create(UserInfoModel_1.UserInfoModel, {
122
- passport: '0409 123456',
123
- }),
124
- mainPhotoId: mainPhoto.id,
125
- galleryPhotosIds: photos.map(photo => photo.id),
126
- }));
127
- expect(user === null || user === void 0 ? void 0 : user.id).toBeGreaterThan(0);
128
- expect(user === null || user === void 0 ? void 0 : user.mainPhotoId).toEqual(mainPhoto.id);
129
- expect(user === null || user === void 0 ? void 0 : user.galleryPhotosIds.length).toEqual(photos.length);
130
- // Get user from database with relations
131
- user = await app
132
- .get(UserService_1.UserService)
133
- .findOne(new SearchQuery_1.default()
134
- .with(['mainPhotoId', 'galleryPhotosIds', 'info'])
135
- .where({ id: user.id }));
136
- expect(user === null || user === void 0 ? void 0 : user.id).toBeGreaterThan(0);
137
- expect(user === null || user === void 0 ? void 0 : user.mainPhotoId).toEqual(mainPhoto.id);
138
- expect((_a = user === null || user === void 0 ? void 0 : user.info) === null || _a === void 0 ? void 0 : _a.passport).toEqual('0409 123456');
139
- expect((_b = user === null || user === void 0 ? void 0 : user.galleryPhotosIds) === null || _b === void 0 ? void 0 : _b.length).toEqual(photos.length);
140
- // console.log('TEST RESULT', user);
141
- });
142
- (0, globals_1.afterAll)(async () => {
143
- await app.close();
144
- });
145
- });
146
- //# sourceMappingURL=ModelTest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelTest.test.js","sourceRoot":"","sources":["../../../src/infrastructure/tests/ModelTest.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { UserModel } from './UserModel';
2
- import { TagModel } from './TagModel';
3
- import { CommentModel } from './CommentModel';
4
- export declare class ArticleModel {
5
- id: number;
6
- title: string;
7
- text: string;
8
- createTime: Date;
9
- updateTime: Date;
10
- tagIds: number[];
11
- tags: TagModel[];
12
- creatorUserId: number;
13
- creatorUser: UserModel;
14
- comments: CommentModel[];
15
- }
@@ -1,79 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ArticleModel = void 0;
13
- const fields_1 = require("../../../decorators/fields");
14
- const UserModel_1 = require("./UserModel");
15
- const TagModel_1 = require("./TagModel");
16
- const CommentModel_1 = require("./CommentModel");
17
- class ArticleModel {
18
- }
19
- __decorate([
20
- (0, fields_1.PrimaryKeyField)(),
21
- __metadata("design:type", Number)
22
- ], ArticleModel.prototype, "id", void 0);
23
- __decorate([
24
- (0, fields_1.StringField)(),
25
- __metadata("design:type", String)
26
- ], ArticleModel.prototype, "title", void 0);
27
- __decorate([
28
- (0, fields_1.StringField)({
29
- nullable: true,
30
- }),
31
- __metadata("design:type", String)
32
- ], ArticleModel.prototype, "text", void 0);
33
- __decorate([
34
- (0, fields_1.CreateTimeField)(),
35
- __metadata("design:type", Date)
36
- ], ArticleModel.prototype, "createTime", void 0);
37
- __decorate([
38
- (0, fields_1.UpdateTimeField)(),
39
- __metadata("design:type", Date)
40
- ], ArticleModel.prototype, "updateTime", void 0);
41
- __decorate([
42
- (0, fields_1.RelationIdField)({
43
- relationName: 'tags',
44
- isArray: true,
45
- }),
46
- __metadata("design:type", Array)
47
- ], ArticleModel.prototype, "tagIds", void 0);
48
- __decorate([
49
- (0, fields_1.RelationField)({
50
- type: 'ManyToMany',
51
- isOwningSide: true,
52
- relationClass: () => TagModel_1.TagModel,
53
- }),
54
- __metadata("design:type", Array)
55
- ], ArticleModel.prototype, "tags", void 0);
56
- __decorate([
57
- (0, fields_1.RelationIdField)({
58
- relationName: 'creatorUser',
59
- }),
60
- __metadata("design:type", Number)
61
- ], ArticleModel.prototype, "creatorUserId", void 0);
62
- __decorate([
63
- (0, fields_1.RelationField)({
64
- type: 'ManyToOne',
65
- relationClass: () => UserModel_1.UserModel,
66
- nullable: true,
67
- }),
68
- __metadata("design:type", UserModel_1.UserModel)
69
- ], ArticleModel.prototype, "creatorUser", void 0);
70
- __decorate([
71
- (0, fields_1.RelationField)({
72
- type: 'OneToMany',
73
- inverseSide: comment => comment.article,
74
- relationClass: () => CommentModel_1.CommentModel,
75
- }),
76
- __metadata("design:type", Array)
77
- ], ArticleModel.prototype, "comments", void 0);
78
- exports.ArticleModel = ArticleModel;
79
- //# sourceMappingURL=ArticleModel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArticleModel.js","sourceRoot":"","sources":["../../../../../src/infrastructure/tests/app/models/ArticleModel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAMuD;AACvD,2CAAsC;AACtC,yCAAoC;AACpC,iDAA4C;AAE5C,MAAa,YAAY;CAiDxB;AAhDG;IAAC,IAAA,wBAAe,GAAE;;wCACP;AAEX;IAAC,IAAA,oBAAW,GAAE;;2CACA;AAEd;IAAC,IAAA,oBAAW,EAAC;QACT,QAAQ,EAAE,IAAI;KACjB,CAAC;;0CACW;AAEb;IAAC,IAAA,wBAAe,GAAE;8BACN,IAAI;gDAAC;AAEjB;IAAC,IAAA,wBAAe,GAAE;8BACN,IAAI;gDAAC;AAEjB;IAAC,IAAA,wBAAe,EAAC;QACb,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,IAAI;KAChB,CAAC;;4CACe;AAEjB;IAAC,IAAA,sBAAa,EAAC;QACX,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAQ;KAChC,CAAC;;0CACe;AAEjB;IAAC,IAAA,wBAAe,EAAC;QACb,YAAY,EAAE,aAAa;KAC9B,CAAC;;mDACoB;AAEtB;IAAC,IAAA,sBAAa,EAAC;QACX,IAAI,EAAE,WAAW;QACjB,aAAa,EAAE,GAAG,EAAE,CAAC,qBAAS;QAC9B,QAAQ,EAAE,IAAI;KACjB,CAAC;8BACW,qBAAS;iDAAC;AAEvB;IAAC,IAAA,sBAAa,EAAC;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO;QACvC,aAAa,EAAE,GAAG,EAAE,CAAC,2BAAY;KACpC,CAAC;;8CACuB;AAhD7B,oCAiDC"}
@@ -1,11 +0,0 @@
1
- import { ArticleModel } from './ArticleModel';
2
- import { UserModel } from './UserModel';
3
- export declare class CommentModel {
4
- id: number;
5
- message: string;
6
- articleId: number;
7
- userId: number;
8
- createTime: Date;
9
- article: ArticleModel;
10
- user: UserModel;
11
- }