Files
Jyotisha/frontend/src/lib/redeem-response.ts
T

47 lines
1.8 KiB
TypeScript

export type RedeemErrorCode =
| "invalid_code"
| "expired_code"
| "already_redeemed"
| "account_not_eligible"
| "rate_limited"
| "system_error";
export type RedeemErrorResponse = {
status: number;
message: string;
code: RedeemErrorCode;
};
/**
* Maps a redeem_code RPC error_code to a stable API error contract.
* revoked_code is normalized to invalid_code (the stable code set has no
* revoked variant). Unknown or system-side error codes collapse to
* system_error. account_not_eligible is kept as a mapping only: there is no
* account-eligibility restriction model, so no check is fabricated.
*/
export function redeemErrorResponse(errorCode: string): RedeemErrorResponse {
switch (errorCode) {
case "expired_code":
return { status: 410, message: "兑换码已过期", code: "expired_code" };
case "already_redeemed":
return { status: 409, message: "兑换码已被使用", code: "already_redeemed" };
case "account_not_eligible":
return { status: 403, message: "该兑换码不适用于当前账户", code: "account_not_eligible" };
case "rate_limited":
return { status: 429, message: "请求过于频繁", code: "rate_limited" };
case "revoked_code":
return { status: 404, message: "兑换码已撤销", code: "invalid_code" };
case "invalid_code":
return { status: 404, message: "兑换码不存在", code: "invalid_code" };
case "profile_missing":
return { status: 500, message: "系统异常,请稍后重试", code: "system_error" };
default:
return { status: 500, message: "系统异常,请稍后重试", code: "system_error" };
}
}
export function redeemInputErrorResponse(): RedeemErrorResponse {
return { status: 400, message: "请输入有效兑换码", code: "invalid_code" };
}