package client import ( "context" "fmt" "dubbo.apache.org/dubbo-go/v3/client" _ "dubbo.apache.org/dubbo-go/v3/imports" assetPb "github.com/topfans/backend/pkg/proto/asset" "go.uber.org/zap" ) // AssetClient Asset Service RPC 客户端 type AssetClient struct { client assetPb.AssetService logger *zap.Logger } // NewAssetClient 创建 Asset Service RPC 客户端 func NewAssetClient(serviceURL string, logger *zap.Logger) (*AssetClient, error) { cli, err := client.NewClient( client.WithClientURL(serviceURL), ) if err != nil { return nil, fmt.Errorf("failed to create dubbo client: %w", err) } // 创建服务客户端 assetClient, err := assetPb.NewAssetService(cli) if err != nil { return nil, fmt.Errorf("failed to create asset service client: %w", err) } return &AssetClient{ client: assetClient, logger: logger, }, nil } // GetAsset 获取资产信息(需要权限验证) func (c *AssetClient) GetAsset(ctx context.Context, req *assetPb.GetAssetRequest) (*assetPb.GetAssetResponse, error) { resp, err := c.client.GetAsset(ctx, req) if err != nil { c.logger.Error("Failed to get asset", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil } // GetAssetForRPC 获取资产信息(内部RPC调用,无权限验证) func (c *AssetClient) GetAssetForRPC(ctx context.Context, req *assetPb.GetAssetForRPCRequest) (*assetPb.GetAssetForRPCResponse, error) { resp, err := c.client.GetAssetForRPC(ctx, req) if err != nil { c.logger.Error("Failed to get asset for RPC", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil } // LikeAsset 点赞资产 func (c *AssetClient) LikeAsset(ctx context.Context, req *assetPb.LikeAssetRequest) (*assetPb.LikeAssetResponse, error) { resp, err := c.client.LikeAsset(ctx, req) if err != nil { c.logger.Error("Failed to like asset", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil } // UnlikeAsset 取消点赞资产 func (c *AssetClient) UnlikeAsset(ctx context.Context, req *assetPb.UnlikeAssetRequest) (*assetPb.UnlikeAssetResponse, error) { resp, err := c.client.UnlikeAsset(ctx, req) if err != nil { c.logger.Error("Failed to unlike asset", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil } // CheckAssetLike 检查是否已点赞资产 func (c *AssetClient) CheckAssetLike(ctx context.Context, req *assetPb.CheckAssetLikeRequest) (*assetPb.CheckAssetLikeResponse, error) { resp, err := c.client.CheckAssetLike(ctx, req) if err != nil { c.logger.Error("Failed to check asset like", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil } // GetAssetLikes 获取资产点赞列表 func (c *AssetClient) GetAssetLikes(ctx context.Context, req *assetPb.GetAssetLikesRequest) (*assetPb.GetAssetLikesResponse, error) { resp, err := c.client.GetAssetLikes(ctx, req) if err != nil { c.logger.Error("Failed to get asset likes", zap.Error(err), zap.Int64("asset_id", req.AssetId), ) return nil, err } return resp, nil }