99 lines
3.5 KiB
Go
99 lines
3.5 KiB
Go
// 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
|