@node-c/api-rest 1.0.0-alpha37 → 1.0.0-alpha39
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/package.json +3 -3
- package/src/entityController/dto/base.dto.ts +0 -17
- package/src/entityController/dto/bulkCreate.dto.ts +0 -15
- package/src/entityController/dto/create.dto.ts +0 -15
- package/src/entityController/dto/delete.dto.ts +0 -12
- package/src/entityController/dto/find.dto.ts +0 -37
- package/src/entityController/dto/findOne.dto.ts +0 -24
- package/src/entityController/dto/index.ts +0 -9
- package/src/entityController/dto/numberItem.dto.ts +0 -12
- package/src/entityController/dto/update.dto.ts +0 -26
- package/src/entityController/dto/uploadFile.dto.ts +0 -12
- package/src/entityController/index.ts +0 -3
- package/src/entityController/rest.entity.controller.definitions.ts +0 -28
- package/src/entityController/rest.entity.controller.ts +0 -282
- package/src/index.ts +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-c/api-rest",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-alpha39",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"class-validator": "^0.14.1"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@node-c/api-http": "^1.0.0-
|
|
22
|
-
"@node-c/core": "^1.0.0-
|
|
21
|
+
"@node-c/api-http": "^1.0.0-alpha39",
|
|
22
|
+
"@node-c/core": "^1.0.0-alpha39"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DomainBaseAdditionalServiceOptionsOverrides, DomainPersistanceServicesKey, GenericObject } from '@node-c/core';
|
|
2
|
-
|
|
3
|
-
import { IsArray, IsNotEmptyObject, IsObject, IsOptional } from 'class-validator';
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
* We need the Options type here, so we can easily extend overriden classes' BaseDto
|
|
7
|
-
*/
|
|
8
|
-
export class BaseDto<Options> {
|
|
9
|
-
@IsNotEmptyObject()
|
|
10
|
-
@IsObject()
|
|
11
|
-
@IsOptional()
|
|
12
|
-
optionsOverridesByService?: GenericObject<Partial<Options>> & DomainBaseAdditionalServiceOptionsOverrides;
|
|
13
|
-
|
|
14
|
-
@IsArray()
|
|
15
|
-
@IsOptional()
|
|
16
|
-
persistanceServices?: DomainPersistanceServicesKey[];
|
|
17
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ArrayNotEmpty, IsArray, IsDefined } from 'class-validator';
|
|
2
|
-
|
|
3
|
-
import { BaseDto } from './base.dto';
|
|
4
|
-
|
|
5
|
-
import { BulkCreateBody, BulkCreateOptions } from '../rest.entity.controller.definitions';
|
|
6
|
-
|
|
7
|
-
export class BulkCreateDto<Entity, Options extends BulkCreateOptions<Entity>>
|
|
8
|
-
extends BaseDto<Options>
|
|
9
|
-
implements BulkCreateBody<Entity>
|
|
10
|
-
{
|
|
11
|
-
@ArrayNotEmpty()
|
|
12
|
-
@IsArray()
|
|
13
|
-
@IsDefined()
|
|
14
|
-
data: Partial<Entity>[];
|
|
15
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { IsDefined, IsNotEmptyObject, IsObject } from 'class-validator';
|
|
2
|
-
|
|
3
|
-
import { BaseDto } from './base.dto';
|
|
4
|
-
|
|
5
|
-
import { CreateBody, CreateOptions } from '../rest.entity.controller.definitions';
|
|
6
|
-
|
|
7
|
-
export class CreateDto<Entity, Options extends CreateOptions<Entity>>
|
|
8
|
-
extends BaseDto<Options>
|
|
9
|
-
implements CreateBody<Entity>
|
|
10
|
-
{
|
|
11
|
-
@IsDefined()
|
|
12
|
-
@IsNotEmptyObject()
|
|
13
|
-
@IsObject()
|
|
14
|
-
data: Partial<Entity>;
|
|
15
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { DomainDeleteOptions, GenericObject } from '@node-c/core';
|
|
2
|
-
|
|
3
|
-
import { IsDefined, IsNotEmptyObject, IsObject } from 'class-validator';
|
|
4
|
-
|
|
5
|
-
import { BaseDto } from './base.dto';
|
|
6
|
-
|
|
7
|
-
export class DeleteDto<Options extends DomainDeleteOptions> extends BaseDto<Options> implements DomainDeleteOptions {
|
|
8
|
-
@IsDefined()
|
|
9
|
-
@IsNotEmptyObject()
|
|
10
|
-
@IsObject()
|
|
11
|
-
filters: GenericObject<unknown>;
|
|
12
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { DomainFindOptions, GenericObject, PersistanceOrderByDirection } from '@node-c/core';
|
|
2
|
-
|
|
3
|
-
import { IsArray, IsBooleanString, IsNotEmptyObject, IsNumberString, IsObject, IsOptional } from 'class-validator';
|
|
4
|
-
|
|
5
|
-
import { BaseDto } from './base.dto';
|
|
6
|
-
|
|
7
|
-
export class FindDto<Options extends DomainFindOptions> extends BaseDto<Options> implements DomainFindOptions {
|
|
8
|
-
@IsNotEmptyObject()
|
|
9
|
-
@IsObject()
|
|
10
|
-
@IsOptional()
|
|
11
|
-
filters?: GenericObject;
|
|
12
|
-
|
|
13
|
-
@IsBooleanString()
|
|
14
|
-
@IsOptional()
|
|
15
|
-
findAll?: boolean;
|
|
16
|
-
|
|
17
|
-
@IsArray()
|
|
18
|
-
@IsOptional()
|
|
19
|
-
include?: string[];
|
|
20
|
-
|
|
21
|
-
@IsObject()
|
|
22
|
-
@IsOptional()
|
|
23
|
-
@IsNotEmptyObject()
|
|
24
|
-
orderBy?: GenericObject<PersistanceOrderByDirection>;
|
|
25
|
-
|
|
26
|
-
@IsNumberString()
|
|
27
|
-
@IsOptional()
|
|
28
|
-
page?: number;
|
|
29
|
-
|
|
30
|
-
@IsNumberString()
|
|
31
|
-
@IsOptional()
|
|
32
|
-
perPage?: number;
|
|
33
|
-
|
|
34
|
-
@IsArray()
|
|
35
|
-
@IsOptional()
|
|
36
|
-
select?: string[];
|
|
37
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { DomainFindOneOptions, GenericObject, PersistanceOrderByDirection } from '@node-c/core';
|
|
2
|
-
|
|
3
|
-
import { IsArray, IsNotEmptyObject, IsObject, IsOptional } from 'class-validator';
|
|
4
|
-
|
|
5
|
-
import { BaseDto } from './base.dto';
|
|
6
|
-
|
|
7
|
-
export class FindOneDto<Options extends DomainFindOneOptions> extends BaseDto<Options> implements DomainFindOneOptions {
|
|
8
|
-
@IsNotEmptyObject()
|
|
9
|
-
@IsObject()
|
|
10
|
-
filters: GenericObject<unknown>;
|
|
11
|
-
|
|
12
|
-
@IsArray()
|
|
13
|
-
@IsOptional()
|
|
14
|
-
include?: string[];
|
|
15
|
-
|
|
16
|
-
@IsNotEmptyObject()
|
|
17
|
-
@IsObject()
|
|
18
|
-
@IsOptional()
|
|
19
|
-
orderBy?: GenericObject<PersistanceOrderByDirection>;
|
|
20
|
-
|
|
21
|
-
@IsArray()
|
|
22
|
-
@IsOptional()
|
|
23
|
-
select?: string[];
|
|
24
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './base.dto';
|
|
2
|
-
export * from './bulkCreate.dto';
|
|
3
|
-
export * from './create.dto';
|
|
4
|
-
export * from './delete.dto';
|
|
5
|
-
export * from './find.dto';
|
|
6
|
-
export * from './findOne.dto';
|
|
7
|
-
export * from './numberItem.dto';
|
|
8
|
-
export * from './update.dto';
|
|
9
|
-
export * from './uploadFile.dto';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { PersistanceNumberItem } from '@node-c/core';
|
|
2
|
-
import { IsBoolean, IsDefined, IsNumber, IsOptional } from 'class-validator';
|
|
3
|
-
|
|
4
|
-
export class NumberItemDto implements PersistanceNumberItem {
|
|
5
|
-
@IsOptional()
|
|
6
|
-
@IsBoolean()
|
|
7
|
-
deleted?: boolean;
|
|
8
|
-
|
|
9
|
-
@IsDefined()
|
|
10
|
-
@IsNumber()
|
|
11
|
-
value: number;
|
|
12
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { GenericObject } from '@node-c/core';
|
|
2
|
-
|
|
3
|
-
import { IsBoolean, IsDefined, IsNotEmptyObject, IsObject, IsOptional } from 'class-validator';
|
|
4
|
-
|
|
5
|
-
import { BaseDto } from './base.dto';
|
|
6
|
-
|
|
7
|
-
import { UpdateBody, UpdateOptions } from '../rest.entity.controller.definitions';
|
|
8
|
-
|
|
9
|
-
export class UpdateDto<Entity, Options extends UpdateOptions<Entity>>
|
|
10
|
-
extends BaseDto<Options>
|
|
11
|
-
implements UpdateBody<Entity>
|
|
12
|
-
{
|
|
13
|
-
@IsDefined()
|
|
14
|
-
@IsNotEmptyObject()
|
|
15
|
-
@IsObject()
|
|
16
|
-
data: Partial<Entity>;
|
|
17
|
-
|
|
18
|
-
@IsDefined()
|
|
19
|
-
@IsNotEmptyObject()
|
|
20
|
-
@IsObject()
|
|
21
|
-
filters: GenericObject<unknown>;
|
|
22
|
-
|
|
23
|
-
@IsOptional()
|
|
24
|
-
@IsBoolean()
|
|
25
|
-
returnData?: boolean;
|
|
26
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DomainBulkCreateData,
|
|
3
|
-
DomainBulkCreateOptions,
|
|
4
|
-
DomainCreateData,
|
|
5
|
-
DomainCreateOptions,
|
|
6
|
-
DomainUpdateData,
|
|
7
|
-
DomainUpdateOptions,
|
|
8
|
-
GenericObject
|
|
9
|
-
} from '@node-c/core';
|
|
10
|
-
|
|
11
|
-
export interface BulkCreateBody<Entity> extends DomainBulkCreateOptions {
|
|
12
|
-
data: DomainBulkCreateData<Entity>;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export type BulkCreateOptions<Entity> = Omit<BulkCreateBody<Entity>, 'data'>;
|
|
16
|
-
|
|
17
|
-
export interface CreateBody<Entity> extends DomainCreateOptions {
|
|
18
|
-
data: DomainCreateData<Entity>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type CreateOptions<Entity> = Omit<CreateBody<Entity>, 'data'>;
|
|
22
|
-
|
|
23
|
-
export interface UpdateBody<Entity> extends DomainUpdateOptions {
|
|
24
|
-
data: DomainUpdateData<Entity>;
|
|
25
|
-
filters: GenericObject<unknown>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type UpdateOptions<Entity> = Omit<UpdateBody<Entity>, 'data'>;
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Body,
|
|
3
|
-
Delete,
|
|
4
|
-
Get,
|
|
5
|
-
HttpException,
|
|
6
|
-
HttpStatus,
|
|
7
|
-
Param,
|
|
8
|
-
Patch,
|
|
9
|
-
Post,
|
|
10
|
-
Query,
|
|
11
|
-
Type,
|
|
12
|
-
UseInterceptors,
|
|
13
|
-
ValidationPipe
|
|
14
|
-
} from '@nestjs/common';
|
|
15
|
-
|
|
16
|
-
import { HTTPAuthorizationInterceptor, HTTPErrorInterceptor } from '@node-c/api-http';
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
DomainBulkCreateResult,
|
|
20
|
-
DomainCreateResult,
|
|
21
|
-
DomainDeleteOptions,
|
|
22
|
-
DomainDeleteResult,
|
|
23
|
-
DomainEntityService,
|
|
24
|
-
DomainEntityServiceDefaultData,
|
|
25
|
-
DomainFindOneOptions,
|
|
26
|
-
DomainFindOneResult,
|
|
27
|
-
DomainFindOptions,
|
|
28
|
-
DomainFindResult,
|
|
29
|
-
DomainUpdateResult,
|
|
30
|
-
PersistanceEntityService
|
|
31
|
-
} from '@node-c/core';
|
|
32
|
-
|
|
33
|
-
import {
|
|
34
|
-
BulkCreateDto as BaseBulkCreateDto,
|
|
35
|
-
CreateDto as BaseCreateDto,
|
|
36
|
-
DeleteDto as BaseDeleteDto,
|
|
37
|
-
FindDto as BaseFindDto,
|
|
38
|
-
FindOneDto as BaseFindOneDto,
|
|
39
|
-
UpdateDto as BaseUpdateDto
|
|
40
|
-
} from './dto';
|
|
41
|
-
import {
|
|
42
|
-
BulkCreateBody,
|
|
43
|
-
BulkCreateOptions,
|
|
44
|
-
CreateBody,
|
|
45
|
-
CreateOptions,
|
|
46
|
-
UpdateBody,
|
|
47
|
-
UpdateOptions
|
|
48
|
-
} from './rest.entity.controller.definitions';
|
|
49
|
-
|
|
50
|
-
// These types and interfaces have to be here to avoid circular dependencies.
|
|
51
|
-
export type DefaultDomainEntityService<Entity> = DomainEntityService<
|
|
52
|
-
Entity,
|
|
53
|
-
PersistanceEntityService<Entity>,
|
|
54
|
-
DomainEntityServiceDefaultData<Entity>,
|
|
55
|
-
Record<string, PersistanceEntityService<Partial<Entity>>>
|
|
56
|
-
>;
|
|
57
|
-
|
|
58
|
-
export interface DefaultDtos<Entity> {
|
|
59
|
-
BulkCreate: BaseBulkCreateDto<Entity, BulkCreateOptions<Entity>>;
|
|
60
|
-
Create: BaseCreateDto<Entity, CreateOptions<Entity>>;
|
|
61
|
-
Delete: BaseDeleteDto<DomainDeleteOptions>;
|
|
62
|
-
Find: BaseFindDto<DomainFindOptions>;
|
|
63
|
-
FindOne: BaseFindOneDto<DomainFindOneOptions>;
|
|
64
|
-
Update: BaseUpdateDto<Entity, UpdateOptions<Entity>>;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// TODO: a middleware for converting string booleans to booleans
|
|
68
|
-
@UseInterceptors(HTTPAuthorizationInterceptor, HTTPErrorInterceptor)
|
|
69
|
-
export class RESTAPIEntityControlerWithoutDto<Entity, EntityDomainService extends DefaultDomainEntityService<Entity>> {
|
|
70
|
-
inUseDefaultRoutes: { [handlerName: string]: boolean };
|
|
71
|
-
|
|
72
|
-
constructor(
|
|
73
|
-
// eslint-disable-next-line no-unused-vars
|
|
74
|
-
protected domainEntityService: EntityDomainService,
|
|
75
|
-
// eslint-disable-next-line no-unused-vars
|
|
76
|
-
protected defaultRouteMethods?: string[]
|
|
77
|
-
) {
|
|
78
|
-
this.refreshDefaultRoutes();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
protected checkRoute(handlerName: string): void {
|
|
82
|
-
if (!this.inUseDefaultRoutes || !this.inUseDefaultRoutes[handlerName]) {
|
|
83
|
-
throw new HttpException('Not found', HttpStatus.NOT_FOUND);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
public bulkCreate(_body: BulkCreateBody<Entity>, ..._args: unknown[]): Promise<DomainBulkCreateResult<Entity> | void>;
|
|
88
|
-
@Post('bulk')
|
|
89
|
-
async bulkCreate(@Body() body: BulkCreateBody<Entity>): Promise<DomainBulkCreateResult<Entity>> {
|
|
90
|
-
this.checkRoute('bulkCreate');
|
|
91
|
-
const { data, ...options } = body;
|
|
92
|
-
return await this.domainEntityService.bulkCreate(data, options);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public create(_body: CreateBody<Entity>, ..._args: unknown[]): Promise<DomainCreateResult<Entity> | void>;
|
|
96
|
-
@Post()
|
|
97
|
-
async create(@Body() body: CreateBody<Entity>): Promise<DomainCreateResult<Entity>> {
|
|
98
|
-
this.checkRoute('create');
|
|
99
|
-
const { data, ...options } = body;
|
|
100
|
-
return await this.domainEntityService.create(data, options);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
public delete(_body: DomainDeleteOptions, ..._args: unknown[]): Promise<DomainDeleteResult<Entity> | void>;
|
|
104
|
-
@Delete()
|
|
105
|
-
async delete(@Body() body: DomainDeleteOptions): Promise<DomainDeleteResult<Entity>> {
|
|
106
|
-
this.checkRoute('delete');
|
|
107
|
-
return await this.domainEntityService.delete(body);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public find(_query: DomainFindOptions, ..._args: unknown[]): Promise<DomainFindResult<Entity> | void>;
|
|
111
|
-
@Get()
|
|
112
|
-
async find(@Query() query: DomainFindOptions): Promise<DomainFindResult<Entity> | void> {
|
|
113
|
-
this.checkRoute('find');
|
|
114
|
-
return await this.domainEntityService.find(query);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
public findOne(
|
|
118
|
-
_id: number | string,
|
|
119
|
-
_query: DomainFindOneOptions,
|
|
120
|
-
..._args: unknown[]
|
|
121
|
-
): Promise<DomainFindOneResult<Entity> | void>;
|
|
122
|
-
@Get('/item/:id')
|
|
123
|
-
async findOne(
|
|
124
|
-
@Param() id: number | string,
|
|
125
|
-
@Query() query: DomainFindOneOptions
|
|
126
|
-
): Promise<DomainFindOneResult<Entity> | void> {
|
|
127
|
-
this.checkRoute('findOne');
|
|
128
|
-
let filters = query.filters;
|
|
129
|
-
if (!filters) {
|
|
130
|
-
filters = {};
|
|
131
|
-
query.filters = filters;
|
|
132
|
-
}
|
|
133
|
-
filters.id = id;
|
|
134
|
-
return await this.domainEntityService.findOne(query);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
refreshDefaultRoutes(newDefaultRoutes?: string[]): void {
|
|
138
|
-
const defaultRouteMethods = newDefaultRoutes || this.defaultRouteMethods;
|
|
139
|
-
this.inUseDefaultRoutes = {};
|
|
140
|
-
if (defaultRouteMethods instanceof Array) {
|
|
141
|
-
defaultRouteMethods.forEach(item => (this.inUseDefaultRoutes[item] = true));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
public update(_body: UpdateBody<Entity>, ..._args: unknown[]): Promise<DomainUpdateResult<Entity> | void>;
|
|
146
|
-
@Patch()
|
|
147
|
-
async update(@Body() body: UpdateBody<Entity>): Promise<DomainUpdateResult<Entity>> {
|
|
148
|
-
this.checkRoute('update');
|
|
149
|
-
const { data, ...options } = body;
|
|
150
|
-
return await this.domainEntityService.update(data, options);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/*
|
|
155
|
-
* For reference on why the dto validation was done in this way - it's a limitation of Typescript itself:
|
|
156
|
-
* the compiler doesn't emit generic type metadata, making it impossible to achieve a DRY OOP base class with schema validation.
|
|
157
|
-
* At this point, it's a decade-old issue - see https://www.typescriptneedstypes.com/ for more details.
|
|
158
|
-
*/
|
|
159
|
-
export class RESTAPIEntityControler<
|
|
160
|
-
Entity,
|
|
161
|
-
EntityDomainService extends DefaultDomainEntityService<Entity>,
|
|
162
|
-
Dto extends DefaultDtos<Entity> = DefaultDtos<Entity>
|
|
163
|
-
> extends RESTAPIEntityControlerWithoutDto<Entity, EntityDomainService> {
|
|
164
|
-
protected defaultRouteMethods: string[];
|
|
165
|
-
protected settings: { validationWhitelist?: boolean } = { validationWhitelist: true };
|
|
166
|
-
protected validationPipe: ValidationPipe;
|
|
167
|
-
|
|
168
|
-
constructor(
|
|
169
|
-
protected domainEntityService: EntityDomainService,
|
|
170
|
-
protected dto: {
|
|
171
|
-
bulkCreate?: Dto['BulkCreate'];
|
|
172
|
-
create?: Dto['Create'];
|
|
173
|
-
delete?: Dto['Delete'];
|
|
174
|
-
find?: Dto['Find'];
|
|
175
|
-
findOne?: Dto['FindOne'];
|
|
176
|
-
update?: Dto['Update'];
|
|
177
|
-
},
|
|
178
|
-
defaultRouteMethods?: string[]
|
|
179
|
-
) {
|
|
180
|
-
super(domainEntityService, Object.keys(dto || {}).concat(defaultRouteMethods || []));
|
|
181
|
-
// const finalDto: typeof dto = {};
|
|
182
|
-
// finalDto.bulkCreate = dto?.bulkCreate || BaseBulkCreateDto<Entity, BulkCreateOptions<Entity>>;
|
|
183
|
-
const { validationWhitelist } = this.settings;
|
|
184
|
-
this.validationPipe = new ValidationPipe({ whitelist: validationWhitelist });
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
@Post('bulk')
|
|
188
|
-
async bulkCreate(
|
|
189
|
-
@Body() body: Dto['BulkCreate'],
|
|
190
|
-
...args: unknown[]
|
|
191
|
-
): Promise<DomainBulkCreateResult<Entity> | void> {
|
|
192
|
-
return await super.bulkCreate.apply(this, [
|
|
193
|
-
await this.validationPipe.transform(body, {
|
|
194
|
-
metatype: this.dto.bulkCreate as unknown as Type,
|
|
195
|
-
type: 'body'
|
|
196
|
-
}),
|
|
197
|
-
...(args || [])
|
|
198
|
-
]);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
@Post()
|
|
202
|
-
async create(
|
|
203
|
-
@Body()
|
|
204
|
-
body: Dto['Create'],
|
|
205
|
-
...args: unknown[]
|
|
206
|
-
): Promise<DomainCreateResult<Entity> | void> {
|
|
207
|
-
return await super.create.apply(this, [
|
|
208
|
-
await this.validationPipe.transform(body, {
|
|
209
|
-
metatype: this.dto.create as unknown as Type,
|
|
210
|
-
type: 'body'
|
|
211
|
-
}),
|
|
212
|
-
...(args || [])
|
|
213
|
-
]);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
@Delete()
|
|
217
|
-
async delete(@Body() body: Dto['Delete'], ...args: unknown[]): Promise<DomainDeleteResult<Entity> | void> {
|
|
218
|
-
return await super.delete.apply(this, [
|
|
219
|
-
await this.validationPipe.transform(body, {
|
|
220
|
-
metatype: this.dto.delete as unknown as Type,
|
|
221
|
-
type: 'body'
|
|
222
|
-
}),
|
|
223
|
-
...(args || [])
|
|
224
|
-
]);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
@Get()
|
|
228
|
-
async find(@Query() query: Dto['Find'], ...args: unknown[]): Promise<DomainFindResult<Entity> | void> {
|
|
229
|
-
return await super.find.apply(this, [
|
|
230
|
-
await this.validationPipe.transform(query, {
|
|
231
|
-
metatype: this.dto.find as unknown as Type,
|
|
232
|
-
type: 'query'
|
|
233
|
-
}),
|
|
234
|
-
...(args || [])
|
|
235
|
-
]);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
@Get('/item/:id')
|
|
239
|
-
async findOne(
|
|
240
|
-
@Param() id: number | string,
|
|
241
|
-
@Query() query: Dto['FindOne'],
|
|
242
|
-
...args: unknown[]
|
|
243
|
-
): Promise<DomainFindOneResult<Entity> | void> {
|
|
244
|
-
return await super.findOne.apply(this, [
|
|
245
|
-
id,
|
|
246
|
-
await this.validationPipe.transform(query, {
|
|
247
|
-
metatype: this.dto.findOne as unknown as Type,
|
|
248
|
-
type: 'query'
|
|
249
|
-
}),
|
|
250
|
-
...(args || [])
|
|
251
|
-
]);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
static getDefaultDtos<EntityForDtos>(): {
|
|
255
|
-
bulkCreate: DefaultDtos<EntityForDtos>['BulkCreate'];
|
|
256
|
-
create: DefaultDtos<EntityForDtos>['Create'];
|
|
257
|
-
delete: DefaultDtos<EntityForDtos>['Delete'];
|
|
258
|
-
find: DefaultDtos<EntityForDtos>['Find'];
|
|
259
|
-
findOne: DefaultDtos<EntityForDtos>['FindOne'];
|
|
260
|
-
update: DefaultDtos<EntityForDtos>['Update'];
|
|
261
|
-
} {
|
|
262
|
-
return {
|
|
263
|
-
bulkCreate: BaseBulkCreateDto as unknown as DefaultDtos<EntityForDtos>['BulkCreate'],
|
|
264
|
-
create: BaseCreateDto as unknown as DefaultDtos<EntityForDtos>['Create'],
|
|
265
|
-
delete: BaseDeleteDto as unknown as DefaultDtos<EntityForDtos>['Delete'],
|
|
266
|
-
find: BaseFindDto as unknown as DefaultDtos<EntityForDtos>['Find'],
|
|
267
|
-
findOne: BaseFindOneDto as unknown as DefaultDtos<EntityForDtos>['FindOne'],
|
|
268
|
-
update: BaseUpdateDto as unknown as DefaultDtos<EntityForDtos>['Update']
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
@Patch()
|
|
273
|
-
async update(@Body() body: Dto['Update'], ...args: unknown[]): Promise<DomainUpdateResult<Entity> | void> {
|
|
274
|
-
return await super.update.apply(this, [
|
|
275
|
-
await this.validationPipe.transform(body, {
|
|
276
|
-
metatype: this.dto.update as unknown as Type,
|
|
277
|
-
type: 'body'
|
|
278
|
-
}),
|
|
279
|
-
...(args || [])
|
|
280
|
-
]);
|
|
281
|
-
}
|
|
282
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './entityController';
|