// Package broadcast 定义 activity-service 拥有的 IM 播报领域事实。 // 这里的对象只描述“需要向哪个腾讯群投递什么消息”,不承载红包金额扣减或房间状态事实。 package broadcast const ( // ScopeGlobal 表示 App 内全局群;使用频率低,适合全服运营公告或极少数全服事件。 ScopeGlobal = "global" // ScopeRegion 表示用户所在区域群;贵重礼物、区域红包、区域运营通知默认走这个范围。 ScopeRegion = "region" // ScopeRoom 表示当前语音房 IM 群。 ScopeRoom = "room" // TypeSuperGift 是贵重礼物播报,来源于 room-service 已提交的 RoomGiftSent 事实。 TypeSuperGift = "super_gift" // TypeRedPacket 是红包入口播报,资金事实必须由 wallet/red-packet 领域持久化。 TypeRedPacket = "red_packet" // TypeRoomRocket 是语音房火箭燃料满后的发射倒计时播报。 TypeRoomRocket = "room_rocket" // TypeRoomRocketReward 是语音房火箭发射后中奖明细房间播报。 TypeRoomRocketReward = "room_rocket_reward_granted" // TypeRoomPasswordChanged 是锁房状态变化的区域通知,客户端用它刷新房间锁状态入口。 TypeRoomPasswordChanged = "room_password_changed" // TypeLuckyGiftBigWin 是幸运礼物中奖区域飘屏;当前只让 10 倍及以上大奖进入播报 outbox。 TypeLuckyGiftBigWin = "lucky_gift_big_win" // StatusPending 表示消息已持久化,尚未被 worker claim。 StatusPending = "pending" // StatusDelivering 表示某个 worker 已抢占该记录,锁过期后允许其他 worker 接管。 StatusDelivering = "delivering" // StatusRetryable 表示上次腾讯 REST 失败,但未超过最大重试次数。 StatusRetryable = "retryable" // StatusDelivered 表示腾讯 REST 已接受消息,不代表每个客户端都已展示。 StatusDelivered = "delivered" // StatusFailed 表示达到最大重试次数,需要人工或后台补偿介入。 StatusFailed = "failed" // StatusSkipped 表示消费了上游事件但不满足播报策略,例如礼物价值未达阈值。 StatusSkipped = "skipped" ) // OutboxRecord 是一条持久化播报投递记录。 // event_id 是幂等键,group_id 是最终腾讯群目标,payload_json 是客户端渲染和点击跳转所需的完整业务负载。 type OutboxRecord struct { AppCode string EventID string Scope string GroupID string BroadcastType string PayloadJSON string Status string AttemptCount int NextRetryAtMS int64 LastError string LockedBy string LockedUntilMS int64 CreatedAtMS int64 UpdatedAtMS int64 } // PublishResult 描述一次幂等入队结果;Created=false 表示重复 event_id 命中已有记录。 type PublishResult struct { EventID string GroupID string Status string Created bool } // ProcessResult 汇总一次 worker 批处理结果,用于 cron/日志/监控判断是否需要继续拉下一批。 type ProcessResult struct { ClaimedCount int SuccessCount int FailureCount int HasMore bool } // ConsumeRoomEventResult 描述 room outbox 事实是否生成播报;跳过也是一种可观测消费结果。 type ConsumeRoomEventResult struct { EventID string Status string BroadcastEventID string BroadcastCreated bool } // RedPacketWalletEvent 是 wallet-service 已提交的红包资金事实。 type RedPacketWalletEvent struct { AppCode string EventID string EventType string TransactionID string CommandID string PayloadJSON string PacketID string PacketType string RoomID string RegionID int64 RegionCode string SenderUserID int64 SenderAccount string SenderNickname string SenderAvatar string TotalAmount int64 TotalCount int32 RemainingAmount int64 RemainingCount int32 RefundedAmount int64 Status string OpenAtMS int64 ExpiresAtMS int64 CreatedAtMS int64 } // RedPacketCreatedEvent keeps older tests and callers compiling while wallet red-packet facts are generalized. type RedPacketCreatedEvent = RedPacketWalletEvent