45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/topfans/backend/pkg/models"
|
|
)
|
|
|
|
// AssetClient 验证 asset 目标存在 + 返回 owner_uid / star_id
|
|
type AssetClient struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewAssetClient(db *gorm.DB) *AssetClient {
|
|
return &AssetClient{db: db}
|
|
}
|
|
|
|
// GetAssetForReport 验证目标存在 + 返回 (owner_uid, star_id, snapshot map)
|
|
func (c *AssetClient) GetAssetForReport(ctx context.Context, assetID int64) (ownerUID int64, starID int64, snapshot map[string]interface{}, err error) {
|
|
var asset models.Asset
|
|
if err = c.db.WithContext(ctx).First(&asset, assetID).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return 0, 0, nil, ErrTargetNotFound
|
|
}
|
|
return 0, 0, nil, err
|
|
}
|
|
starID = asset.StarID
|
|
snapshot = map[string]interface{}{
|
|
"asset_id": asset.ID,
|
|
"owner_uid": asset.OwnerUID,
|
|
"name": asset.Name,
|
|
"cover_url": asset.CoverURL,
|
|
"description": asset.Description,
|
|
"star_id": asset.StarID,
|
|
"snapshot_at": time.Now().UnixMilli(),
|
|
}
|
|
return asset.OwnerUID, starID, snapshot, nil
|
|
}
|
|
|
|
var ErrTargetNotFound = errors.New("target not found")
|