feat(mod): add response
This commit is contained in:
50
types/api-response.ts
Normal file
50
types/api-response.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
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;
|
||||
}
|
||||
|
||||
2
types/index.ts
Normal file
2
types/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from "./api-response";
|
||||
|
||||
Reference in New Issue
Block a user