chore(points): align types/api with final backend contract - apps/web/src/api/subscription/types.ts
This commit is contained in:
@@ -1,65 +1,115 @@
|
||||
/**
|
||||
* 订阅相关类型定义
|
||||
* 订阅/会员类型定义
|
||||
* 对齐后端 staging 实测最终契约(2026-09-16)
|
||||
*
|
||||
* Base path: /api/v1/
|
||||
*/
|
||||
|
||||
/** 套餐类型 */
|
||||
export type PlanType = "free" | "standard" | "pro" | "enterprise"
|
||||
|
||||
/** 订阅状态 */
|
||||
export type SubscriptionStatus = "active" | "expired" | "cancelled" | "trial"
|
||||
|
||||
/** 账单状态 */
|
||||
export type BillingStatus = "paid" | "pending" | "failed" | "refunded"
|
||||
/** 订阅计划 ID */
|
||||
export type PlanId = "free" | "monthly" | "quarterly" | "yearly"
|
||||
|
||||
/** 计费周期 */
|
||||
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 type SubscriptionStatus = "active" | "expired" | "cancelled" | "pending"
|
||||
|
||||
/** 当前订阅信息 */
|
||||
/** 账单状态 */
|
||||
export type BillingStatus = "paid" | "pending" | "failed" | "refunded"
|
||||
|
||||
/* ================================================================
|
||||
* 当前订阅(GET /subscription/current)
|
||||
* ================================================================ */
|
||||
export interface SubscriptionInfo {
|
||||
id: string
|
||||
plan_id: PlanType
|
||||
plan_id: PlanId
|
||||
plan_name: string
|
||||
status: SubscriptionStatus
|
||||
/** 当前计费周期:monthly 对月卡/季卡按自然月续费;yearly 对年卡 */
|
||||
billing_cycle: BillingCycle
|
||||
current_period_start: string
|
||||
current_period_end: string
|
||||
/** 本期金额(分) */
|
||||
amount: number
|
||||
auto_renew: boolean
|
||||
created_at: string
|
||||
}
|
||||
|
||||
/** 账单记录 */
|
||||
/* ================================================================
|
||||
* 订阅计划(GET /subscription/plans)
|
||||
* ================================================================ */
|
||||
export interface SubscriptionPlan {
|
||||
plan_id: PlanId
|
||||
/** 中文名 */
|
||||
name: string
|
||||
/** 价格(分),年卡/季卡为总价 */
|
||||
price_cents: number
|
||||
/** 折算月价(分),对比用 */
|
||||
monthly_price_cents: number
|
||||
/** 时长(天) */
|
||||
duration_days: number
|
||||
/** 积分折扣(0.9 = 9折,1 = 无折扣) */
|
||||
points_discount: number
|
||||
features: {
|
||||
max_resolution: string
|
||||
free_clips_daily: number
|
||||
[key: string]: unknown
|
||||
}
|
||||
}
|
||||
|
||||
export interface SubscriptionPlansResponse {
|
||||
plans: SubscriptionPlan[]
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* 账单(GET /subscription/billing-records)
|
||||
* ================================================================ */
|
||||
export interface BillingRecord {
|
||||
id: string
|
||||
plan_name: string
|
||||
amount: number
|
||||
billing_cycle: BillingCycle
|
||||
/** 订单类型:subscribe/renew/upgrade/refund */
|
||||
order_type: string
|
||||
plan_id: PlanId
|
||||
/** 金额(分) */
|
||||
amount_cents: number
|
||||
status: BillingStatus
|
||||
payment_method: string
|
||||
created_at: string
|
||||
invoice_url?: string
|
||||
paid_at?: string
|
||||
}
|
||||
|
||||
/** 升级/降级请求 */
|
||||
/* ================================================================
|
||||
* 变更/取消/开关自动续费
|
||||
* ================================================================ */
|
||||
export interface ChangePlanRequest {
|
||||
target_plan_id: PlanType
|
||||
target_plan_id: PlanId
|
||||
billing_cycle: BillingCycle
|
||||
}
|
||||
|
||||
/** 升级/降级响应 */
|
||||
export interface ChangePlanResponse {
|
||||
success: boolean
|
||||
message: string
|
||||
new_subscription?: SubscriptionInfo
|
||||
}
|
||||
|
||||
export interface ToggleAutoRenewRequest {
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* 中文标签映射
|
||||
* ================================================================ */
|
||||
export const PLAN_LABEL: Record<PlanId, string> = {
|
||||
free: "免费版",
|
||||
monthly: "月度会员",
|
||||
quarterly: "季度会员",
|
||||
yearly: "年度会员",
|
||||
}
|
||||
|
||||
export const BILLING_CYCLE_LABEL: Record<BillingCycle, string> = {
|
||||
monthly: "月付",
|
||||
yearly: "年付",
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 旧命名保留别名,新代码请直接用 PlanId
|
||||
*/
|
||||
export type PlanType = PlanId
|
||||
|
||||
Reference in New Issue
Block a user