feat(mod): add response

This commit is contained in:
2026-01-29 18:09:58 +08:00
parent 54058478c4
commit 4db955113c
9 changed files with 379 additions and 25 deletions

50
types/api-response.ts Normal file
View 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
View File

@@ -0,0 +1,2 @@
export * from "./api-response";