193 lines
5.6 KiB
Go
193 lines
5.6 KiB
Go
package provider
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
appErrors "github.com/topfans/backend/pkg/errors"
|
|
"github.com/topfans/backend/pkg/logger"
|
|
pb "github.com/topfans/backend/pkg/proto/activity"
|
|
pbCommon "github.com/topfans/backend/pkg/proto/common"
|
|
"github.com/topfans/backend/services/activityService/service"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// ActivityProvider 活动服务Provider实现
|
|
// 实现 Triple 协议生成的 ActivityServiceHandler 接口
|
|
type ActivityProvider struct {
|
|
activityService service.ActivityService
|
|
}
|
|
|
|
// 确保 ActivityProvider 实现了 ActivityServiceHandler 接口
|
|
var _ pb.ActivityServiceHandler = (*ActivityProvider)(nil)
|
|
|
|
// NewActivityProvider 创建活动服务Provider实例
|
|
func NewActivityProvider(activityService service.ActivityService) *ActivityProvider {
|
|
return &ActivityProvider{
|
|
activityService: activityService,
|
|
}
|
|
}
|
|
|
|
// GetActivityList 获取活动列表
|
|
func (p *ActivityProvider) GetActivityList(ctx context.Context, req *pb.GetActivityListRequest) (*pb.GetActivityListResponse, error) {
|
|
logger.Logger.Info("Received GetActivityList request",
|
|
zap.Int64("star_id", req.StarId),
|
|
zap.String("status", req.Status),
|
|
zap.Int32("page", req.Page),
|
|
zap.Int32("page_size", req.PageSize),
|
|
)
|
|
|
|
// 调用Service层
|
|
resp, err := p.activityService.GetActivityList(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("GetActivityList failed", zap.Error(err))
|
|
return &pb.GetActivityListResponse{
|
|
Base: &pbCommon.BaseResponse{
|
|
Code: appErrors.ToStatusCode(err),
|
|
Message: err.Error(),
|
|
Timestamp: time.Now().UnixMilli(),
|
|
},
|
|
}, err
|
|
}
|
|
|
|
logger.Logger.Debug("GetActivityList successful",
|
|
zap.Int("activities_count", len(resp.Activities)),
|
|
)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// GetActivity 获取活动详情
|
|
func (p *ActivityProvider) GetActivity(ctx context.Context, req *pb.GetProgressRequest) (*pb.Activity, error) {
|
|
logger.Logger.Info("Received GetActivity request",
|
|
zap.Int64("activity_id", req.ActivityId),
|
|
)
|
|
|
|
// 调用Service层
|
|
activity, err := p.activityService.GetActivity(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("GetActivity failed", zap.Error(err))
|
|
if err == appErrors.ErrActivityNotFound {
|
|
return nil, appErrors.ErrActivityNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
logger.Logger.Debug("GetActivity successful",
|
|
zap.Int64("activity_id", activity.Id),
|
|
)
|
|
|
|
return activity, nil
|
|
}
|
|
|
|
// GetActivityItems 获取活动道具列表
|
|
func (p *ActivityProvider) GetActivityItems(ctx context.Context, req *pb.GetProgressRequest) (*pb.ActivityItemsResponse, error) {
|
|
logger.Logger.Info("Received GetActivityItems request",
|
|
zap.Int64("activity_id", req.ActivityId),
|
|
)
|
|
|
|
// 调用Service层
|
|
items, err := p.activityService.GetActivityItems(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("GetActivityItems failed", zap.Error(err))
|
|
return &pb.ActivityItemsResponse{
|
|
Items: []*pb.ActivityItem{},
|
|
}, err
|
|
}
|
|
|
|
logger.Logger.Debug("GetActivityItems successful",
|
|
zap.Int("items_count", len(items)),
|
|
)
|
|
|
|
return &pb.ActivityItemsResponse{
|
|
Items: items,
|
|
}, nil
|
|
}
|
|
|
|
// GetProgress 获取活动进度
|
|
func (p *ActivityProvider) GetProgress(ctx context.Context, req *pb.GetProgressRequest) (*pb.GetProgressResponse, error) {
|
|
logger.Logger.Info("Received GetProgress request",
|
|
zap.Int64("activity_id", req.ActivityId),
|
|
)
|
|
|
|
// 调用Service层
|
|
resp, err := p.activityService.GetProgress(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("GetProgress failed", zap.Error(err))
|
|
return &pb.GetProgressResponse{
|
|
Base: &pbCommon.BaseResponse{
|
|
Code: appErrors.ToStatusCode(err),
|
|
Message: err.Error(),
|
|
Timestamp: time.Now().UnixMilli(),
|
|
},
|
|
}, err
|
|
}
|
|
|
|
logger.Logger.Debug("GetProgress successful",
|
|
zap.Int64("current_progress", resp.CurrentProgress),
|
|
zap.Int64("target_progress", resp.TargetProgress),
|
|
)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// PurchaseItem 购买道具
|
|
func (p *ActivityProvider) PurchaseItem(ctx context.Context, req *pb.PurchaseItemRequest) (*pb.PurchaseItemResponse, error) {
|
|
logger.Logger.Info("Received PurchaseItem request",
|
|
zap.Int64("activity_id", req.ActivityId),
|
|
zap.String("item_type", req.ItemType),
|
|
zap.Int32("quantity", req.Quantity),
|
|
zap.Int64("star_id", req.StarId),
|
|
)
|
|
|
|
// 调用Service层
|
|
resp, err := p.activityService.PurchaseItem(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("PurchaseItem failed", zap.Error(err))
|
|
return &pb.PurchaseItemResponse{
|
|
Base: &pbCommon.BaseResponse{
|
|
Code: appErrors.ToStatusCode(err),
|
|
Message: err.Error(),
|
|
Timestamp: time.Now().UnixMilli(),
|
|
},
|
|
}, err
|
|
}
|
|
|
|
logger.Logger.Info("PurchaseItem successful",
|
|
zap.Int64("total_crystal_spent", resp.TotalCrystalSpent),
|
|
zap.Int64("total_contribution", resp.TotalContribution),
|
|
zap.Int64("remaining_balance", resp.RemainingBalance),
|
|
)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// GetContributionRanking 获取贡献点排名
|
|
func (p *ActivityProvider) GetContributionRanking(ctx context.Context, req *pb.ContributionRankingRequest) (*pb.ContributionRankingResponse, error) {
|
|
logger.Logger.Info("Received GetContributionRanking request",
|
|
zap.Int64("activity_id", req.ActivityId),
|
|
zap.Int64("star_id", req.StarId),
|
|
zap.Int32("page", req.Page),
|
|
zap.Int32("page_size", req.PageSize),
|
|
)
|
|
|
|
// 调用Service层
|
|
resp, err := p.activityService.GetContributionRanking(ctx, req)
|
|
if err != nil {
|
|
logger.Logger.Error("GetContributionRanking failed", zap.Error(err))
|
|
return &pb.ContributionRankingResponse{
|
|
Base: &pbCommon.BaseResponse{
|
|
Code: appErrors.ToStatusCode(err),
|
|
Message: err.Error(),
|
|
Timestamp: time.Now().UnixMilli(),
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
logger.Logger.Debug("GetContributionRanking successful",
|
|
zap.Int("items_count", len(resp.Items)),
|
|
)
|
|
|
|
return resp, nil
|
|
}
|