修复IM消息
This commit is contained in:
parent
88584f1329
commit
ce3ffe666d
@ -290,7 +290,7 @@ func (s *Service) processDrawOutbox(ctx context.Context, event domain.DrawOutbox
|
||||
}
|
||||
|
||||
func (s *Service) publishLuckyGiftDrawn(ctx context.Context, payload luckyGiftDrawnPayload, options WorkerOptions) error {
|
||||
body, err := json.Marshal(payload)
|
||||
body, err := json.Marshal(luckyGiftRoomMessagePayload(payload))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -448,6 +448,36 @@ func shouldPublishLuckyGiftRegionBroadcast(payload luckyGiftDrawnPayload) bool {
|
||||
return payload.VisibleRegionID > 0 && payload.EffectiveRewardCoins > 0 && payload.MultiplierPPM >= 1_000_000
|
||||
}
|
||||
|
||||
func luckyGiftRoomMessagePayload(payload luckyGiftDrawnPayload) map[string]any {
|
||||
return map[string]any{
|
||||
"event_type": "lucky_gift_drawn",
|
||||
"event_id": payload.EventID,
|
||||
"app_code": payload.AppCode,
|
||||
"draw_id": payload.DrawID,
|
||||
"command_id": payload.CommandID,
|
||||
"pool_id": payload.PoolID,
|
||||
"room_id": payload.RoomID,
|
||||
"gift_id": payload.GiftID,
|
||||
"gift_count": payload.GiftCount,
|
||||
"user_id": payload.UserID,
|
||||
"sender_user_id": payload.SenderUserID,
|
||||
"target_user_id": payload.TargetUserID,
|
||||
"visible_region_id": payload.VisibleRegionID,
|
||||
"coin_spent": payload.CoinSpent,
|
||||
"rule_version": payload.RuleVersion,
|
||||
"experience_pool": payload.ExperiencePool,
|
||||
"selected_tier_id": payload.SelectedTierID,
|
||||
"multiplier_ppm": payload.MultiplierPPM,
|
||||
"base_reward_coins": payload.BaseRewardCoins,
|
||||
"room_atmosphere_reward_coins": payload.RoomAtmosphereRewardCoins,
|
||||
"activity_subsidy_coins": payload.ActivitySubsidyCoins,
|
||||
"effective_reward_coins": payload.EffectiveRewardCoins,
|
||||
"stage_feedback": payload.StageFeedback,
|
||||
"high_multiplier": payload.HighMultiplier,
|
||||
"created_at_ms": payload.CreatedAtMS,
|
||||
}
|
||||
}
|
||||
|
||||
func luckyGiftRegionBroadcastPayload(payload luckyGiftDrawnPayload, sentAtMS int64) map[string]any {
|
||||
return map[string]any{
|
||||
"event_type": "lucky_gift_drawn",
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@ -160,6 +161,58 @@ func TestProcessPendingBatchDrawOutboxCreditsWalletOnceAndGrantsAllDraws(t *test
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishLuckyGiftDrawnOmitsBatchDrawIDsFromRoomIM(t *testing.T) {
|
||||
drawIDs := make([]string, 0, 999)
|
||||
for index := 0; index < 999; index++ {
|
||||
drawIDs = append(drawIDs, fmt.Sprintf("lucky_draw_1780217057721_%016d", index))
|
||||
}
|
||||
publisher := &fakeLuckyGiftPublisher{}
|
||||
service := New(&fakeLuckyGiftRepository{}, WithRoomPublisher(publisher))
|
||||
payload := luckyGiftDrawnPayload{
|
||||
EventType: "lucky_gift_drawn",
|
||||
EventID: "lucky_gift_drawn:lucky_draw_1780217057721_0000000000000000",
|
||||
AppCode: "lalu",
|
||||
DrawID: drawIDs[0],
|
||||
DrawIDs: drawIDs,
|
||||
CommandID: "cmd-gift-batch",
|
||||
PoolID: "lucky",
|
||||
RoomID: "lalu_9aca4db6-35f0-4490-9cbc-1a452b7fa67d",
|
||||
GiftID: "31",
|
||||
GiftCount: 999,
|
||||
UserID: 42,
|
||||
SenderUserID: 42,
|
||||
TargetUserID: 99,
|
||||
VisibleRegionID: 210,
|
||||
CoinSpent: 99900,
|
||||
RuleVersion: 2,
|
||||
ExperiencePool: "advanced",
|
||||
SelectedTierID: "advanced_1x",
|
||||
MultiplierPPM: 1000000,
|
||||
BaseRewardCoins: 73983,
|
||||
RoomAtmosphereRewardCoins: 0,
|
||||
ActivitySubsidyCoins: 0,
|
||||
EffectiveRewardCoins: 73983,
|
||||
CreatedAtMS: 1780217057721,
|
||||
}
|
||||
|
||||
if err := service.publishLuckyGiftDrawn(context.Background(), payload, WorkerOptions{PublishTimeout: time.Second}); err != nil {
|
||||
t.Fatalf("publishLuckyGiftDrawn failed: %v", err)
|
||||
}
|
||||
if len(publisher.last.PayloadJSON) >= 12*1024 {
|
||||
t.Fatalf("room IM payload should stay below Tencent 12KB limit, got %d bytes", len(publisher.last.PayloadJSON))
|
||||
}
|
||||
var body map[string]any
|
||||
if err := json.Unmarshal(publisher.last.PayloadJSON, &body); err != nil {
|
||||
t.Fatalf("decode room IM payload failed: %v", err)
|
||||
}
|
||||
if _, exists := body["draw_ids"]; exists {
|
||||
t.Fatalf("room IM payload must not include internal draw_ids")
|
||||
}
|
||||
if body["draw_id"] != drawIDs[0] || body["event_id"] != payload.EventID || body["gift_count"].(float64) != 999 {
|
||||
t.Fatalf("room IM payload lost display fields: %+v", body)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProcessPendingDrawOutboxGrantsRewardWhenRoomIMFails(t *testing.T) {
|
||||
payload, _ := json.Marshal(map[string]any{
|
||||
"event_type": "lucky_gift_drawn",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user