@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.
- package/infrastructure/applications/console/ConsoleApplication.d.ts +2 -1
- package/infrastructure/applications/console/ConsoleApplication.js.map +1 -1
- package/infrastructure/applications/rest/RestApplication.d.ts +6 -2
- package/infrastructure/applications/rest/RestApplication.js +3 -0
- package/infrastructure/applications/rest/RestApplication.js.map +1 -1
- package/infrastructure/decorators/ApiOkAutocompleteResponse.d.ts +6 -0
- package/infrastructure/decorators/ApiOkAutocompleteResponse.js +30 -0
- package/infrastructure/decorators/ApiOkAutocompleteResponse.js.map +1 -0
- package/infrastructure/decorators/fields/EnumField.js +19 -7
- package/infrastructure/decorators/fields/EnumField.js.map +1 -1
- package/infrastructure/decorators/fields/EnumField.test.js +31 -0
- package/infrastructure/decorators/fields/EnumField.test.js.map +1 -0
- package/infrastructure/decorators/fields/JSONBField.js +1 -0
- package/infrastructure/decorators/fields/JSONBField.js.map +1 -1
- package/package.json +3 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/usecases/dtos/SearchInputDto.d.ts +2 -0
- package/usecases/dtos/SearchInputDto.js +19 -3
- package/usecases/dtos/SearchInputDto.js.map +1 -1
- package/usecases/services/ReadService.d.ts +13 -1
- package/usecases/services/ReadService.js +21 -1
- package/usecases/services/ReadService.js.map +1 -1
- package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.d.ts +10 -0
- package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.js +36 -0
- package/usecases/useCases/AutocompleteSearch/AutoCompleteSearchUseCase.js.map +1 -0
- package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.d.ts +4 -0
- package/{infrastructure/tests/app/schemas/FileSchema.js → usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.js} +13 -13
- package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseDto.js.map +1 -0
- package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.d.ts +9 -0
- package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.js +56 -0
- package/usecases/useCases/AutocompleteSearch/dtos/AutocompleteBaseSchema.js.map +1 -0
- package/infrastructure/tests/ModelTest.test.js +0 -146
- package/infrastructure/tests/ModelTest.test.js.map +0 -1
- package/infrastructure/tests/app/models/ArticleModel.d.ts +0 -15
- package/infrastructure/tests/app/models/ArticleModel.js +0 -79
- package/infrastructure/tests/app/models/ArticleModel.js.map +0 -1
- package/infrastructure/tests/app/models/CommentModel.d.ts +0 -11
- package/infrastructure/tests/app/models/CommentModel.js +0 -58
- package/infrastructure/tests/app/models/CommentModel.js.map +0 -1
- package/infrastructure/tests/app/models/FileModel.d.ts +0 -7
- package/infrastructure/tests/app/models/FileModel.js +0 -41
- package/infrastructure/tests/app/models/FileModel.js.map +0 -1
- package/infrastructure/tests/app/models/ImageModel.d.ts +0 -8
- package/infrastructure/tests/app/models/ImageModel.js +0 -45
- package/infrastructure/tests/app/models/ImageModel.js.map +0 -1
- package/infrastructure/tests/app/models/TagModel.d.ts +0 -4
- package/infrastructure/tests/app/models/TagModel.js +0 -25
- package/infrastructure/tests/app/models/TagModel.js.map +0 -1
- package/infrastructure/tests/app/models/UserInfoModel.d.ts +0 -10
- package/infrastructure/tests/app/models/UserInfoModel.js +0 -56
- package/infrastructure/tests/app/models/UserInfoModel.js.map +0 -1
- package/infrastructure/tests/app/models/UserModel.d.ts +0 -12
- package/infrastructure/tests/app/models/UserModel.js +0 -71
- package/infrastructure/tests/app/models/UserModel.js.map +0 -1
- package/infrastructure/tests/app/repositories/ArticleRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/ArticleRepository.js +0 -35
- package/infrastructure/tests/app/repositories/ArticleRepository.js.map +0 -1
- package/infrastructure/tests/app/repositories/CommentRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/CommentRepository.js +0 -35
- package/infrastructure/tests/app/repositories/CommentRepository.js.map +0 -1
- package/infrastructure/tests/app/repositories/FileRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/FileRepository.js +0 -35
- package/infrastructure/tests/app/repositories/FileRepository.js.map +0 -1
- package/infrastructure/tests/app/repositories/ImageRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/ImageRepository.js +0 -35
- package/infrastructure/tests/app/repositories/ImageRepository.js.map +0 -1
- package/infrastructure/tests/app/repositories/TagRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/TagRepository.js +0 -35
- package/infrastructure/tests/app/repositories/TagRepository.js.map +0 -1
- package/infrastructure/tests/app/repositories/UserRepository.d.ts +0 -9
- package/infrastructure/tests/app/repositories/UserRepository.js +0 -35
- package/infrastructure/tests/app/repositories/UserRepository.js.map +0 -1
- package/infrastructure/tests/app/schemas/ArticleSchema.d.ts +0 -11
- package/infrastructure/tests/app/schemas/ArticleSchema.js +0 -54
- package/infrastructure/tests/app/schemas/ArticleSchema.js.map +0 -1
- package/infrastructure/tests/app/schemas/FileSchema.d.ts +0 -4
- package/infrastructure/tests/app/schemas/FileSchema.js.map +0 -1
- package/infrastructure/tests/app/schemas/ImageSchema.d.ts +0 -5
- package/infrastructure/tests/app/schemas/ImageSchema.js +0 -30
- package/infrastructure/tests/app/schemas/ImageSchema.js.map +0 -1
- package/infrastructure/tests/app/schemas/UserInfoSchema.d.ts +0 -6
- package/infrastructure/tests/app/schemas/UserInfoSchema.js +0 -33
- package/infrastructure/tests/app/schemas/UserInfoSchema.js.map +0 -1
- package/infrastructure/tests/app/schemas/UserSchema.d.ts +0 -8
- package/infrastructure/tests/app/schemas/UserSchema.js +0 -40
- package/infrastructure/tests/app/schemas/UserSchema.js.map +0 -1
- package/infrastructure/tests/app/services/ArticleService.d.ts +0 -12
- package/infrastructure/tests/app/services/ArticleService.js +0 -31
- package/infrastructure/tests/app/services/ArticleService.js.map +0 -1
- package/infrastructure/tests/app/services/CommentService.d.ts +0 -12
- package/infrastructure/tests/app/services/CommentService.js +0 -31
- package/infrastructure/tests/app/services/CommentService.js.map +0 -1
- package/infrastructure/tests/app/services/FileService.d.ts +0 -12
- package/infrastructure/tests/app/services/FileService.js +0 -31
- package/infrastructure/tests/app/services/FileService.js.map +0 -1
- package/infrastructure/tests/app/services/ImageService.d.ts +0 -12
- package/infrastructure/tests/app/services/ImageService.js +0 -31
- package/infrastructure/tests/app/services/ImageService.js.map +0 -1
- package/infrastructure/tests/app/services/TagService.d.ts +0 -12
- package/infrastructure/tests/app/services/TagService.js +0 -31
- package/infrastructure/tests/app/services/TagService.js.map +0 -1
- package/infrastructure/tests/app/services/UserService.d.ts +0 -12
- package/infrastructure/tests/app/services/UserService.js +0 -31
- package/infrastructure/tests/app/services/UserService.js.map +0 -1
- package/infrastructure/tests/app/tables/ArticleTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/ArticleTable.js +0 -18
- package/infrastructure/tests/app/tables/ArticleTable.js.map +0 -1
- package/infrastructure/tests/app/tables/CommentTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/CommentTable.js +0 -18
- package/infrastructure/tests/app/tables/CommentTable.js.map +0 -1
- package/infrastructure/tests/app/tables/FileTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/FileTable.js +0 -18
- package/infrastructure/tests/app/tables/FileTable.js.map +0 -1
- package/infrastructure/tests/app/tables/ImageTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/ImageTable.js +0 -18
- package/infrastructure/tests/app/tables/ImageTable.js.map +0 -1
- package/infrastructure/tests/app/tables/TagTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/TagTable.js +0 -18
- package/infrastructure/tests/app/tables/TagTable.js.map +0 -1
- package/infrastructure/tests/app/tables/UserInfoTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/UserInfoTable.js +0 -18
- package/infrastructure/tests/app/tables/UserInfoTable.js.map +0 -1
- package/infrastructure/tests/app/tables/UserTable.d.ts +0 -3
- package/infrastructure/tests/app/tables/UserTable.js +0 -18
- package/infrastructure/tests/app/tables/UserTable.js.map +0 -1
- package/infrastructure/tests/bootstrap.d.ts +0 -1
- package/infrastructure/tests/bootstrap.js +0 -55
- package/infrastructure/tests/bootstrap.js.map +0 -1
- /package/infrastructure/{tests/ModelTest.test.d.ts → decorators/fields/EnumField.test.d.ts} +0 -0
|
@@ -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)({
|
|
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)({
|
|
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)({
|
|
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;
|
|
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
|
|
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":";;;AAAA,mCAA+C;AAE/C,sDAAiD;AAGjD,kEAA6D;AAC7D,qDAAoE;AAKpE;;GAEG;AACH,MAAa,WAAW;IAAxB;QACI;;WAEG;QACO,eAAU,GAAW,IAAI,CAAC;
|
|
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"}
|
|
@@ -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.
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
class
|
|
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,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
__metadata("design:type",
|
|
24
|
-
],
|
|
25
|
-
exports.
|
|
26
|
-
//# sourceMappingURL=
|
|
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,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
|
-
}
|