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>;
super(statusCode, message);
this.data = data; function getClass(o: ClassOrArray) {
} return o instanceof Array ? o[0] : o;
} }
export class PaginatedReturnMessageDto<T> export function ReturnMessageDto<T extends ClassOrArray>(type: T) {
extends BlankPaginatedReturnMessageDto const cl = class SpecificReturnMessage extends BlankReturnMessageDto {
implements PageSettingsWise { data?: ParseType<T>;
@ApiProperty({ description: '返回内容' }) constructor(statusCode: number, message?: string, data?: ParseType<T>) {
data: T[]; super(statusCode, message);
constructor( this.data = data;
statusCode: number, }
message: string, };
data: T[], ApiProperty({ description: '返回数据', type })(cl.prototype, 'data');
total: number, Object.defineProperty(cl, 'name', {
pageSettings: PageSettingsWise, value: `${getClass(type).name}ReturnMessageDto`,
) { });
super(statusCode, message, total, pageSettings); return cl;
this.data = data; }
export function PaginatedReturnMessageDto<T extends AnyClass>(type: T) {
const cl = class SpecificPaginatedReturnMessageDto extends BlankPaginatedReturnMessageDto implements PageSettingsWise {
data?: TypeFromClass<T>[];
constructor(
statusCode: number,
message: string,
data: TypeFromClass<T>[],
total: number,
pageSettings: PageSettingsWise,
) {
super(statusCode, message, total, pageSettings);
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