51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
export const BizCode = {
|
|
Success: 0,
|
|
ServerError: 10000,
|
|
DbError: 10001,
|
|
CacheError: 10002,
|
|
SerializationError: 10003,
|
|
ExternalServiceError: 10004,
|
|
ConfigError: 10005,
|
|
Unauthorized: 20000,
|
|
AccessTokenExpired: 20001,
|
|
RefreshTokenExpired: 20002,
|
|
PermissionDenied: 20003,
|
|
AccountDisabled: 20004,
|
|
InvalidCredentials: 20005,
|
|
MissingHeader: 20006,
|
|
BadRequest: 30000,
|
|
ValidationError: 30001,
|
|
ResourceNotFound: 30002,
|
|
ResourceAlreadyExists: 30003,
|
|
MethodNotAllowed: 30004,
|
|
RateLimitExceeded: 40000,
|
|
PreconditionFailed: 40001,
|
|
} as const;
|
|
|
|
export type BizCode = (typeof BizCode)[keyof typeof BizCode];
|
|
|
|
export type SuccessResponse<T> = {
|
|
code: typeof BizCode.Success;
|
|
message: string;
|
|
data?: T;
|
|
trace_id?: string;
|
|
};
|
|
|
|
export type ErrorResponse = {
|
|
code: Exclude<BizCode, typeof BizCode.Success> | number;
|
|
message: string;
|
|
details?: unknown;
|
|
trace_id?: string;
|
|
};
|
|
|
|
export type ApiResponse<T> = SuccessResponse<T> | ErrorResponse;
|
|
|
|
export function isSuccessResponse<T>(res: ApiResponse<T>): res is SuccessResponse<T> {
|
|
return res.code === BizCode.Success;
|
|
}
|
|
|
|
export function isErrorResponse<T>(res: ApiResponse<T>): res is ErrorResponse {
|
|
return res.code !== BizCode.Success;
|
|
}
|
|
|