Files
affiliate_dash/backend/internal/service/rock_package_link.go
T

50 lines
1.4 KiB
Go

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
}