Commit 64d004d3 authored by nanahira's avatar nanahira

catchup typeorm thing

parent 7ad5408a
Pipeline #14518 passed with stages
in 1 minute and 54 seconds
...@@ -55,32 +55,51 @@ export class BlankPaginatedReturnMessageDto ...@@ -55,32 +55,51 @@ export class BlankPaginatedReturnMessageDto
} }
} }
export class ReturnMessageDto<T> type AnyClass = new (...args: any[]) => any;
extends BlankReturnMessageDto type ClassOrArray = AnyClass | [AnyClass];
implements ReturnMessage<T> { type TypeFromClass<T> = T extends new (...args: any[]) => infer U ? U : never;
@ApiProperty({ description: '返回内容' }) export type ParseType<T extends ClassOrArray> = T extends [infer U]
data?: T; ? TypeFromClass<U>[]
constructor(statusCode: number, message?: string, data?: T) { : TypeFromClass<T>;
function getClass(o: ClassOrArray) {
return o instanceof Array ? o[0] : o;
}
export function ReturnMessageDto<T extends ClassOrArray>(type: T) {
const cl = class SpecificReturnMessage extends BlankReturnMessageDto {
data?: ParseType<T>;
constructor(statusCode: number, message?: string, data?: ParseType<T>) {
super(statusCode, message); super(statusCode, message);
this.data = data; this.data = data;
} }
};
ApiProperty({ description: '返回数据', type })(cl.prototype, 'data');
Object.defineProperty(cl, 'name', {
value: `${getClass(type).name}ReturnMessageDto`,
});
return cl;
} }
export class PaginatedReturnMessageDto<T> export function PaginatedReturnMessageDto<T extends AnyClass>(type: T) {
extends BlankPaginatedReturnMessageDto const cl = class SpecificPaginatedReturnMessageDto extends BlankPaginatedReturnMessageDto implements PageSettingsWise {
implements PageSettingsWise { data?: TypeFromClass<T>[];
@ApiProperty({ description: '返回内容' })
data: T[];
constructor( constructor(
statusCode: number, statusCode: number,
message: string, message: string,
data: T[], data: TypeFromClass<T>[],
total: number, total: number,
pageSettings: PageSettingsWise, pageSettings: PageSettingsWise,
) { ) {
super(statusCode, message, total, pageSettings); super(statusCode, message, total, pageSettings);
this.data = data; this.data = data;
} }
}
ApiProperty({ description: '返回数据', type: [type] })(cl.prototype, 'data');
Object.defineProperty(cl, 'name', {
value: `${getClass(type).name} PaginatedReturnMessageDto`,
});
return cl;
} }
export class StringReturnMessageDto export class StringReturnMessageDto
...@@ -88,4 +107,9 @@ export class StringReturnMessageDto ...@@ -88,4 +107,9 @@ export class StringReturnMessageDto
implements ReturnMessage<string> { implements ReturnMessage<string> {
@ApiProperty({ description: '返回内容' }) @ApiProperty({ description: '返回内容' })
data?: string; data?: string;
constructor(statusCode: number, message?: string, data?: string) {
super(statusCode, message);
this.data = data;
}
} }
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