-- ========================================================
-- 微音乐平台数据库初始化脚本
-- 创建顺序：按服务依赖关系从基础到复杂
-- 文件：init_database.sql
-- ========================================================



-- ========================================================
-- 1. 认证服务数据库 (wy_auth)
-- ========================================================
CREATE DATABASE IF NOT EXISTS wy_auth DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_auth;



-- ========================================================
-- 1.1 用户基础信息表
-- ========================================================
CREATE TABLE `user` (
                        `id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
                        `username` VARCHAR(50) NOT NULL COMMENT '账号（唯一，用于登录）',
                        `name` VARCHAR(50) COMMENT '用户昵称（冗余，兼容PO）',
                        `age` INT COMMENT '用户年龄',
                        `password` VARCHAR(100) NOT NULL COMMENT '登录密码（建议BCrypt加密）',
                        `url` VARCHAR(500) COMMENT '用户头像URL',
                        `vip_level` INT DEFAULT 0 COMMENT 'VIP等级',
                        `vip_status` INT DEFAULT 0 COMMENT 'VIP状态（0-非VIP，1-VIP）',
                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                        `last_login_time` DATETIME COMMENT '最后登录时间',
                        `nickname` VARCHAR(50) COMMENT '用户昵称（用于展示）',
                        `wx_unionid` VARCHAR(100) COMMENT '微信unionid',
                        `utype` VARCHAR(20) DEFAULT 'normal' COMMENT '用户类型（normal-普通用户，admin-管理员，artist-艺人）',
                        `status` VARCHAR(20) DEFAULT 'normal' COMMENT '用户状态（normal-正常，forbid-禁用，freeze-冻结）',
                        `phone` VARCHAR(20) COMMENT '手机号（唯一）',
                        UNIQUE KEY `uk_username` (`username`),
                        UNIQUE KEY `uk_phone` (`phone`),
                        UNIQUE KEY `uk_wx_unionid` (`wx_unionid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基础信息表';



-- ========================================================
-- 2. 艺人服务数据库 (wy_artist)
-- ========================================================
CREATE DATABASE IF NOT EXISTS wy_artist DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_artist;



-- ========================================================
-- 2.1 艺人基础信息表
-- ========================================================
CREATE TABLE `artist` (
                          `id` INT AUTO_INCREMENT PRIMARY KEY,
                          `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                          `user_username` VARCHAR(50) NOT NULL COMMENT '冗余auth.user.username',
                          `user_phone` VARCHAR(20) COMMENT '冗余auth.user.phone',
                          `artist_name` VARCHAR(100) NOT NULL COMMENT '艺人名',
                          `avatar` VARCHAR(255) COMMENT '艺人头像URL',
                          `header_image` VARCHAR(255) COMMENT '艺人页头图',
                          `gender` TINYINT COMMENT '性别：1-男，2-女，3-团体',
                          `birthday` DATE COMMENT '生日',
                          `region` VARCHAR(50) COMMENT '艺人所属地区',
                          `genre` VARCHAR(100) COMMENT '流派风格',
                          `company` VARCHAR(100) COMMENT '所属公司/厂牌',
                          `introduction` TEXT COMMENT '艺人介绍',
                          `invitation_code` VARCHAR(50) COMMENT '邀请码',
                          `wechat` VARCHAR(50) COMMENT '微信号',
                          `status` TINYINT DEFAULT 0 COMMENT '艺人账号状态：0-待审核，1-已通过，2-已拒绝，3-已冻结',
                          `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                          `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                          UNIQUE KEY `uk_artist_name` (`artist_name`),
                          UNIQUE KEY `uk_user_id` (`user_id`),
                          INDEX `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人基础信息表';



-- ========================================================
-- 2.2 艺人实名认证表
-- ========================================================
CREATE TABLE `artist_real_auth` (
                                    `id` INT AUTO_INCREMENT PRIMARY KEY,
                                    `artist_id` INT NOT NULL COMMENT '关联本服务的artist.id',
                                    `real_name` VARCHAR(50) NOT NULL COMMENT '真实姓名',
                                    `phone` VARCHAR(20) NOT NULL COMMENT '绑定手机号',
                                    `email` VARCHAR(100) NOT NULL COMMENT '邮箱',
                                    `nationality` VARCHAR(50) NOT NULL COMMENT '国籍/地区',
                                    `id_card` VARCHAR(100) NOT NULL COMMENT '证件号',
                                    `face_auth_status` TINYINT DEFAULT 0 COMMENT '面部识别状态：0-未认证，1-已认证',
                                    `auth_status` TINYINT DEFAULT 0 COMMENT '实名认证状态：0-待审核，1-已通过，2-已驳回',
                                    `auth_time` DATETIME COMMENT '实名认证通过时间',
                                    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                    FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`) ON DELETE CASCADE,
                                    UNIQUE KEY `uk_artist_auth` (`artist_id`),
                                    UNIQUE KEY `uk_id_card` (`id_card`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人实名认证信息表';



-- ========================================================
-- 2.3 艺人站外社交信息表
-- ========================================================
CREATE TABLE `artist_external_info` (
                                        `id` INT AUTO_INCREMENT PRIMARY KEY,
                                        `artist_id` INT NOT NULL COMMENT '关联本服务的artist.id',
                                        `platform_name` VARCHAR(50) NOT NULL COMMENT '站外平台名称',
                                        `platform_account` VARCHAR(255) NOT NULL COMMENT '平台用户ID/URL/昵称',
                                        `fans_count` BIGINT DEFAULT 0 COMMENT '平台粉丝数',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                        `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                        FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`) ON DELETE CASCADE,
                                        UNIQUE KEY `uk_artist_platform` (`artist_id`, `platform_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人站外社交平台信息表';



-- ========================================================
-- 2.4 音乐人审核申请表
-- ========================================================
CREATE TABLE `artist_audit_record` (
                                       `id` INT AUTO_INCREMENT PRIMARY KEY,
                                       `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                                       `user_username` VARCHAR(50) NOT NULL COMMENT '冗余auth.user.username',
                                       `artist_id` INT COMMENT '关联本服务的artist.id',
                                       `apply_type` TINYINT DEFAULT 1 COMMENT '申请类型：1-新注册，2-信息修改，3-重新申请',
                                       `apply_reason` TEXT COMMENT '申请原因',
                                       `apply_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
                                       `audit_status` TINYINT DEFAULT 0 COMMENT '审核状态：0-待审核，1-已通过，2-已驳回',
                                       `audit_result` TEXT COMMENT '审核结果',
                                       `reject_reason` TEXT COMMENT '驳回原因',
                                       `audit_time` DATETIME COMMENT '审核时间',
                                       `audit_user_id` INT COMMENT '关联auth服务的user.id',
                                       `audit_username` VARCHAR(50) COMMENT '冗余auth.user.username',
                                       `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                       `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                       INDEX `idx_user_id` (`user_id`),
                                       INDEX `idx_artist_id` (`artist_id`),
                                       INDEX `idx_apply_time` (`apply_time`),
                                       INDEX `idx_audit_status` (`audit_status`),
                                       INDEX `idx_audit_user_id` (`audit_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='音乐人审核申请记录表';



-- ========================================================
-- 3. 内容服务数据库 (wy_content)
-- ========================================================
CREATE DATABASE IF NOT EXISTS wy_content DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_content;



-- ========================================================
-- 3.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',
                         `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-已上架，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 '删除时间',
                         INDEX `idx_album_name` (`album_name`),
                         INDEX `idx_artist_id` (`artist_id`),
                         INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='专辑表';



-- ========================================================
-- 3.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',
                        `duration` INT COMMENT '时长（秒）',
                        `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 '删除时间',
                        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.3 歌词表
-- ========================================================
CREATE TABLE `lyric` (
                         `id` INT AUTO_INCREMENT PRIMARY KEY,
                         `song_id` INT NOT NULL COMMENT '关联本服务的song.id',
                         `lyrics` TEXT NOT NULL COMMENT 'LRC格式歌词文本',
                         `language` VARCHAR(20) DEFAULT 'zh' COMMENT '歌词语言',
                         `version` VARCHAR(50) COMMENT '歌词版本',
                         `upload_user_id` INT NOT NULL COMMENT '上传用户ID，关联auth服务的user.id',
                         `status` TINYINT DEFAULT 0 COMMENT '状态：0-待审核，1-已通过，2-已驳回',
                         `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='歌词表（多版本支持）';



-- ========================================================
-- 3.4 歌单表
-- ========================================================
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` TINYINT DEFAULT 0 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='歌单表';



-- ========================================================
-- 3.5 歌单-歌曲关联表
-- ========================================================
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='歌单-歌曲关联表';



-- ========================================================
-- 3.6 歌曲推广表
-- ========================================================
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='歌曲推广表';



-- ========================================================
-- 3.7 推广效果统计表
-- ========================================================
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='推广效果统计表';



-- ========================================================
-- 3.8 每日推荐表
-- ========================================================
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='每日推荐表';



-- ========================================================
-- 3.9 我喜欢的音乐表
-- ========================================================
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='我喜欢的音乐表';



-- ========================================================
-- 3.10 我喜欢的歌手表
-- ========================================================
CREATE TABLE `user_favorite_artist` (
                                        `id` INT AUTO_INCREMENT PRIMARY KEY,
                                        `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                                        `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间',
                                        UNIQUE KEY `uk_user_artist` (`user_id`, `artist_id`),
                                        INDEX `idx_user_id` (`user_id`),
                                        INDEX `idx_artist_id` (`artist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='我喜欢的歌手表';



-- ========================================================
-- 3.11 我关注的用户表
-- ========================================================
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='我关注的用户表';



-- ========================================================
-- 3.12 我喜欢的歌单表
-- ========================================================
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='我喜欢的歌单表';



-- ========================================================
-- 4. 媒体服务数据库 (wy_media)
-- ========================================================
CREATE DATABASE IF NOT EXISTS wy_media DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_media;



-- ========================================================
-- 4.1 媒体文件信息表
-- ========================================================
CREATE TABLE `media_file` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
                              `file_name` VARCHAR(255) NOT NULL COMMENT '存储文件名（系统生成的唯一文件名）',
                              `file_type` VARCHAR(20) NOT NULL COMMENT '文件类型：image、audio、video',
                              `file_size` BIGINT COMMENT '文件大小（字节）',
                              `bucket_name` VARCHAR(100) NOT NULL COMMENT '存储桶名称',
                              `file_url` VARCHAR(500) NOT NULL COMMENT '文件访问URL',
                              `storage_type` VARCHAR(20) DEFAULT 'oss' COMMENT '存储类型（oss、local、minio等）',
                              `status` TINYINT DEFAULT 0 COMMENT '文件状态：0-正常，1-已删除（逻辑删除）',
                              `md5` VARCHAR(32) COMMENT '文件MD5值',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                              INDEX `idx_file_type` (`file_type`),
                              INDEX `idx_bucket_name` (`bucket_name`),
                              INDEX `idx_create_time` (`create_time`),
                              INDEX `idx_md5` (`md5`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体文件信息表';



-- ========================================================
-- 4.2 艺人媒体文件历史记录表
-- ========================================================
CREATE TABLE `artist_media_history` (
                                        `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                                        `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
                                        `media_type` VARCHAR(20) NOT NULL COMMENT '媒体类型: avatar、header_image等',
                                        `media_file_id` BIGINT NOT NULL COMMENT '关联本服务的media_file.id',
                                        `is_current` TINYINT DEFAULT 0 COMMENT '是否为当前使用版本：0-否，1-是',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                        FOREIGN KEY (`media_file_id`) REFERENCES `media_file` (`id`) ON DELETE RESTRICT,
                                        UNIQUE KEY `uk_artist_media_current` (`artist_id`, `media_type`, `is_current`),
                                        INDEX `idx_artist_id` (`artist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人媒体文件历史记录表';



-- ========================================================
-- 5. 订单服务数据库 (wy_order)
-- ========================================================
CREATE DATABASE IF NOT EXISTS wy_order DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_order;



-- ========================================================
-- 5.1 商品分类表
-- ========================================================
CREATE TABLE `product_category` (
                                    `id` INT AUTO_INCREMENT PRIMARY KEY,
                                    `name` VARCHAR(100) NOT NULL COMMENT '分类名称',
                                    `parent_id` INT COMMENT '父分类ID',
                                    `sort` INT DEFAULT 0 COMMENT '排序权重',
                                    `status` TINYINT DEFAULT 1 COMMENT '状态：0-禁用，1-启用',
                                    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                    FOREIGN KEY (`parent_id`) REFERENCES `product_category` (`id`) ON DELETE SET NULL,
                                    INDEX `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';



-- ========================================================
-- 5.2 商品表
-- ========================================================
CREATE TABLE `product` (
                           `id` INT AUTO_INCREMENT PRIMARY KEY,
                           `category_id` INT NOT NULL COMMENT '关联本服务的product_category.id',
                           `name` VARCHAR(255) NOT NULL COMMENT '商品名称',
                           `cover_url` VARCHAR(500) COMMENT '商品封面URL',
                           `description` TEXT COMMENT '商品描述',
                           `price` DECIMAL(10,2) NOT NULL COMMENT '售价',
                           `original_price` DECIMAL(10,2) COMMENT '原价',
                           `stock` INT NOT NULL DEFAULT 0 COMMENT '库存（-1表示无限）',
                           `product_type` TINYINT NOT NULL COMMENT '类型：1-数字商品，2-实体商品',
                           `artist_id` INT COMMENT '关联artist服务的artist.id',
                           `album_id` INT COMMENT '关联content服务的album.id',
                           `song_id` INT COMMENT '关联content服务的song.id',
                           `status` TINYINT DEFAULT 1 COMMENT '状态：0-下架，1-上架',
                           `sales_count` INT DEFAULT 0 COMMENT '销量',
                           `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                           `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                           FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`) ON DELETE CASCADE,
                           INDEX `idx_product_name` (`name`),
                           INDEX `idx_product_type` (`product_type`),
                           INDEX `idx_status` (`status`),
                           INDEX `idx_artist_id` (`artist_id`),
                           INDEX `idx_album_id` (`album_id`),
                           INDEX `idx_song_id` (`song_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';



-- ========================================================
-- 5.3 订单表
-- ========================================================
CREATE TABLE `order` (
                         `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                         `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号',
                         `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                         `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
                         `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额',
                         `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
                         `pay_type` TINYINT COMMENT '支付方式：1-微信，2-支付宝',
                         `status` TINYINT NOT NULL COMMENT '状态：0-待支付，1-已支付，2-已取消，3-已退款，4-已完成',
                         `pay_time` DATETIME COMMENT '支付时间',
                         `cancel_time` DATETIME COMMENT '取消时间',
                         `finish_time` DATETIME COMMENT '完成时间',
                         `receive_name` VARCHAR(100) COMMENT '收货人姓名',
                         `receive_phone` VARCHAR(20) COMMENT '收货人电话',
                         `receive_address` TEXT COMMENT '收货地址',
                         `note` TEXT COMMENT '订单备注',
                         `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                         `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                         UNIQUE KEY `uk_order_no` (`order_no`),
                         INDEX `idx_user_id` (`user_id`),
                         INDEX `idx_status` (`status`),
                         INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';



-- ========================================================
-- 5.4 订单项表
-- ========================================================
CREATE TABLE `order_item` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id',
                              `product_id` INT NULL COMMENT '关联本服务的product.id',
                              `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照',
                              `product_cover` VARCHAR(500) COMMENT '商品封面快照',
                              `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价',
                              `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
                              `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额',
                              `digital_code` VARCHAR(100) COMMENT '数字商品兑换码',
                              `digital_code_status` TINYINT DEFAULT 0 COMMENT '兑换码状态：0-未使用，1-已使用',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE,
                              FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE SET NULL,
                              INDEX `idx_order_id` (`order_id`),
                              INDEX `idx_product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';



-- ========================================================
-- 数据库初始化完成
-- ========================================================
SELECT '数据库初始化完成！' AS '初始化结果';