50 lines
1.4 KiB
Go
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
|
|
}
|