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