// Package broadcast 定义 activity-service 拥有的 IM 播报领域事实。 // 这里的对象只描述“需要向哪个腾讯群投递什么消息”,不承载红包金额扣减或房间状态事实。 package broadcast const ( // ScopeGlobal 表示 App 内全局群;使用频率低,适合全服运营公告或极少数全服事件。 ScopeGlobal = "global" // ScopeRegion 表示用户所在区域群;贵重礼物、区域红包、区域运营通知默认走这个范围。 ScopeRegion = "region" // TypeSuperGift 是贵重礼物播报,来源于 room-service 已提交的 RoomGiftSent 事实。 TypeSuperGift = "super_gift" // TypeRedPacket 是红包入口播报,资金事实必须由 wallet/red-packet 领域持久化。 TypeRedPacket = "red_packet" // 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 }