2026-07-06 12:43:40 +08:00

167 lines
4.5 KiB
Go

// Package message defines the App message tab inbox domain owned by activity-service.
package message
const (
// SectionUser is sourced from Tencent IM SDK and never persisted by this service.
SectionUser = "user"
// SectionSystem stores account, wallet, room and application notifications.
SectionSystem = "system"
// SectionActivity stores activity, reward and operational campaign notifications.
SectionActivity = "activity"
SourceTencentIMSDK = "tencent_im_sdk"
SourceBackend = "backend"
StatusVisible = "visible"
StatusRecalled = "recalled"
StatusHidden = "hidden"
StatusExpired = "expired"
FanoutStatusPending = "pending"
FanoutStatusRunning = "running"
FanoutStatusRetrying = "retrying"
FanoutStatusFailed = "failed"
FanoutStatusComplete = "completed"
TargetScopeSingleUser = "single_user"
TargetScopeUserIDs = "user_ids"
TargetScopeRegion = "region"
TargetScopeCountry = "country"
TargetScopeAllActiveUsers = "all_active_users"
TargetScopeAllRegistered = "all_registered_users"
)
// TabSection is the message tab summary returned to App clients.
type TabSection struct {
Section string
Title string
UnreadCount int64
Source string
}
// InboxMessage is the user-visible snapshot stored in user_inbox_messages.
type InboxMessage struct {
AppCode string
MessageID string
UserID int64
MessageType string
Producer string
ProducerEventID string
ProducerEventType string
AggregateType string
AggregateID string
TemplateID string
TemplateVersion string
Title string
Summary string
Body string
IconURL string
ImageURL string
ActionType string
ActionParam string
Priority int32
Status string
ReadAtMS int64
DeletedAtMS int64
SentAtMS int64
ExpireAtMS int64
MetadataJSON string
CreatedAtMS int64
UpdatedAtMS int64
}
// Read reports whether the user has marked the message as read.
func (m InboxMessage) Read() bool {
return m.ReadAtMS > 0
}
// MessageTemplate is an active server-owned content template snapshot source.
type MessageTemplate struct {
AppCode string
TemplateID string
TemplateVersion string
MessageType string
Locale string
Title string
Summary string
Body string
IconURL string
ImageURL string
ActionType string
ActionParam string
Status string
CreatedBy string
CreatedAtMS int64
UpdatedAtMS int64
}
// ListQuery is the stable cursor query for system/activity inbox lists.
type ListQuery struct {
UserID int64
Section string
Limit int
CursorSentAtMS int64
CursorMessageID string
NowMS int64
}
// CreateInput carries a validated single-user inbox creation command.
type CreateInput struct {
TargetUserID int64
Producer string
ProducerEventID string
ProducerEventType string
MessageType string
AggregateType string
AggregateID string
TemplateID string
TemplateVersion string
Title string
Summary string
Body string
IconURL string
ImageURL string
ActionType string
ActionParam string
Priority int32
SentAtMS int64
ExpireAtMS int64
MetadataJSON string
}
// FanoutJob stores a background fanout command without executing user selection in the request path.
type FanoutJob struct {
AppCode string
JobID string
CommandID string
MessageType string
TargetScope string
TargetFilterJSON string
TemplateSnapshotJSON string
Status string
AttemptCount int32
CursorUserID int64
TotalCount int64
SuccessCount int64
FailureCount int64
BatchSize int32
NextRunAtMS int64
LockedBy string
LockedUntilMS int64
ErrorMessage string
CreatedBy string
CreatedAtMS int64
UpdatedAtMS int64
}
// CreateFanoutInput is the validated admin or producer command for fanout job creation.
type CreateFanoutInput struct {
CommandID string
MessageType string
TargetScope string
TargetFilterJSON string
TemplateSnapshotJSON string
BatchSize int32
CreatedBy string
}