feat(mq): task:event task type + business event constants
- pkg/mq/tasks/task_events.go (new): business event constants
- EventDailyLogin, EventDailyBrowseAsset, EventDailyMint, EventDailyPlaceAsset
- TaskEventPayload{UserID, StarID, EventType}
- pkg/mq/tasks/registry.go: +TypeTaskEvent = 'task:event'
Spec §3 F3 separation: business event constants live in task_events.go;
MQ task type strings live in registry.go (revenue:/gallery:/* style).
Consumed by:
- assetService/mq/producer.go (Phase F.1 emitter for daily_mint)
- frontend pages (Phase F.2 callers via task-api.js reportEvent -> gateway -> task:event)
- taskService/mq/consumer.go (Phase E consumer -> ProcessTaskEvent)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
e2f1122cc8
commit
ecdd96da5b
@ -60,6 +60,12 @@ const (
|
||||
// 重试: 3 次,handler 内按 exhibition_id 幂等
|
||||
TypeUserAccumulateHours = "user:accumulate-hours"
|
||||
|
||||
// TypeTaskEvent 通用业务事件入口(daily-task 引擎消费)
|
||||
// 生产者: assetService(铸造成功处 emit daily_mint) + 前端 reportEvent RPC(daily_login/daily_browse_asset/daily_place_asset)
|
||||
// 消费者: taskService
|
||||
// 重试: 3 次,handler 内按 user_id+star_id+task_key 幂等(pending→completed 一次性)
|
||||
TypeTaskEvent = "task:event"
|
||||
|
||||
// ===== Phase 2+: 预留(本期不实现,仅占位方便后续查阅)=====
|
||||
|
||||
TypeAssetAccumulateHours = "asset:accumulate-hours"
|
||||
|
||||
47
backend/pkg/mq/tasks/task_events.go
Normal file
47
backend/pkg/mq/tasks/task_events.go
Normal file
@ -0,0 +1,47 @@
|
||||
// Package tasks 业务事件枚举与 task:event payload 定义。
|
||||
//
|
||||
// 与 registry.go 的关系(spec §3 F3 修正版):
|
||||
// - registry.go 收拢所有 MQ TaskType 字符串常量与 Phase 1 Payload 结构
|
||||
// - 本文件专注"业务事件枚举"(task:event payload.EventType 字段取值)
|
||||
// 供 task_definitions.trigger_event 列引用;与 MQ 任务类型分层
|
||||
//
|
||||
// 业务事件归属(spec §3 表):
|
||||
// - daily_login 前端 Header.vue reportEvent
|
||||
// - daily_browse_asset 前端 asset-detail.vue reportEvent(迁移自 exhibition.vue 错位实现)
|
||||
// - daily_mint 后端 assetService/mint_service.go 铸造成功 emit
|
||||
// - daily_place_asset 前端 myWorks.vue placeAssetToGalleryApi 成功后 reportEvent
|
||||
package tasks
|
||||
|
||||
// ===== 业务事件枚举 =====
|
||||
//
|
||||
// 取值即 task_definitions.trigger_event 列的合法值;
|
||||
// 新增事件 = 在此加常量 + 在该行为的源头 emit 一次(spec §3 治理规则 #2)。
|
||||
|
||||
const (
|
||||
// EventDailyLogin 每日首次活跃(进入 home)。前端 Header.vue 触发。
|
||||
EventDailyLogin = "daily_login"
|
||||
|
||||
// EventDailyBrowseAsset 每日首次浏览藏品详情。前端 asset-detail.vue onLoad 触发。
|
||||
// 修复前:exhibition.vue:1566 错位实现。
|
||||
EventDailyBrowseAsset = "daily_browse_asset"
|
||||
|
||||
// EventDailyMint 每日首次铸造。后端 assetService/mint_service.go 铸造成功 emit。
|
||||
EventDailyMint = "daily_mint"
|
||||
|
||||
// EventDailyPlaceAsset 每日首次上架作品。前端 myWorks.vue placeAssetToGalleryApi 成功后触发。
|
||||
EventDailyPlaceAsset = "daily_place_asset"
|
||||
)
|
||||
|
||||
// ===== task:event payload =====
|
||||
//
|
||||
// TaskEventPayload 是一条 task:event MQ 消息的 body。
|
||||
// 由 assetService / 前端 reportEvent → gateway → taskService consumer 链路消费。
|
||||
|
||||
// TaskEventPayload task:event MQ 消息 payload。
|
||||
// 来源:assetService 铸造成功处 / 前端 reportEvent RPC → gateway 转发。
|
||||
// 消费者:taskService MQ consumer → DailyTaskService.ProcessTaskEvent。
|
||||
type TaskEventPayload struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
StarID int64 `json:"star_id"`
|
||||
EventType string `json:"event_type"` // 取自 EventDailyXxx 常量;task_definitions.trigger_event 匹配键
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user