Files
Picsur/shared/src/dto/api.dto.ts

45 lines
730 B
TypeScript
Raw Normal View History

2022-02-25 12:22:00 +01:00
import {
IsBoolean,
IsDefined,
IsInt,
IsNotEmpty,
IsString,
Max,
Min,
ValidateNested,
} from 'class-validator';
class BaseApiResponse<T extends Object, W extends boolean> {
@IsBoolean()
@IsDefined()
success: W;
@IsInt()
@Min(0)
@Max(1000)
@IsDefined()
statusCode: number;
@IsString()
@IsNotEmpty()
timestamp: string;
@ValidateNested()
@IsDefined()
data: T;
}
export class ApiSuccessResponse<T extends Object> extends BaseApiResponse<
T,
true
> {}
export class ApiErrorData {
@IsString()
@IsNotEmpty()
message: string;
}
export class ApiErrorResponse extends BaseApiResponse<ApiErrorData, false> {}
export type ApiResponse<T> = ApiSuccessResponse<T> | ApiErrorResponse;