Commit 654bb408 authored by nanahira's avatar nanahira

add ImportDataDto

parent ca82592e
...@@ -10,6 +10,8 @@ import { ...@@ -10,6 +10,8 @@ import {
} from '@nestjs/common'; } from '@nestjs/common';
import { import {
BlankReturnMessageDto, BlankReturnMessageDto,
ImportDataDto,
ImportEntryDto,
PaginatedReturnMessageDto, PaginatedReturnMessageDto,
ReturnMessageDto, ReturnMessageDto,
} from '../dto'; } from '../dto';
...@@ -39,6 +41,9 @@ export class RestfulFactory<T> { ...@@ -39,6 +41,9 @@ export class RestfulFactory<T> {
readonly entityArrayReturnMessageDto = PaginatedReturnMessageDto( readonly entityArrayReturnMessageDto = PaginatedReturnMessageDto(
this.entityClass, this.entityClass,
); );
readonly importReturnMessageDto = ReturnMessageDto(
ImportEntryDto(this.entityClass),
);
readonly fieldsToOmit = _.uniq([ readonly fieldsToOmit = _.uniq([
...(getSpecificFields(this.entityClass, 'notColumn') as (keyof T)[]), ...(getSpecificFields(this.entityClass, 'notColumn') as (keyof T)[]),
...(this.options.fieldsToOmit || []), ...(this.options.fieldsToOmit || []),
...@@ -51,6 +56,7 @@ export class RestfulFactory<T> { ...@@ -51,6 +56,7 @@ export class RestfulFactory<T> {
this.entityClass, this.entityClass,
getSpecificFields(this.entityClass, 'notWritable') as (keyof T)[], getSpecificFields(this.entityClass, 'notWritable') as (keyof T)[],
) as ClassType<T>; ) as ClassType<T>;
readonly importDto = ImportDataDto(this.createDto);
readonly findAllDto = PartialType(this.basicDto) as ClassType<T>; readonly findAllDto = PartialType(this.basicDto) as ClassType<T>;
readonly updateDto = PartialType( readonly updateDto = PartialType(
OmitType( OmitType(
...@@ -146,4 +152,16 @@ export class RestfulFactory<T> { ...@@ -146,4 +152,16 @@ export class RestfulFactory<T> {
ApiNoContentResponse({ type: BlankReturnMessageDto }), ApiNoContentResponse({ type: BlankReturnMessageDto }),
]); ]);
} }
import(extras: Partial<OperationObject> = {}): MethodDecorator {
return MergeMethodDecorators([
Post('import'),
ApiOperation({
summary: `Import ${this.entityClass.name}`,
...extras,
}),
ApiBody({ type: this.importDto }),
ApiCreatedResponse({ type: this.importReturnMessageDto }),
]);
}
} }
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { ValidateNested } from 'class-validator';
import { import {
AnyClass,
ClassOrArray, ClassOrArray,
getClassFromClassOrArray, getClassFromClassOrArray,
InsertField, InsertField,
...@@ -24,3 +27,20 @@ export function ImportEntryDto<C extends ClassOrArray>(type: C) { ...@@ -24,3 +27,20 @@ export function ImportEntryDto<C extends ClassOrArray>(type: C) {
`${getClassFromClassOrArray(type).name}ImportEntry`, `${getClassFromClassOrArray(type).name}ImportEntry`,
); );
} }
export class ImportDataBaseDto<T> {
@ValidateNested()
data: T[];
}
export function ImportDataDto<C extends AnyClass>(type: C) {
const dtoClass = InsertField(
ImportDataBaseDto,
{
entry: { type: [type], options: { description: 'Import data' } },
},
`${getClassFromClassOrArray(type).name}ImportData`,
);
Type(() => dtoClass)(dtoClass.prototype, 'data');
return dtoClass;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment