CREATE DATABASE IF NOT EXISTS wy_artist DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_artist;

-- ------------------------------
-- 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（避免频繁调用auth服务）',
                          `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` TINYINT COMMENT '艺人所属地区（如中国内地、韩国）',
                          `genre` VARCHAR(100) COMMENT '流派风格（多个用逗号分隔，如流行,摇滚,电子）',
                          `company` VARCHAR(100) COMMENT '所属公司/厂牌（如华谊兄弟、SM娱乐）',
                          `introduction` TEXT COMMENT '艺人介绍（10-1000字，用于艺人详情页）',
                          `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. 艺人实名认证表（无跨服务依赖，仅关联本地artist表）
-- ------------------------------
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 '证件号（建议AES加密存储，保护隐私）',
                                    `face_auth_status` TINYINT DEFAULT 0 COMMENT '面部识别状态：0-未认证，1-已认证',
                                    `auth_status` TINYINT DEFAULT 0 COMMENT '实名认证状态：0-待审核，1-已通过，2-已驳回',
                                    `auth_time` DATETIME COMMENT '实名认证通过时间',
                                    `auth_result` TEXT 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='艺人实名认证信息表';

-- ------------------------------
-- 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 '站外平台名称（如微博、抖音、B站、Spotify）',
                                        `platform_account` VARCHAR(255) NOT NULL COMMENT '平台用户ID/URL/昵称（如微博昵称：XXX）',
                                        `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='艺人站外社交平台信息表';

-- ------------------------------
-- 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（已存在的艺人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='音乐人审核申请记录表';

-- ------------------------------
-- 7. 我喜欢的歌手表（关联auth服务的user.id、artist服务的artist.id）
-- ------------------------------
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='我喜欢的歌手表';



DROP TABLE IF EXISTS `share`;
CREATE TABLE `share` (
                         `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '分享ID，主键',
                         `user_id` VARCHAR(64) NOT NULL COMMENT '发表分享的用户ID',
                         `content` TEXT COMMENT '分享正文内容（支持富文本或纯文本）',
                         `jump_urls` TEXT COMMENT '图片跳转', -- 移除 DEFAULT '[]'，解决1101错误
                         `files` JSON COMMENT '图片文件',    -- 移除 DEFAULT '[]'，解决1101错误
                         `like_count` INT DEFAULT 0 COMMENT '点赞数',
                         `unlike_count` INT DEFAULT 0 COMMENT '点踩数',
                         `is_forward` BOOLEAN DEFAULT FALSE COMMENT '是否转发',
                         `forward_count` INT DEFAULT 0 COMMENT '转发数',
                         `comment_count` INT DEFAULT 0 COMMENT '评论数',
                         `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                         `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                         PRIMARY KEY (`id`),
                         INDEX `idx_user_id` (`user_id`),
                         INDEX `idx_created_at` (`created_at`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享表';


-- 点赞记录表
CREATE TABLE `share_like_record` (
                                     `id` INT AUTO_INCREMENT PRIMARY KEY,
                                     `share_id` BIGINT NOT NULL COMMENT '分享ID，关联share表',
                                     `user_id` INT NOT NULL COMMENT '点赞用户ID，关联user表',
                                     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间',
                                     UNIQUE KEY `uk_share_user` (`share_id`, `user_id`), -- 一个用户对一个分享只能点赞一次
                                     INDEX `idx_share_id` (`share_id`),
                                     INDEX `idx_user_id` (`user_id`),
                                     FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享点赞记录表';

-- 踩记录表
CREATE TABLE `share_dislike_record` (
                                        `id` INT AUTO_INCREMENT PRIMARY KEY,
                                        `share_id` BIGINT NOT NULL COMMENT '分享ID，关联share表',
                                        `user_id` INT NOT NULL COMMENT '点踩用户ID，关联user表',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点踩时间',
                                        UNIQUE KEY `uk_share_user` (`share_id`, `user_id`), -- 一个用户对一个分享只能踩一次
                                        INDEX `idx_share_id` (`share_id`),
                                        INDEX `idx_user_id` (`user_id`),
                                        FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享点踩记录表';

-- 转发记录表
CREATE TABLE `share_forward_record` (
                                        `id` INT AUTO_INCREMENT PRIMARY KEY,
                                        `share_id` BIGINT NOT NULL COMMENT '原分享ID，关联share表',
                                        `user_id` INT NOT NULL COMMENT '转发用户ID，关联user表',
                                        `target_share_id` BIGINT COMMENT '转发后生成的新分享ID（如果转发后用户添加了内容）',
                                        `forward_content` TEXT COMMENT '转发时添加的内容',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '转发时间',
                                        INDEX `idx_share_id` (`share_id`),
                                        INDEX `idx_user_id` (`user_id`),
                                        INDEX `idx_target_share_id` (`target_share_id`),
                                        FOREIGN KEY (`share_id`) REFERENCES `share` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分享转发记录表';