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")