2026-05-29 19:56:14 +08:00

99 lines
3.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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"
// TypeRoomTreasure 是语音房宝箱满能量后的开箱倒计时播报。
TypeRoomTreasure = "room_treasure"
// TypeLuckyGiftBigWin 是幸运礼物中奖区域飘屏;当前默认 1 倍及以上即进入播报 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
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