-- ------------------------------
-- 1. 专辑表（已包含已添加的管理字段）
-- ------------------------------
CREATE TABLE `album` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称',
    `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
    `artist_name` VARCHAR(16) COMMENT '关联artist服务的artist.name',
    `cover_url` VARCHAR(255) COMMENT '专辑封面URL',
    `release_time` DATE COMMENT '发行时间',
    `description` TEXT COMMENT '专辑描述（介绍专辑主题、曲目等）',
    `album_type` TINYINT DEFAULT 1 COMMENT '专辑类型：1-数字专辑，2-实体专辑，3-EP',
    `price` DECIMAL(10,2) COMMENT '专辑价格（实体专辑或付费数字专辑使用）',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-- 已添加的管理字段
    `status` TINYINT DEFAULT 0 COMMENT '专辑状态：0--审核中，1-审核失败，2-发布中，3-已上架，4-已下架',
    `audit_reason` VARCHAR(500) COMMENT '审核失败原因',
    `audit_time` DATETIME COMMENT '审核时间',
    `publish_time` DATETIME COMMENT '发布时间',
    `shelf_time` DATETIME COMMENT '上架时间',
    `off_shelf_time` DATETIME COMMENT '下架时间',
    `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志：0-未删除，1-已删除',
    `delete_time` DATETIME COMMENT '删除时间',
    INDEX `idx_album_name` (`album_name`),
    INDEX `idx_artist_id` (`artist_id`),
    INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专辑表';

-- ------------------------------
-- 2. 歌曲表（已包含已添加的管理字段）
-- ------------------------------
CREATE TABLE `song` (
                        `id` INT AUTO_INCREMENT PRIMARY KEY,
                        `song_name` VARCHAR(100) NOT NULL COMMENT '歌曲名称',
                        `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
                        `album_id` INT COMMENT '关联本服务的album.id（可为空，单曲不关联专辑）',
                        `album_name` VARCHAR(100) NOT NULL COMMENT '专辑名称',
                        `duration` INT COMMENT '时长（秒，如300秒=5分钟）',
                        `file_url` VARCHAR(255) NOT NULL COMMENT '歌曲音频文件URL',
                        `cover_url` VARCHAR(255) COMMENT '歌曲封面URL（优先使用专辑封面，无专辑时用此封面）',
                        `release_time` DATE COMMENT '发行时间',
                        `lyrics` TEXT COMMENT '歌词（冗余存储，核心歌词）',
                        `play_count` BIGINT DEFAULT 0 COMMENT '播放量',
                        `is_paid` TINYINT DEFAULT 0 COMMENT '是否付费：0-免费，1-付费',
                        `price` DECIMAL(10,2) DEFAULT 0.00 COMMENT '单曲价格',
                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                        `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-- 已添加的管理字段
                        `status` TINYINT DEFAULT 0 COMMENT '歌曲状态：0-草稿，1-审核中，2-审核失败，3-发布中，4-已上架，5-已下架',
                        `audit_reason` VARCHAR(500) COMMENT '审核失败原因',
                        `audit_time` DATETIME COMMENT '审核时间',
                        `publish_time` DATETIME COMMENT '发布时间',
                        `shelf_time` DATETIME COMMENT '上架时间',
                        `off_shelf_time` DATETIME COMMENT '下架时间',
                        `delete_flag` TINYINT DEFAULT 0 COMMENT '删除标志：0-未删除，1-已删除',
                        `delete_time` DATETIME COMMENT '删除时间',
                        `song_type` VARCHAR(50) COMMENT '歌曲类型',
                        `version` VARCHAR(50) COMMENT '版本',
                        `work_type` VARCHAR(50) COMMENT '作品类型',
                        `genre` VARCHAR(255) COMMENT '音乐风格',
                        `language` VARCHAR(20) COMMENT '语言',
                        `lyricist` VARCHAR(100) COMMENT '作词人',
                        `composer` VARCHAR(100) COMMENT '作曲人',
                        `arranger` VARCHAR(100) COMMENT '编曲人',
                        `singer_name` VARCHAR(100) COMMENT '演唱者姓名',
                        FOREIGN KEY (`album_id`) REFERENCES `album` (`id`) ON DELETE SET NULL,
                        INDEX `idx_song_name` (`song_name`),
                        INDEX `idx_play_count` (`play_count`),
                        INDEX `idx_artist_id` (`artist_id`),
                        INDEX `idx_status` (`status`),
                        INDEX `idx_delete_flag` (`delete_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲表';
-- ------------------------------
-- 3. 歌单表（关联auth服务的user.id，逻辑关联）
-- ------------------------------
CREATE TABLE `playlist` (
                            `id` INT AUTO_INCREMENT PRIMARY KEY,
                            `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                            `playlist_name` VARCHAR(100) NOT NULL COMMENT '歌单名称',
                            `cover_url` VARCHAR(255) COMMENT '歌单封面URL',
                            `description` TEXT COMMENT '歌单描述',
                            `tag` VARCHAR(255) COMMENT '歌单标签（多个用逗号分隔）',
                            `status` Boolean  DEFAULT true COMMENT '0-公开，1-私密',
                            `song_count` INT DEFAULT 0 COMMENT '歌单歌曲数量',
                            `play_count` BIGINT DEFAULT 0 COMMENT '歌单播放量',
                            `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                            `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                            INDEX `idx_playlist_name` (`playlist_name`),
                            INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单表';

-- ------------------------------
-- 4. 歌单-歌曲关联表（关联本服务的playlist和song表）
-- ------------------------------
CREATE TABLE `playlist_song` (
                                 `id` INT AUTO_INCREMENT PRIMARY KEY,
                                 `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id',
                                 `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                                 `order_num` INT NOT NULL COMMENT '歌曲在歌单中的排序序号',
                                 `add_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '歌曲添加时间',
                                 FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE,
                                 FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE,
                                 UNIQUE KEY `uk_playlist_song` (`playlist_id`, `song_id`),
                                 INDEX `idx_order_num` (`order_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌单-歌曲关联表';

-- ------------------------------
-- 10. 歌词表（关联本服务的song.id、auth服务的user.id）
-- ------------------------------
CREATE TABLE `lyric` (
                         `id` INT AUTO_INCREMENT PRIMARY KEY,
                          `lyric_name` VARCHAR(32) NOT NULL COMMENT '歌词名',
                         `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                         `lyrics` TEXT NOT NULL COMMENT 'LRC格式歌词文本',
                         `language` VARCHAR(20) DEFAULT 'zh' COMMENT '歌词语言（zh-中文，en-英文等）',
                         `version` VARCHAR(50) COMMENT '歌词版本（如艺人原版、用户翻译版）',
                         `upload_user_id` INT NOT NULL COMMENT '上传用户ID，关联auth服务的user.id',
                         `status` TINYINT DEFAULT 0 COMMENT '状态：0-待审核，1-已通过，2-已驳回',
                         `lyric_reason` VARCHAR(500) COMMENT '审核失败原因',
                         `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
                         FOREIGN KEY (`song_id`) REFERENCES `song` (`id`) ON DELETE CASCADE,
                         INDEX `idx_song_id` (`song_id`),
                         INDEX `idx_upload_user_id` (`upload_user_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌词表（多版本支持）';


-- ------------------------------
-- 5. 每日推荐表（关联auth服务的user.id、本服务的song.id）
-- ------------------------------
CREATE TABLE `daily_recommend` (
                                   `id` INT AUTO_INCREMENT PRIMARY KEY,
                                   `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                                   `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                                   `recommend_date` DATE NOT NULL COMMENT '推荐日期',
                                   `reason` VARCHAR(255) COMMENT '推荐理由',
                                   `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                   UNIQUE KEY `uk_user_song_date` (`user_id`, `song_id`, `recommend_date`),
                                   INDEX `idx_recommend_date` (`recommend_date`),
                                   INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
                                   INDEX `idx_song_id` (`song_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每日推荐表';

-- ------------------------------
-- 6. 我喜欢的音乐表（关联auth服务的user.id、本服务的song.id）
-- ------------------------------
CREATE TABLE `user_favorite_song` (
                                      `id` INT AUTO_INCREMENT PRIMARY KEY,
                                      `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                                      `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                                      `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
                                      UNIQUE KEY `uk_user_song` (`user_id`, `song_id`),
                                      INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
                                      INDEX `idx_song_id` (`song_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我喜欢的音乐表';



-- ------------------------------
-- 8. 我关注的用户表（关联auth服务的user.id）
-- ------------------------------
CREATE TABLE `user_follow` (
                               `id` INT AUTO_INCREMENT PRIMARY KEY,
                               `follower_id` INT NOT NULL COMMENT '关注者ID，关联auth服务的user.id',
                               `followed_id` INT NOT NULL COMMENT '被关注者ID，关联auth服务的user.id',
                               `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间',
                               UNIQUE KEY `uk_follower_followed` (`follower_id`, `followed_id`),
                               INDEX `idx_follower_id` (`follower_id`), -- 逻辑关联索引
                               INDEX `idx_followed_id` (`followed_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我关注的用户表';

-- ------------------------------
-- 9. 收藏歌单表（关联auth服务的user.id、本服务的playlist.id）
-- ------------------------------
CREATE TABLE `user_playlist_favorite` (
                                          `id` INT AUTO_INCREMENT PRIMARY KEY,
                                          `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                                          `playlist_id` INT NOT NULL COMMENT '关联本服务的playlist.id',
                                          `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '收藏时间',
                                          FOREIGN KEY (`playlist_id`) REFERENCES `playlist` (`id`) ON DELETE CASCADE,
                                          UNIQUE KEY `uk_user_playlist` (`user_id`, `playlist_id`),
                                          INDEX `idx_user_id` (`user_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我收藏的歌单表';


-- ------------------------------
-- 11. 歌曲推广表（关联artist服务的artist.id、本服务的song.id）
-- ------------------------------
CREATE TABLE `song_promotion` (
                                  `id` INT AUTO_INCREMENT PRIMARY KEY,
                                  `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                                  `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
                                  `promotion_type` TINYINT NOT NULL COMMENT '推广类型：1-首页推荐，2-热门榜单，3-新歌推荐，4-个性化推荐',
                                  `start_time` DATETIME NOT NULL COMMENT '推广开始时间',
                                  `end_time` DATETIME NOT NULL COMMENT '推广结束时间',
                                  `sort` INT DEFAULT 0 COMMENT '推荐排序权重（数值越小越靠前）',
                                  `status` TINYINT DEFAULT 1 COMMENT '状态：0-未生效，1-生效中，2-已过期',
                                  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                  UNIQUE KEY `uk_song_type` (`song_id`, `promotion_type`),
                                  INDEX `idx_promotion_type` (`promotion_type`),
                                  INDEX `idx_status` (`status`),
                                  INDEX `idx_time_range` (`start_time`, `end_time`),
                                  INDEX `idx_artist_id` (`artist_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='歌曲推广表';

-- ------------------------------
-- 12. 推广效果统计表（关联本服务的song_promotion表）
-- ------------------------------
CREATE TABLE `promotion_stat` (
                                  `id` INT AUTO_INCREMENT PRIMARY KEY,
                                  `promotion_id` INT NOT NULL COMMENT '关联本服务的song_promotion.id',
                                  `stat_date` DATE NOT NULL COMMENT '统计日期',
                                  `click_count` INT DEFAULT 0 COMMENT '点击量',
                                  `play_count` INT DEFAULT 0 COMMENT '播放量',
                                  `collect_count` INT DEFAULT 0 COMMENT '收藏量',
                                  `share_count` INT DEFAULT 0 COMMENT '分享量',
                                  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                  FOREIGN KEY (`promotion_id`) REFERENCES `song_promotion` (`id`) ON DELETE CASCADE,
                                  UNIQUE KEY `uk_promotion_date` (`promotion_id`, `stat_date`),
                                  INDEX `idx_stat_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广效果统计表';