package service import ( "context" "errors" "fmt" "net/url" "strings" "affiliate_dash/internal/model" ) // TokenPackageLinkResult 是 Token 所属上游打包页面的定位链接。 type TokenPackageLinkResult struct { PackageID int64 `json:"package_id"` ShareCode string `json:"share_code"` URL string `json:"url"` } // TokenPackageLink 返回 Token 所属上游包页面的跳转链接。 // 只对本地已保存分享码的新包生效;历史包不向上游反查。 func (s *RockService) TokenPackageLink(ctx context.Context, tokenID uint) (*TokenPackageLinkResult, error) { var token model.RockToken if err := s.db.WithContext(ctx).First(&token, tokenID).Error; err != nil { return nil, err } if token.PackageID == nil || *token.PackageID <= 0 { return nil, errors.New("该 Token 没有关联上游打包记录,无法跳转上游") } shareCode := strings.TrimSpace(token.PackageShareCode) if shareCode == "" { return nil, errors.New("该 Token 缺少上游包分享码(历史包不支持定位),无法跳转上游") } cfg, err := s.GetConfig(ctx) if err != nil { return nil, err } base := strings.TrimRight(strings.TrimSpace(cfg.BaseURL), "/") if base == "" { base = model.RockDefaultBaseURL } return &TokenPackageLinkResult{ PackageID: *token.PackageID, ShareCode: shareCode, URL: fmt.Sprintf("%s/#/package/%s", base, url.PathEscape(shareCode)), }, nil }