127 lines
8.2 KiB
Go
127 lines
8.2 KiB
Go
package mysql
|
||
|
||
import "context"
|
||
|
||
// ensureActivityTemplateTables mirrors deploy/mysql/migrations/010_activity_templates.sql for explicitly enabled local auto-migrate.
|
||
// Production still applies the numbered SQL migration so schema history remains reviewable and deterministic.
|
||
func (r *Repository) ensureActivityTemplateTables(ctx context.Context) error {
|
||
statements := []string{
|
||
`CREATE TABLE IF NOT EXISTS activity_templates (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
template_code VARCHAR(64) NOT NULL COMMENT 'App 内唯一业务编码',
|
||
name VARCHAR(128) NOT NULL COMMENT '后台内部名称',
|
||
activity_type VARCHAR(32) NOT NULL DEFAULT 'gift_challenge' COMMENT '活动类型',
|
||
status VARCHAR(24) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/disabled/archived',
|
||
start_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动开始,UTC epoch ms,包含',
|
||
end_ms BIGINT NOT NULL DEFAULT 0 COMMENT '活动结束,UTC epoch ms,不包含',
|
||
all_regions BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否覆盖全部区域',
|
||
daily_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '日榜最多展示人数',
|
||
total_leaderboard_size INT NOT NULL DEFAULT 100 COMMENT '总榜最多展示人数',
|
||
display_config_json JSON NOT NULL COMMENT '客户端布局和样式配置',
|
||
revision BIGINT NOT NULL DEFAULT 1 COMMENT '后台编辑乐观锁版本',
|
||
published_version BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布快照版本',
|
||
created_by_admin_id BIGINT NOT NULL COMMENT '创建管理员',
|
||
updated_by_admin_id BIGINT NOT NULL COMMENT '最后更新管理员',
|
||
published_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布管理员',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
published_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最近发布时间,UTC epoch ms',
|
||
archived_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '软归档时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id),
|
||
UNIQUE KEY uk_activity_template_code (app_code, template_code),
|
||
KEY idx_activity_template_list (app_code, status, updated_at_ms, template_id),
|
||
KEY idx_activity_template_period (app_code, status, start_ms, end_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='可排期运营活动模版实例'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_publish_locks (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '最近获取发布锁时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版发布事务互斥行'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_regions (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
region_id BIGINT NOT NULL COMMENT '投放区域 ID',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, region_id),
|
||
KEY idx_activity_template_region_match (app_code, region_id, template_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版投放区域'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_locales (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
locale VARCHAR(24) NOT NULL COMMENT 'BCP-47 基础语言码',
|
||
title VARCHAR(160) NOT NULL DEFAULT '' COMMENT '客户端活动标题',
|
||
rules MEDIUMTEXT NOT NULL COMMENT '客户端活动规则正文',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, locale)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版多语言文案'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_gifts (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
gift_id VARCHAR(96) NOT NULL COMMENT 'wallet 礼物 ID',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
|
||
name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '发布展示名称快照',
|
||
icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '发布展示图标快照',
|
||
coin_price BIGINT NOT NULL DEFAULT 0 COMMENT '发布时金币价格快照,仅供展示',
|
||
price_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发布时价格版本快照',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, gift_id),
|
||
KEY idx_activity_template_gift_match (app_code, gift_id, template_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版指定礼物和展示快照'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_tasks (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
task_key VARCHAR(64) NOT NULL COMMENT '模版内稳定任务键',
|
||
task_type VARCHAR(32) NOT NULL COMMENT 'daily_visit/gift_count/gift_coin_amount',
|
||
target_value BIGINT NOT NULL DEFAULT 0 COMMENT '任务达成阈值',
|
||
reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, task_key)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版每日任务配置'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_rank_rewards (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
board_type VARCHAR(16) NOT NULL COMMENT 'daily/total',
|
||
rank_from INT NOT NULL COMMENT '奖励起始名次,闭区间',
|
||
rank_to INT NOT NULL COMMENT '奖励结束名次,闭区间',
|
||
resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT 'wallet 奖励资源组 ID',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, board_type, rank_from, rank_to)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版日榜和总榜名次奖励'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_assets (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
asset_key VARCHAR(64) NOT NULL COMMENT '素材位键',
|
||
locale VARCHAR(24) NOT NULL DEFAULT '*' COMMENT '* 表示共享素材,否则为语言码',
|
||
url VARCHAR(1024) NOT NULL COMMENT 'COS/CDN 素材地址',
|
||
media_type VARCHAR(16) NOT NULL COMMENT 'image/webp/svga/pag',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, asset_key, locale)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版客户端素材'`,
|
||
`CREATE TABLE IF NOT EXISTS activity_template_versions (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码',
|
||
template_id VARCHAR(96) NOT NULL COMMENT '活动模版 ID',
|
||
version_no BIGINT NOT NULL COMMENT '单模版递增发布版本',
|
||
snapshot_json JSON NOT NULL COMMENT '发布时完整不可变配置快照',
|
||
published_by_admin_id BIGINT NOT NULL COMMENT '发布管理员',
|
||
published_at_ms BIGINT NOT NULL COMMENT '发布时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, template_id, version_no),
|
||
KEY idx_activity_template_version_list (app_code, template_id, published_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动模版不可变发布版本'`,
|
||
}
|
||
for _, statement := range statements {
|
||
if _, err := r.db.ExecContext(ctx, statement); err != nil {
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|