topfans/backend/services/galleryService/client/task_rpc_client.go

103 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package client
import (
"context"
"errors"
"fmt"
"github.com/topfans/backend/pkg/logger"
pbCommon "github.com/topfans/backend/pkg/proto/common"
pbTask "github.com/topfans/backend/pkg/proto/task"
"go.uber.org/zap"
)
// TaskRPCClient Task Service RPC客户端接口
type TaskRPCClient interface {
// OnExhibitionCompleted 当展位到期完成时调用,创建展示收益记录
OnExhibitionCompleted(ctx context.Context, req *OnExhibitionCompletedRequest) (*OnExhibitionCompletedResponse, error)
}
// OnExhibitionCompletedRequest 展位完成请求
type OnExhibitionCompletedRequest struct {
ExhibitionId int64
AssetId int64
SlotId int64
OccupierUid int64
OccupierStarId int64
SlotOwnerUid int64
StartTime int64
ExpireAt int64
CrystalAmount int64
LikeCount int32 // 点赞数用于taskService根据资产等级重新计算收益
}
// OnExhibitionCompletedResponse 展位完成响应
type OnExhibitionCompletedResponse struct {
RevenueRecordId int64
}
// taskRPCClient Task Service RPC客户端实现
type taskRPCClient struct {
client pbTask.TaskInternalService
}
// NewTaskRPCClient 创建Task Service RPC客户端
func NewTaskRPCClient(client pbTask.TaskInternalService) TaskRPCClient {
return &taskRPCClient{
client: client,
}
}
// OnExhibitionCompleted 当展位到期完成时调用,创建展示收益记录
func (c *taskRPCClient) OnExhibitionCompleted(ctx context.Context, req *OnExhibitionCompletedRequest) (*OnExhibitionCompletedResponse, error) {
logger.Logger.Debug("Calling TaskService.OnExhibitionCompleted",
zap.Int64("exhibition_id", req.ExhibitionId),
zap.Int64("asset_id", req.AssetId),
zap.Int64("slot_id", req.SlotId),
zap.Int64("occupier_uid", req.OccupierUid),
zap.Int64("slot_owner_uid", req.SlotOwnerUid),
zap.Int64("crystal_amount", req.CrystalAmount))
if c.client == nil {
logger.Logger.Error("TaskRPCClient: client is nil")
return nil, errors.New("task client is nil")
}
pbReq := &pbTask.OnExhibitionCompletedRequest{
ExhibitionId: req.ExhibitionId,
AssetId: req.AssetId,
SlotId: req.SlotId,
OccupierUid: req.OccupierUid,
OccupierStarId: req.OccupierStarId,
SlotOwnerUid: req.SlotOwnerUid,
StartTime: req.StartTime,
ExpireAt: req.ExpireAt,
CrystalAmount: req.CrystalAmount,
LikeCount: req.LikeCount,
}
resp, err := c.client.OnExhibitionCompleted(ctx, pbReq)
if err != nil {
logger.Logger.Error("Failed to call TaskService.OnExhibitionCompleted",
zap.Int64("exhibition_id", req.ExhibitionId),
zap.Error(err))
return nil, fmt.Errorf("call TaskService.OnExhibitionCompleted failed: %w", err)
}
if resp.Base.Code != pbCommon.StatusCode_STATUS_OK {
logger.Logger.Warn("TaskService.OnExhibitionCompleted returned error",
zap.Int64("exhibition_id", req.ExhibitionId),
zap.Int32("code", int32(resp.Base.Code)),
zap.String("message", resp.Base.Message))
return nil, fmt.Errorf("TaskService.OnExhibitionCompleted error: %s", resp.Base.Message)
}
logger.Logger.Info("TaskService.OnExhibitionCompleted successful",
zap.Int64("exhibition_id", req.ExhibitionId),
zap.Int64("revenue_record_id", resp.RevenueRecordId))
return &OnExhibitionCompletedResponse{
RevenueRecordId: resp.RevenueRecordId,
}, nil
}