2026-05-14 17:44:16 +08:00

72 lines
2.4 KiB
Go

package integration
import (
"context"
"time"
activityv1 "hyapp.local/api/proto/activity/v1"
"hyapp/services/cron-service/internal/scheduler"
)
// ActivityCronClient delegates activity-owned background batches to activity-service.
type ActivityCronClient struct {
client activityv1.ActivityCronServiceClient
}
// NewActivityCronClient creates scheduler handlers backed by activity-service gRPC.
func NewActivityCronClient(client activityv1.ActivityCronServiceClient) *ActivityCronClient {
return &ActivityCronClient{client: client}
}
// ProcessMessageFanoutBatch handles message_fanout_jobs.
func (c *ActivityCronClient) ProcessMessageFanoutBatch(ctx context.Context, req scheduler.BatchRequest) (scheduler.BatchResult, error) {
resp, err := c.client.ProcessMessageFanoutBatch(ctx, activityCronBatchRequest(req))
if err != nil {
return scheduler.BatchResult{}, err
}
return activityCronBatchResult(resp), nil
}
// ProcessLevelRewardBatch handles growth_level_reward_jobs.
func (c *ActivityCronClient) ProcessLevelRewardBatch(ctx context.Context, req scheduler.BatchRequest) (scheduler.BatchResult, error) {
resp, err := c.client.ProcessLevelRewardBatch(ctx, activityCronBatchRequest(req))
if err != nil {
return scheduler.BatchResult{}, err
}
return activityCronBatchResult(resp), nil
}
// ProcessAchievementRewardBatch handles achievement_reward_jobs.
func (c *ActivityCronClient) ProcessAchievementRewardBatch(ctx context.Context, req scheduler.BatchRequest) (scheduler.BatchResult, error) {
resp, err := c.client.ProcessAchievementRewardBatch(ctx, activityCronBatchRequest(req))
if err != nil {
return scheduler.BatchResult{}, err
}
return activityCronBatchResult(resp), nil
}
func activityCronBatchRequest(req scheduler.BatchRequest) *activityv1.CronBatchRequest {
return &activityv1.CronBatchRequest{
Meta: &activityv1.RequestMeta{
RequestId: req.RunID,
Caller: "cron-service",
SentAtMs: time.Now().UnixMilli(),
AppCode: req.AppCode,
},
RunId: req.RunID,
WorkerId: req.WorkerID,
BatchSize: int32(req.BatchSize),
LockTtlMs: req.LockTTL.Milliseconds(),
}
}
func activityCronBatchResult(resp *activityv1.CronBatchResponse) scheduler.BatchResult {
return scheduler.BatchResult{
ClaimedCount: int(resp.GetClaimedCount()),
ProcessedCount: int(resp.GetProcessedCount()),
SuccessCount: int(resp.GetSuccessCount()),
FailureCount: int(resp.GetFailureCount()),
HasMore: resp.GetHasMore(),
}
}