2026-07-15 09:43:33 +08:00

208 lines
7.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 activitytemplate
const (
// ActivityTypeGiftChallenge 是当前原型对应的礼物挑战赛;类型字段保留,后续模板类型可复用同一生命周期框架。
ActivityTypeGiftChallenge = "gift_challenge"
StatusDraft = "draft"
StatusPublished = "published"
StatusDisabled = "disabled"
StatusArchived = "archived"
LifecycleDraft = "draft"
LifecycleScheduled = "scheduled"
LifecycleOngoing = "ongoing"
LifecycleEnded = "ended"
LifecycleDisabled = "disabled"
LifecycleArchived = "archived"
TaskTypeDailyVisit = "daily_visit"
TaskTypeGiftCount = "gift_count"
TaskTypeGiftCoinAmount = "gift_coin_amount"
BoardTypeDaily = "daily"
BoardTypeTotal = "total"
SharedAssetLocale = "*"
)
// Locale 是活动页的单语言文案。运行侧先匹配用户语言,再回退到英语,避免把后台内部名称暴露给客户端。
type Locale struct {
Locale string `json:"locale"`
Title string `json:"title"`
Rules string `json:"rules"`
}
// Gift 是参与任务和排行榜计分的礼物引用;礼物价格和上下架状态仍由礼物 owner 服务维护。
type Gift struct {
GiftID string `json:"gift_id"`
SortOrder int32 `json:"sort_order"`
Name string `json:"name"`
IconURL string `json:"icon_url"`
CoinPrice int64 `json:"coin_price"`
PriceVersion string `json:"price_version"`
}
// RewardItem is the safe client-facing projection copied from a wallet-owned pinned resource-group
// snapshot. It intentionally excludes grant strategies, admin IDs and mutable catalog metadata.
type RewardItem struct {
ItemType string `json:"item_type"`
ResourceID int64 `json:"resource_id"`
ResourceType string `json:"resource_type"`
Name string `json:"name"`
IconURL string `json:"icon_url"`
Quantity int64 `json:"quantity"`
DurationMS int64 `json:"duration_ms"`
WalletAssetType string `json:"wallet_asset_type"`
WalletAssetAmount int64 `json:"wallet_asset_amount"`
SortOrder int32 `json:"sort_order"`
}
type RewardSnapshot struct {
SourceGroupID int64 `json:"source_group_id"`
SnapshotID string `json:"snapshot_id"`
VersionNo int64 `json:"version_no"`
SnapshotHash string `json:"snapshot_hash"`
Name string `json:"name"`
Items []RewardItem `json:"items"`
}
// Task 是活动实例内的每日任务档位。奖励引用资源组,使复杂资产组合仍由 wallet-service 原子发放。
type Task struct {
TaskKey string `json:"task_key"`
TaskType string `json:"task_type"`
TargetValue int64 `json:"target_value"`
RewardResourceGroupID int64 `json:"reward_resource_group_id"`
SortOrder int32 `json:"sort_order"`
RewardSnapshot RewardSnapshot `json:"reward_snapshot"`
}
// RankReward 是一个不重叠的名次区间。区间使用闭区间,活动周期本身仍使用 [start_ms,end_ms)。
type RankReward struct {
BoardType string `json:"board_type"`
RankFrom int32 `json:"rank_from"`
RankTo int32 `json:"rank_to"`
ResourceGroupID int64 `json:"resource_group_id"`
SortOrder int32 `json:"sort_order"`
RewardSnapshot RewardSnapshot `json:"reward_snapshot"`
}
// Asset 是活动页素材清单Locale="*" 是共享素材,具体语言素材覆盖共享项。
type Asset struct {
AssetKey string `json:"asset_key"`
Locale string `json:"locale"`
URL string `json:"url"`
MediaType string `json:"media_type"`
SortOrder int32 `json:"sort_order"`
}
// Template 是运营后台称作“活动模版”的可排期活动实例。
// Revision 用于后台乐观锁PublishedVersion 指向最近一次发布形成的不可变完整快照,两者不能混用。
type Template struct {
AppCode string `json:"app_code"`
TemplateID string `json:"template_id"`
TemplateCode string `json:"template_code"`
Name string `json:"name"`
ActivityType string `json:"activity_type"`
Status string `json:"status"`
LifecycleStatus string `json:"lifecycle_status"`
StartMS int64 `json:"start_ms"`
EndMS int64 `json:"end_ms"`
AllRegions bool `json:"all_regions"`
RegionIDs []int64 `json:"region_ids"`
Locales []Locale `json:"locales"`
Gifts []Gift `json:"gifts"`
Tasks []Task `json:"tasks"`
DailyLeaderboardSize int32 `json:"daily_leaderboard_size"`
TotalLeaderboardSize int32 `json:"total_leaderboard_size"`
RankRewards []RankReward `json:"rank_rewards"`
Assets []Asset `json:"assets"`
DisplayConfigJSON string `json:"display_config_json"`
Revision int64 `json:"revision"`
PublishedVersion int64 `json:"published_version"`
CreatedByAdminID int64 `json:"created_by_admin_id"`
UpdatedByAdminID int64 `json:"updated_by_admin_id"`
PublishedByAdminID int64 `json:"published_by_admin_id"`
CreatedAtMS int64 `json:"created_at_ms"`
UpdatedAtMS int64 `json:"updated_at_ms"`
PublishedAtMS int64 `json:"published_at_ms"`
ArchivedAtMS int64 `json:"archived_at_ms"`
}
// Summary 是列表专用轻量投影,只附带区域范围,不加载规则、任务、榜单奖励和素材大字段。
type Summary struct {
AppCode string
TemplateID string
TemplateCode string
Name string
ActivityType string
Status string
LifecycleStatus string
StartMS int64
EndMS int64
AllRegions bool
RegionIDs []int64
Revision int64
PublishedVersion int64
CreatedByAdminID int64
UpdatedByAdminID int64
CreatedAtMS int64
UpdatedAtMS int64
}
// ListQuery 是后台列表筛选。Status 同时接受持久状态和 scheduled/ongoing/ended 生命周期状态。
type ListQuery struct {
Keyword string
Status string
RegionID *int64
AllRegions *bool
StartMS int64
EndMS int64
Page int32
PageSize int32
NowMS int64
}
// UpdateCommand 承载整份配置替换;子配置必须和主表在一个事务里提交,避免读到半份模板。
type UpdateCommand struct {
Template Template
ExpectedRevision int64
OperatorAdminID int64
}
// StatusCommand 是发布、停用和软归档的乐观锁命令。
type StatusCommand struct {
TemplateID string
Status string
ExpectedRevision int64
OperatorAdminID int64
RewardSnapshots map[int64]RewardSnapshot
}
// Version 是一次发布的不可变快照。Snapshot 让后台可以审阅历史版本,运行侧也能按版本稳定读取配置。
type Version struct {
TemplateID string
VersionNo int64
Snapshot Template
PublishedByAdminID int64
PublishedAtMS int64
RuntimeFromMS int64
RuntimeToMS int64
}
// CloneCommand 明确复制源版本和目标业务编码;源版本为 0 时复制当前编辑态配置。
type CloneCommand struct {
SourceTemplateID string
SourceVersion int64
TemplateCode string
Name string
OperatorAdminID int64
}
// ValidationIssue 是可绑定到表单字段的稳定校验结果Code 给前端做国际化Message 便于后台直接展示。
type ValidationIssue struct {
Field string
Code string
Message string
}