44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package oci
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"oci-portal/internal/model"
|
|
)
|
|
|
|
// AccountProfile 是一次云端订阅查询得到的账户信息快照。
|
|
type AccountProfile struct {
|
|
AccountType string
|
|
SubscriptionID string
|
|
ServiceName string
|
|
PaymentModel string
|
|
SubscriptionTier string
|
|
PromotionStatus string
|
|
PromotionAmount float32
|
|
PromotionExpires *time.Time
|
|
}
|
|
|
|
// ClassifyAccount 按订阅字段判定账户类别:
|
|
// - paymentModel 非空且不是 FREE_TRIAL:付费;
|
|
// - paymentModel 为 FREE_TRIAL 时,promotion ACTIVE 或 tier FREE_AND_TRIAL
|
|
// 判为试用;promotion EXPIRED 或 tier FREE 判为免费(试用权益已结束);
|
|
// - 其余情况无法判定。
|
|
func ClassifyAccount(paymentModel, subscriptionTier, promotionStatus string) string {
|
|
pm := strings.ToUpper(strings.TrimSpace(paymentModel))
|
|
tier := strings.ToUpper(strings.TrimSpace(subscriptionTier))
|
|
promo := strings.ToUpper(strings.TrimSpace(promotionStatus))
|
|
if pm != "" && pm != "FREE_TRIAL" {
|
|
return model.AccountTypePaid
|
|
}
|
|
if pm == "FREE_TRIAL" {
|
|
switch {
|
|
case promo == "ACTIVE" || tier == "FREE_AND_TRIAL":
|
|
return model.AccountTypeTrial
|
|
case promo == "EXPIRED" || tier == "FREE":
|
|
return model.AccountTypeFree
|
|
}
|
|
}
|
|
return model.AccountTypeUnknown
|
|
}
|