topfans/backend/scripts/init_database_activity.sql
2026-04-07 22:29:48 +08:00

104 lines
5.1 KiB
SQL

-- ============================================
-- 运营活动相关表
-- ============================================
-- 11. activities 表 - 运营活动表
CREATE TABLE IF NOT EXISTS activities (
id BIGSERIAL PRIMARY KEY,
activity_type VARCHAR(50) NOT NULL, -- 活动类型: birthday/concert/bus
title VARCHAR(100) NOT NULL, -- 活动标题
description TEXT, -- 活动描述
star_id BIGINT NOT NULL, -- 所属明星
start_time BIGINT NOT NULL, -- 开始时间 (毫秒时间戳)
end_time BIGINT NOT NULL, -- 结束时间 (毫秒时间戳)
target_progress BIGINT NOT NULL DEFAULT 1000, -- 目标进度
current_progress BIGINT NOT NULL DEFAULT 0, -- 当前进度
status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/active/completed/expired
stage_configs JSONB, -- 阶段配置 (不同进度的背景图等)
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_activities_star_id ON activities(star_id);
CREATE INDEX IF NOT EXISTS idx_activities_status ON activities(status);
CREATE INDEX IF NOT EXISTS idx_activities_start_end ON activities(start_time, end_time);
-- 12. activity_items 表 - 活动道具表 (数据库配置,支持运营平台动态调整)
CREATE TABLE IF NOT EXISTS activity_items (
id BIGSERIAL PRIMARY KEY,
activity_id BIGINT NOT NULL,
item_type VARCHAR(50) NOT NULL, -- 道具类型: firework/megaphone/love
item_name VARCHAR(50) NOT NULL, -- 道具名称
icon_url VARCHAR(500), -- 道具图标
crystal_cost INTEGER NOT NULL, -- 水晶消耗
contribution_points INTEGER NOT NULL, -- 贡献点奖励
sort_order INTEGER NOT NULL DEFAULT 0,
is_active BOOLEAN NOT NULL DEFAULT true,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_activity_items_activity ON activity_items(activity_id);
CREATE INDEX IF NOT EXISTS idx_activity_items_type ON activity_items(item_type);
-- 13. activity_contributions 表 - 用户活动贡献记录表
CREATE TABLE IF NOT EXISTS activity_contributions (
id BIGSERIAL PRIMARY KEY,
activity_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
star_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
item_type VARCHAR(50) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
crystal_spent BIGINT NOT NULL,
contribution_points BIGINT NOT NULL,
created_at BIGINT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_activity_contributions_activity ON activity_contributions(activity_id);
CREATE INDEX IF NOT EXISTS idx_activity_contributions_user_star ON activity_contributions(user_id, star_id);
CREATE INDEX IF NOT EXISTS idx_activity_contributions_created ON activity_contributions(created_at DESC);
-- 14. activity_user_stats 表 - 用户活动贡献汇总表 (用于排行榜)
CREATE TABLE IF NOT EXISTS activity_user_stats (
id BIGSERIAL PRIMARY KEY,
activity_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
star_id BIGINT NOT NULL,
total_contribution BIGINT NOT NULL DEFAULT 0,
total_crystal_spent BIGINT NOT NULL DEFAULT 0,
total_items INTEGER NOT NULL DEFAULT 0,
last_contribute_at BIGINT NOT NULL,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
CONSTRAINT uk_activity_user_star UNIQUE (activity_id, user_id, star_id)
);
CREATE INDEX IF NOT EXISTS idx_activity_user_stats_activity ON activity_user_stats(activity_id);
CREATE INDEX IF NOT EXISTS idx_activity_user_stats_contribution ON activity_user_stats(activity_id, total_contribution DESC);
CREATE INDEX IF NOT EXISTS idx_activity_user_stats_user_star ON activity_user_stats(user_id, star_id);
-- 外键约束
ALTER TABLE activity_items
ADD CONSTRAINT fk_activity_items_activity FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE;
ALTER TABLE activity_contributions
ADD CONSTRAINT fk_activity_contributions_activity FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_item FOREIGN KEY (item_id) REFERENCES activity_items(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_contributions_star FOREIGN KEY (star_id) REFERENCES stars(star_id) ON DELETE CASCADE;
ALTER TABLE activity_user_stats
ADD CONSTRAINT fk_activity_user_stats_activity FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_user_stats_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
ADD CONSTRAINT fk_activity_user_stats_star FOREIGN KEY (star_id) REFERENCES stars(star_id) ON DELETE CASCADE;
-- ============================================
-- 注释说明
-- ============================================
COMMENT ON TABLE activities IS '运营活动表';
COMMENT ON TABLE activity_items IS '活动道具表';
COMMENT ON TABLE activity_contributions IS '用户活动贡献记录表';
COMMENT ON TABLE activity_user_stats IS '用户活动贡献汇总表';