spark-server/internal/module/client/logic/plans.go
DESKTOP-L8OUL9F\gfl0034 d293de34f5 实现 TCP READ(命令 8),已读水位前进时清未读并通知其他设备。
补上会员价格按平台筛选,并修正广场机器人测试的 Feed 调用,使 go test 能通过。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 18:22:08 +08:00

64 lines
1.6 KiB
Go

package logic
import (
"context"
"strings"
"spark-server/internal/module/client/entity"
"spark-server/internal/pkg/i18n"
)
func canonicalHealthPackage(pkg string) string {
return entity.CanonicalHealthPackage(pkg)
}
func normalizePlatform(platform string) string {
switch strings.ToLower(strings.TrimSpace(platform)) {
case entity.PlatformIOS, "iphone", "ipad":
return entity.PlatformIOS
case entity.PlatformAndroid:
return entity.PlatformAndroid
case entity.PlatformWeb:
return entity.PlatformWeb
default:
return ""
}
}
func filterPlansByPlatform(items []entity.SubscriptionPlan, platform string) []entity.SubscriptionPlan {
platform = normalizePlatform(platform)
if platform == "" || len(items) == 0 {
return items
}
exact := make([]entity.SubscriptionPlan, 0, len(items))
fallback := make([]entity.SubscriptionPlan, 0, len(items))
for _, p := range items {
got := normalizePlatform(p.Platform)
if got == platform {
exact = append(exact, p)
} else if got == "" {
fallback = append(fallback, p)
}
}
if len(exact) > 0 {
return exact
}
return fallback
}
func (s *Service) clientPlans(ctx context.Context, lang, packageName, platform string) ([]entity.SubscriptionPlan, error) {
plans, err := s.repo.ListPlans(ctx, lang, packageName)
if err != nil {
return nil, err
}
picked := filterPlansByPlatform(plans, platform)
if len(picked) > 0 || lang == string(i18n.ZhCN) {
return picked, nil
}
plans, err = s.repo.ListPlans(ctx, string(i18n.ZhCN), packageName)
if err != nil {
return nil, err
}
return filterPlansByPlatform(plans, platform), nil
}