Files
xiaoxia-saas/apps/web/src/api/subscription.ts
T
xiaoxia 560856cf22
Deploy / Build Production Runtime Images (push) Has been skipped
Deploy / Deploy Production (push) Has been skipped
Deploy / Production Browser E2E (push) Has been skipped
Deploy / Deploy Staging (push) Failing after 210h26m26s
CI/CD Pipeline / Frontend Lint (push) Failing after 210h27m0s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 210h27m7s
fix: resolve all flake8 errors and apply Prettier formatting (#131)
2026-06-30 18:26:53 +08:00

109 lines
2.6 KiB
TypeScript

/**
* 订阅 API 模块
* 对接后端订阅管理接口
*/
import apiClient from "./client";
/** 套餐类型 */
export type PlanType = "free" | "standard" | "pro" | "enterprise";
/** 订阅状态 */
export type SubscriptionStatus = "active" | "expired" | "cancelled" | "trial";
/** 账单状态 */
export type BillingStatus = "paid" | "pending" | "failed" | "refunded";
/** 计费周期 */
export type BillingCycle = "monthly" | "yearly";
/** 套餐信息 */
export interface Plan {
id: PlanType;
name: string;
price: number | null;
yearly_price?: number | null;
description: string;
recommended: boolean;
features: string[];
}
/** 当前订阅信息 */
export interface SubscriptionInfo {
id: string;
plan_id: PlanType;
plan_name: string;
status: SubscriptionStatus;
billing_cycle: BillingCycle;
current_period_start: string;
current_period_end: string;
amount: number;
auto_renew: boolean;
created_at: string;
}
/** 账单记录 */
export interface BillingRecord {
id: string;
plan_name: string;
amount: number;
billing_cycle: BillingCycle;
status: BillingStatus;
payment_method: string;
created_at: string;
invoice_url?: string;
}
/** 升级/降级请求 */
export interface ChangePlanRequest {
target_plan_id: PlanType;
billing_cycle: BillingCycle;
}
/** 升级/降级响应 */
export interface ChangePlanResponse {
success: boolean;
message: string;
new_subscription?: SubscriptionInfo;
}
// ============ API 函数 ============
/** 获取当前订阅信息 */
export const getCurrentSubscription = async (): Promise<SubscriptionInfo> => {
const response = await apiClient.get("/subscription/current");
return response.data;
};
/** 获取账单记录列表 */
export const getBillingRecords = async (): Promise<BillingRecord[]> => {
const response = await apiClient.get("/subscription/billing-records");
return response.data;
};
/** 升级/降级套餐 */
export const changePlan = async (
request: ChangePlanRequest,
): Promise<ChangePlanResponse> => {
const response = await apiClient.post("/subscription/change-plan", request);
return response.data;
};
/** 取消订阅 */
export const cancelSubscription = async (): Promise<{
success: boolean;
message: string;
}> => {
const response = await apiClient.post("/subscription/cancel");
return response.data;
};
/** 切换自动续费 */
export const toggleAutoRenew = async (
enabled: boolean,
): Promise<{ success: boolean; message: string }> => {
const response = await apiClient.post("/subscription/toggle-auto-renew", {
enabled,
});
return response.data;
};