117 lines
3.1 KiB
Go
117 lines
3.1 KiB
Go
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
|
||
}
|