-- ============================================================================
-- 情绪博物馆数据库完整部署脚本
-- 版本: v3.0 Final (雪花算法主键版本) - 开发版本
-- 创建时间: 2025-07-13
-- 数据库类型: MySQL 8.0+
-- 说明: 包含完整表结构、索引、初始数据的一体化部署脚本
-- 主键类型: VARCHAR(36) 使用雪花算法生成，避免前端精度丢失问题
-- 关联策略: 不使用外键约束，通过代码中的ID字段关联
-- 特性: 开发阶段 - 先删除表再重新创建，确保表结构是最新的
-- 警告: 此脚本会删除现有表和数据，仅适用于开发环境！
-- ============================================================================
-- 设置SQL模式和字符集
SET
    SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO';

SET
    AUTOCOMMIT = 0;

START TRANSACTION;

SET
    time_zone = "+00:00";

-- 创建数据库
CREATE DATABASE IF NOT EXISTS emotion_museum DEFAULT CHARACTER
    SET
    utf8mb4 COLLATE utf8mb4_unicode_ci;

USE emotion_museum;

-- ============================================================================
-- 数据库设计原则
-- ============================================================================
-- 1. 主键策略: 使用VARCHAR(36)雪花算法ID，避免前端精度丢失
-- 2. 关联策略: 不使用外键约束，通过代码中的ID字段维护关联关系
-- 3. 公共字段: 所有表继承BaseEntity的公共字段
-- 4. 索引优化: 为查询频繁的字段创建合适的索引
-- 5. 字符集: 统一使用utf8mb4支持emoji和特殊字符
-- ============================================================================
-- ============================================================================
-- 1. 用户表 (user)
-- ============================================================================
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
                      id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                      account VARCHAR(50)  UNIQUE COMMENT '账号', -- 账号
                      password VARCHAR(255) COMMENT '密码(加密后)', -- 密码(加密后)
                      username VARCHAR(50)  UNIQUE COMMENT '用户名', -- 用户名
                      email VARCHAR(100)  UNIQUE COMMENT '邮箱', -- 邮箱
                      phone VARCHAR(20) UNIQUE COMMENT '手机号', -- 手机号
                      avatar VARCHAR(500) COMMENT '头像URL', -- 头像URL
                      nickname VARCHAR(50) COMMENT '昵称', -- 昵称
                      birth_date DATE COMMENT '生日', -- 生日
                      location VARCHAR(100) COMMENT '所在地', -- 所在地
                      bio TEXT COMMENT '个人简介', -- 个人简介
                      member_level VARCHAR(20)  DEFAULT 'free' COMMENT '会员等级', -- 会员等级
                      total_days INT  DEFAULT 0 COMMENT '使用天数', -- 使用天数
    -- 成长数据
                      self_awareness DECIMAL(5, 2)  DEFAULT 50.00 COMMENT '自我感知', -- 自我感知
                      emotional_resilience DECIMAL(5, 2)  DEFAULT 50.00 COMMENT '情绪韧性', -- 情绪韧性
                      action_power DECIMAL(5, 2)  DEFAULT 50.00 COMMENT '行动力', -- 行动力
                      empathy DECIMAL(5, 2)  DEFAULT 50.00 COMMENT '共情力', -- 共情力
                      life_enthusiasm DECIMAL(5, 2)  DEFAULT 50.00 COMMENT '生活热度', -- 生活热度
    -- 状态字段
                      status TINYINT  DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常', -- 状态: 0-禁用, 1-正常
                      is_verified TINYINT  DEFAULT 0 COMMENT '是否已验证: 0-未验证, 1-已验证', -- 是否已验证: 0-未验证, 1-已验证
                      last_active_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间
    -- 第三方登录字段
                      third_party_id VARCHAR(128) COMMENT '第三方平台ID', -- 第三方平台ID
                      third_party_type VARCHAR(32) COMMENT '第三方平台类型: wechat, qq, wechat-mp', -- 第三方平台类型: wechat, qq, wechat-mp
    -- 公共字段
                      create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                      create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                      update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                      update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                      is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                      remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表 (t_user)';

-- ============================================================================
-- 2. 对话表 (t_conversation)
-- 关联说明: user_id 关联 t_user.id，通过代码逻辑维护关联关系
-- ============================================================================
DROP TABLE IF EXISTS t_conversation;
CREATE TABLE t_conversation (
                              id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                              user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)', -- 用户ID (关联t_user.id)
                              user_type VARCHAR(20)  DEFAULT 'registered' COMMENT '用户类型: registered-注册用户, guest-访客用户', -- 用户类型: registered-注册用户, guest-访客用户
                              title VARCHAR(200) COMMENT '对话标题', -- 对话标题
                              type VARCHAR(50)  DEFAULT 'emotion_chat' COMMENT '对话类型', -- 对话类型
                              status VARCHAR(20)  DEFAULT 'active' COMMENT '状态: active-活跃, ended-结束, archived-归档', -- 状态: active-活跃, ended-结束, archived-归档
                              coze_conversation_id VARCHAR(100) COMMENT 'Coze对话ID', -- Coze对话ID
                              bot_id VARCHAR(50) COMMENT '使用的Bot ID', -- 使用的Bot ID
                              workflow_id VARCHAR(50) COMMENT '使用的Workflow ID', -- 使用的Workflow ID
                              initial_message TEXT COMMENT '初始消息', -- 初始消息
                              context TEXT COMMENT '上下文信息', -- 上下文信息
                              primary_emotion VARCHAR(50) COMMENT '主要情绪', -- 主要情绪
                              emotion_intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度
                              emotion_trend VARCHAR(50) COMMENT '情绪趋势', -- 情绪趋势
                              keywords JSON COMMENT '关键词', -- 关键词
                              ai_insights TEXT COMMENT 'AI洞察', -- AI洞察
                              confidence DECIMAL(3, 2) COMMENT '分析置信度', -- 分析置信度
                              start_time DATETIME COMMENT '开始时间', -- 开始时间
                              end_time DATETIME COMMENT '结束时间', -- 结束时间
                              last_active_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间
                              message_count INT  DEFAULT 0 COMMENT '消息数量', -- 消息数量
                              total_tokens INT DEFAULT 0 COMMENT '总Token使用量', -- 总Token使用量
                              total_cost DECIMAL(10, 4) DEFAULT 0.0000 COMMENT '总费用', -- 总费用
                              client_ip VARCHAR(45) COMMENT '客户端IP地址 (支持IPv6)', -- 客户端IP地址 (支持IPv6)
                              user_agent TEXT COMMENT '用户代理信息', -- 用户代理信息
                              summary TEXT COMMENT '对话摘要', -- 对话摘要
                              tags JSON COMMENT '标签', -- 标签
                              metadata JSON COMMENT '扩展元数据', -- 扩展元数据
    -- 公共字段
                              create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                              create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                              update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                              update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                              is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                              remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '对话表 (t_conversation)';

-- ============================================================================
-- 3. 消息表 (t_message)
-- 关联说明: conversation_id 关联 t_conversation.id，通过代码逻辑维护关联关系
-- ============================================================================
DROP TABLE IF EXISTS t_message;
CREATE TABLE t_message (
                         id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                         conversation_id VARCHAR(64) COMMENT '对话ID (关联t_conversation.id)', -- 对话ID (关联t_conversation.id)
                         content TEXT COMMENT '消息内容', -- 消息内容
                         message_order BIGINT COMMENT '消息顺序',
                         type VARCHAR(50)  DEFAULT 'text' COMMENT '消息类型', -- 消息类型
                         sender VARCHAR(20) COMMENT '发送者: user-用户, assistant-AI助手', -- 发送者: user-用户, assistant-AI助手
                         timestamp DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '消息时间戳', -- 消息时间戳
                         coze_chat_id VARCHAR(50) COMMENT 'Coze平台的聊天ID', -- Coze平台的聊天ID
                         coze_message_id VARCHAR(50) COMMENT 'Coze平台的消息ID', -- Coze平台的消息ID
                         status VARCHAR(20) DEFAULT 'sent' COMMENT '消息状态: sending/sent/failed/processing', -- 消息状态: sending/sent/failed/processing
                         error_message TEXT COMMENT '错误信息', -- 错误信息
                         emotion_score DECIMAL(3, 2) COMMENT '情绪评分', -- 情绪评分
                         emotion_type VARCHAR(50) COMMENT '情绪类型', -- 情绪类型
                         emotion_confidence DECIMAL(3, 2) COMMENT '情绪分析置信度', -- 情绪分析置信度
                         prompt_tokens INT DEFAULT 0 COMMENT '输入Token数', -- 输入Token数
                         completion_tokens INT DEFAULT 0 COMMENT '输出Token数', -- 输出Token数
                         total_tokens INT DEFAULT 0 COMMENT '总Token数', -- 总Token数
                         api_cost DECIMAL(10, 6) DEFAULT 0.000000 COMMENT 'API调用费用', -- API调用费用
                         is_read TINYINT  DEFAULT 0 COMMENT '是否已读: 0-未读, 1-已读', -- 是否已读: 0-未读, 1-已读
                         parent_message_id VARCHAR(64) COMMENT '父消息ID（用于回复链）', -- 父消息ID（用于回复链）
                         emotion_analysis JSON COMMENT '情绪分析结果', -- 情绪分析结果
                         metadata JSON COMMENT '扩展元数据', -- 扩展元数据
                         user_id VARCHAR(64) COMMENT '用户ID (注册用户或访客用户)', -- 用户ID (注册用户或访客用户)
                         user_type VARCHAR(20) COMMENT '用户类型 (registered/guest)', -- 用户类型 (registered/guest)
                         coze_role VARCHAR(20) COMMENT 'Coze消息角色 (user/assistant/system)', -- Coze消息角色 (user/assistant/system)
                         coze_content_type VARCHAR(50) COMMENT 'Coze消息内容类型 (text/image/file等)', -- Coze消息内容类型 (text/image/file等)
    -- 公共字段
                         create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                         create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                         update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                         update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                         is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                         remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表 (t_message)';

-- ============================================================================
-- 4. Coze API调用记录表 (coze_api_call) - 优化版本
-- ============================================================================
DROP TABLE IF EXISTS t_coze_api_call;
CREATE TABLE t_coze_api_call (
                               id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                               conversation_id VARCHAR(64) COMMENT '对话ID', -- 对话ID
                               message_id VARCHAR(64) COMMENT '消息ID', -- 消息ID
    -- Coze API 信息
                               coze_chat_id VARCHAR(50) COMMENT 'Coze聊天ID', -- Coze聊天ID
                               coze_conversation_id VARCHAR(50) COMMENT 'Coze对话ID', -- Coze对话ID
                               bot_id VARCHAR(50) COMMENT 'Bot ID', -- Bot ID
                               workflow_id VARCHAR(50) COMMENT 'Workflow ID', -- Workflow ID
                               user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID
    -- 请求信息
                               request_type VARCHAR(20) COMMENT '请求类型: chat/stream/retrieve/messages', -- 请求类型: chat/stream/retrieve/messages
                               request_url VARCHAR(500) COMMENT '请求URL', -- 请求URL
                               request_body JSON COMMENT '请求体', -- 请求体
                               request_headers JSON COMMENT '请求头', -- 请求头
    -- 用户消息内容
                               user_message TEXT COMMENT '用户输入的消息内容', -- 用户输入的消息内容
                               user_message_type VARCHAR(20) DEFAULT 'text' COMMENT '用户消息类型: text/image/file', -- 用户消息类型: text/image/file
    -- AI回复内容
                               ai_reply TEXT COMMENT 'AI回复的消息内容', -- AI回复的消息内容
                               ai_reply_type VARCHAR(20) DEFAULT 'text' COMMENT 'AI回复类型: text/image/file', -- AI回复类型: text/image/file
    -- 响应信息
                               response_status INT COMMENT 'HTTP状态码', -- HTTP状态码
                               response_body JSON COMMENT '响应体', -- 响应体
                               response_headers JSON COMMENT '响应头', -- 响应头
    -- 轮询信息
                               poll_count INT DEFAULT 0 COMMENT '轮询次数', -- 轮询次数
                               poll_start_time DATETIME COMMENT '轮询开始时间', -- 轮询开始时间
                               poll_end_time DATETIME COMMENT '轮询结束时间', -- 轮询结束时间
                               final_status VARCHAR(20) COMMENT '最终状态: completed/failed/timeout', -- 最终状态: completed/failed/timeout
    -- 状态和时间
                               status VARCHAR(20) COMMENT '调用状态: pending/success/failed/timeout', -- 调用状态: pending/success/failed/timeout
                               start_time DATETIME COMMENT '开始时间', -- 开始时间
                               end_time DATETIME COMMENT '结束时间', -- 结束时间
                               duration_ms INT COMMENT '耗时（毫秒）', -- 耗时（毫秒）
    -- 使用统计
                               prompt_tokens INT DEFAULT 0 COMMENT '输入Token数', -- 输入Token数
                               completion_tokens INT DEFAULT 0 COMMENT '输出Token数', -- 输出Token数
                               total_tokens INT DEFAULT 0 COMMENT '总Token数', -- 总Token数
                               cost DECIMAL(10, 6) DEFAULT 0.000000 COMMENT '费用', -- 费用
    -- 功能调用信息
                               function_calls JSON COMMENT '函数调用记录', -- 函数调用记录
                               function_results JSON COMMENT '函数调用结果', -- 函数调用结果
    -- 错误信息
                               error_code VARCHAR(50) COMMENT '错误代码', -- 错误代码
                               error_message TEXT COMMENT '错误信息', -- 错误信息
    -- 扩展信息
                               client_ip VARCHAR(45) COMMENT '客户端IP', -- 客户端IP
                               user_agent TEXT COMMENT '用户代理', -- 用户代理
                               session_id VARCHAR(100) COMMENT '会话ID', -- 会话ID
                               trace_id VARCHAR(100) COMMENT '追踪ID', -- 追踪ID
                               metadata JSON COMMENT '扩展元数据', -- 扩展元数据
    -- 公共字段
                               create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                               create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                               update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                               update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                               is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                               remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Coze API调用记录表 - 完整版本 (t_coze_api_call)';

-- ============================================================================
-- 5. 情绪分析表 (emotion_analysis)
-- ============================================================================
DROP TABLE IF EXISTS t_emotion_analysis;
CREATE TABLE t_emotion_analysis (
                                  id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                                  user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID
                                  message_id VARCHAR(64) COMMENT '关联消息ID', -- 关联消息ID
                                  text TEXT COMMENT '分析文本', -- 分析文本
                                  primary_emotion VARCHAR(50) COMMENT '主要情绪', -- 主要情绪
                                  intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度
                                  polarity VARCHAR(20) COMMENT '情绪极性: positive-积极, negative-消极, neutral-中性', -- 情绪极性: positive-积极, negative-消极, neutral-中性
                                  confidence DECIMAL(3, 2) COMMENT '置信度', -- 置信度
                                  emotions JSON COMMENT '情绪分布详情', -- 情绪分布详情
                                  keywords JSON COMMENT '关键词列表', -- 关键词列表
                                  suggestion TEXT COMMENT '建议', -- 建议
                                  analysis_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '分析时间', -- 分析时间
                                  metadata JSON COMMENT '扩展元数据', -- 扩展元数据
    -- 公共字段
                                  create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                                  create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                                  update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                                  update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                                  is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                                  remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪分析表 (t_emotion_analysis)';

-- ============================================================================
-- 6. 情绪记录表 (emotion_record)
-- ============================================================================
DROP TABLE IF EXISTS t_emotion_record;
CREATE TABLE t_emotion_record (
                                id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                                user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID
                                record_date DATE COMMENT '记录日期', -- 记录日期
                                emotion_type VARCHAR(50) COMMENT '情绪类型', -- 情绪类型
                                intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度
                                triggers TEXT COMMENT '触发因素', -- 触发因素
                                description TEXT COMMENT '描述', -- 描述
                                tags JSON COMMENT '标签', -- 标签
                                weather VARCHAR(50) COMMENT '天气', -- 天气
                                location VARCHAR(100) COMMENT '地点', -- 地点
                                activity VARCHAR(100) COMMENT '活动', -- 活动
                                people VARCHAR(200) COMMENT '相关人物', -- 相关人物
                                notes TEXT COMMENT '备注', -- 备注
    -- 公共字段
                                create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                                create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                                update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                                update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                                is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                                remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪记录表 (t_emotion_record)';

-- ============================================================================
-- 7. 成长课题表 (growth_topic)
-- ============================================================================
DROP TABLE IF EXISTS t_growth_topic;
CREATE TABLE t_growth_topic (
                              id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                              title VARCHAR(100) COMMENT '课题标题', -- 课题标题
                              category VARCHAR(50) COMMENT '分类', -- 分类
                              difficulty VARCHAR(20) COMMENT '难度: easy-简单, medium-中等, hard-困难', -- 难度: easy-简单, medium-中等, hard-困难
                              description TEXT COMMENT '描述', -- 描述
                              content TEXT COMMENT '内容', -- 内容
                              duration_days INT COMMENT '持续天数', -- 持续天数
                              unlock_conditions JSON COMMENT '解锁条件', -- 解锁条件
                              is_unlocked TINYINT  DEFAULT 1 COMMENT '是否解锁', -- 是否解锁
                              progress DECIMAL(5, 2)  DEFAULT 0.00 COMMENT '进度百分比', -- 进度百分比
                              completed_time DATETIME COMMENT '完成时间', -- 完成时间
                              rewards JSON COMMENT '奖励', -- 奖励
    -- 公共字段
                              create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                              create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                              update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                              update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                              is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                              remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成长课题表 (t_growth_topic)';

-- ============================================================================
-- 8. 课题互动表 (topic_interaction)
-- ============================================================================
DROP TABLE IF EXISTS t_topic_interaction;
CREATE TABLE t_topic_interaction (
                                   id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                                   topic_id VARCHAR(64) COMMENT '课题ID', -- 课题ID
                                   type VARCHAR(50) COMMENT '互动类型', -- 互动类型
                                   content TEXT COMMENT '内容', -- 内容
                                   user_input TEXT COMMENT '用户输入', -- 用户输入
                                   ai_response TEXT COMMENT 'AI回应', -- AI回应
                                   rating INT COMMENT '评分', -- 评分
                                   feedback TEXT COMMENT '反馈', -- 反馈
                                   completed_time DATETIME COMMENT '完成时间', -- 完成时间
    -- 公共字段
                                   create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                                   create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                                   update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                                   update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                                   is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                                   remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '课题互动表 (t_topic_interaction)';

-- ============================================================================
-- 9. 地点标记表 (location_pin)
-- ============================================================================
DROP TABLE IF EXISTS t_location_pin;
CREATE TABLE t_location_pin (
                              id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                              name VARCHAR(100) COMMENT '地点名称', -- 地点名称
                              type VARCHAR(50) COMMENT '地点类型', -- 地点类型
                              category VARCHAR(50) COMMENT '地点分类', -- 地点分类
                              latitude DECIMAL(10, 8) COMMENT '纬度', -- 纬度
                              longitude DECIMAL(11, 8) COMMENT '经度', -- 经度
                              address VARCHAR(200) COMMENT '地址', -- 地址
                              description TEXT COMMENT '描述', -- 描述
                              likes INT  DEFAULT 0 COMMENT '点赞数', -- 点赞数
                              visits INT  DEFAULT 0 COMMENT '访问数', -- 访问数
                              is_bookmarked TINYINT  DEFAULT 0 COMMENT '是否收藏', -- 是否收藏
                              last_visit_time DATETIME COMMENT '最后访问时间', -- 最后访问时间
    -- 公共字段
                              create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                              create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                              update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                              update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                              is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                              remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '地点标记表 (t_location_pin)';

-- ============================================================================
-- 10. 社区帖子表 (community_post)
-- ============================================================================
DROP TABLE IF EXISTS t_community_post;
CREATE TABLE t_community_post (
                                id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                                user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID
                                location_id VARCHAR(64) COMMENT '地点ID', -- 地点ID
                                title VARCHAR(200) COMMENT '标题', -- 标题
                                content TEXT COMMENT '内容', -- 内容
                                type VARCHAR(50) COMMENT '帖子类型', -- 帖子类型
                                images JSON COMMENT '图片列表', -- 图片列表
                                tags JSON COMMENT '标签', -- 标签
                                likes INT  DEFAULT 0 COMMENT '点赞数', -- 点赞数
                                view_count INT  DEFAULT 0 COMMENT '浏览数', -- 浏览数
                                comment_count INT  DEFAULT 0 COMMENT '评论数', -- 评论数
                                is_private TINYINT  DEFAULT 0 COMMENT '是否私密', -- 是否私密
    -- 公共字段
                                create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                                create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                                update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                                update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                                is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                                remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社区帖子表 (t_community_post)';

-- ============================================================================
-- 11. 评论表 (comment)
-- ============================================================================
DROP TABLE IF EXISTS t_comment;
CREATE TABLE t_comment (
                         id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                         post_id VARCHAR(64) COMMENT '帖子ID', -- 帖子ID
                         user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID
                         content TEXT COMMENT '评论内容', -- 评论内容
                         reply_to_id VARCHAR(64) COMMENT '回复的评论ID', -- 回复的评论ID
                         likes INT  DEFAULT 0 COMMENT '点赞数', -- 点赞数
    -- 公共字段
                         create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                         create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                         update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                         update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                         is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                         remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '评论表 (t_comment)';

-- ============================================================================
-- 12. 成就表 (achievement)
-- ============================================================================
DROP TABLE IF EXISTS t_achievement;
CREATE TABLE t_achievement (
                             id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                             title VARCHAR(100) COMMENT '成就标题', -- 成就标题
                             description TEXT COMMENT '描述', -- 描述
                             category VARCHAR(50) COMMENT '分类', -- 分类
                             icon VARCHAR(200) COMMENT '图标', -- 图标
                             rarity VARCHAR(20) COMMENT '稀有度', -- 稀有度
                             condition_type VARCHAR(50) COMMENT '条件类型', -- 条件类型
                             condition_value JSON COMMENT '条件值', -- 条件值
                             rewards JSON COMMENT '奖励', -- 奖励
                             unlocked_time DATETIME COMMENT '解锁时间', -- 解锁时间
                             progress DECIMAL(5, 2)  DEFAULT 0.00 COMMENT '进度', -- 进度
                             is_hidden TINYINT  DEFAULT 0 COMMENT '是否隐藏', -- 是否隐藏
    -- 公共字段
                             create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                             create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                             update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                             update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                             is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                             remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成就表 (t_achievement)';

-- ============================================================================
-- 13. 奖励表 (reward)
-- ============================================================================
DROP TABLE IF EXISTS t_reward;
CREATE TABLE t_reward (
                        id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                        topic_id VARCHAR(64) COMMENT '课题ID', -- 课题ID
                        achievement_id VARCHAR(64) COMMENT '成就ID', -- 成就ID
                        type VARCHAR(50) COMMENT '奖励类型', -- 奖励类型
                        name VARCHAR(100) COMMENT '奖励名称', -- 奖励名称
                        description TEXT COMMENT '描述', -- 描述
                        icon VARCHAR(200) COMMENT '图标', -- 图标
                        rarity VARCHAR(20) COMMENT '稀有度', -- 稀有度
                        value JSON COMMENT '奖励值', -- 奖励值
                        earned_time DATETIME COMMENT '获得时间', -- 获得时间
                        is_new TINYINT  DEFAULT 1 COMMENT '是否新获得', -- 是否新获得
    -- 公共字段
                        create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                        create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                        update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                        update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                        is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                        remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '奖励表 (t_reward)';

-- ============================================================================
-- 14. 用户统计表 (user_stats)
-- ============================================================================
DROP TABLE IF EXISTS t_user_stats;
CREATE TABLE t_user_stats (
                            id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                            user_id VARCHAR(64)  UNIQUE COMMENT '用户ID', -- 用户ID
                            total_conversations INT  DEFAULT 0 COMMENT '总对话数', -- 总对话数
                            total_messages INT  DEFAULT 0 COMMENT '总消息数', -- 总消息数
                            total_emotions_recorded INT  DEFAULT 0 COMMENT '总情绪记录数', -- 总情绪记录数
                            topics_completed INT  DEFAULT 0 COMMENT '完成的课题数', -- 完成的课题数
                            achievements_unlocked INT  DEFAULT 0 COMMENT '解锁的成就数', -- 解锁的成就数
                            total_points INT  DEFAULT 0 COMMENT '总积分', -- 总积分
                            consecutive_days INT  DEFAULT 0 COMMENT '连续使用天数', -- 连续使用天数
                            max_consecutive_days INT  DEFAULT 0 COMMENT '最大连续天数', -- 最大连续天数
                            locations_visited INT  DEFAULT 0 COMMENT '访问的地点数', -- 访问的地点数
                            posts_created INT  DEFAULT 0 COMMENT '创建的帖子数', -- 创建的帖子数
                            comments_made INT  DEFAULT 0 COMMENT '评论数', -- 评论数
                            likes_received INT  DEFAULT 0 COMMENT '收到的点赞数', -- 收到的点赞数
                            social_interactions INT  DEFAULT 0 COMMENT '社交互动数', -- 社交互动数
                            -- 日记相关统计
                            diary_posts_created INT  DEFAULT 0 COMMENT '创建的日记数', -- 创建的日记数
                            diary_likes_received INT  DEFAULT 0 COMMENT '日记收到的点赞数', -- 日记收到的点赞数
                            diary_comments_received INT  DEFAULT 0 COMMENT '日记收到的评论数', -- 日记收到的评论数
                            diary_views_received INT  DEFAULT 0 COMMENT '日记收到的浏览数', -- 日记收到的浏览数
                            diary_shares_received INT  DEFAULT 0 COMMENT '日记收到的分享数', -- 日记收到的分享数
                            diary_comments_made INT  DEFAULT 0 COMMENT '发表的日记评论数', -- 发表的日记评论数
                            diary_likes_given INT  DEFAULT 0 COMMENT '给他人日记的点赞数', -- 给他人日记的点赞数
                            featured_diary_count INT  DEFAULT 0 COMMENT '精选日记数量', -- 精选日记数量
                            ai_comments_received INT  DEFAULT 0 COMMENT '收到的AI评论数', -- 收到的AI评论数
    -- 公共字段
                            create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                            create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                            update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                            update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                            is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                            remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户统计表 (t_user_stats)';

-- ============================================================================
-- 16. 用户日记表 (t_diary_post) - 类似朋友圈功能
-- 关联说明: user_id 关联 t_user.id，通过代码逻辑维护关联关系
-- ============================================================================
DROP TABLE IF EXISTS t_diary_post;
CREATE TABLE t_diary_post (
                            id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                            user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)', -- 用户ID (关联t_user.id)
                            title VARCHAR(200) COMMENT '日记标题', -- 日记标题
                            content TEXT COMMENT '日记内容', -- 日记内容
                            images JSON COMMENT '图片列表 (存储图片URL数组)', -- 图片列表 (存储图片URL数组)
                            videos JSON COMMENT '视频列表 (存储视频URL数组)', -- 视频列表 (存储视频URL数组)
                            location VARCHAR(200) COMMENT '发布地点', -- 发布地点
                            latitude DECIMAL(10, 8) COMMENT '纬度', -- 纬度
                            longitude DECIMAL(11, 8) COMMENT '经度', -- 经度
                            weather VARCHAR(50) COMMENT '天气信息', -- 天气信息
                            mood VARCHAR(50) COMMENT '心情状态', -- 心情状态
                            mood_score DECIMAL(3, 2) COMMENT '心情评分 (0-10)', -- 心情评分 (0-10)
                            tags JSON COMMENT '标签列表', -- 标签列表
                            is_public TINYINT  DEFAULT 1 COMMENT '是否公开: 0-仅自己可见, 1-公开', -- 是否公开: 0-仅自己可见, 1-公开
                            is_anonymous TINYINT  DEFAULT 0 COMMENT '是否匿名发布: 0-实名, 1-匿名', -- 是否匿名发布: 0-实名, 1-匿名
                            view_count INT  DEFAULT 0 COMMENT '浏览数', -- 浏览数
                            like_count INT  DEFAULT 0 COMMENT '点赞数', -- 点赞数
                            comment_count INT  DEFAULT 0 COMMENT '评论数', -- 评论数
                            share_count INT  DEFAULT 0 COMMENT '分享数', -- 分享数
                            ai_comment TEXT COMMENT 'AI评论内容', -- AI评论内容
                            ai_comment_time DATETIME COMMENT 'AI评论时间', -- AI评论时间
                            ai_emotion_analysis JSON COMMENT 'AI情绪分析结果', -- AI情绪分析结果
                            ai_sentiment_score DECIMAL(3, 2) COMMENT 'AI情感评分 (-1到1)', -- AI情感评分 (-1到1)
                            ai_keywords JSON COMMENT 'AI提取的关键词', -- AI提取的关键词
                            ai_suggestions TEXT COMMENT 'AI建议', -- AI建议
                            publish_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', -- 发布时间
                            last_comment_time DATETIME COMMENT '最后评论时间', -- 最后评论时间
                            status VARCHAR(20)  DEFAULT 'published' COMMENT '状态: draft-草稿, published-已发布, hidden-隐藏, deleted-已删除', -- 状态: draft-草稿, published-已发布, hidden-隐藏, deleted-已删除
                            priority INT  DEFAULT 0 COMMENT '优先级 (用于置顶功能)', -- 优先级 (用于置顶功能)
                            featured TINYINT  DEFAULT 0 COMMENT '是否精选: 0-普通, 1-精选', -- 是否精选: 0-普通, 1-精选
                            metadata JSON COMMENT '扩展元数据', -- 扩展元数据
    -- 公共字段
                            create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                            create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                            update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                            update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                            is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                            remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户日记表 - 类似朋友圈功能 (t_diary_post)';

-- ============================================================================
-- 17. 日记评论表 (t_diary_comment)
-- 关联说明: diary_id 关联 t_diary_post.id，user_id 关联 t_user.id，通过代码逻辑维护关联关系
-- ============================================================================
DROP TABLE IF EXISTS t_diary_comment;
CREATE TABLE t_diary_comment (
                               id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                               diary_id VARCHAR(64) COMMENT '日记ID (关联t_diary_post.id)', -- 日记ID (关联t_diary_post.id)
                               user_id VARCHAR(64) COMMENT '评论用户ID (关联t_user.id)', -- 评论用户ID (关联t_user.id)
                               parent_comment_id VARCHAR(64) COMMENT '父评论ID (用于回复功能)', -- 父评论ID (用于回复功能)
                               content TEXT COMMENT '评论内容', -- 评论内容
                               images JSON COMMENT '评论图片 (存储图片URL数组)', -- 评论图片 (存储图片URL数组)
                               comment_type VARCHAR(20)  DEFAULT 'user' COMMENT '评论类型: user-用户评论, ai-AI评论, system-系统评论', -- 评论类型: user-用户评论, ai-AI评论, system-系统评论
                               ai_comment_source VARCHAR(50) COMMENT 'AI评论来源 (如: emotion_analysis, sentiment_analysis)', -- AI评论来源 (如: emotion_analysis, sentiment_analysis)
                               like_count INT  DEFAULT 0 COMMENT '点赞数', -- 点赞数
                               reply_count INT  DEFAULT 0 COMMENT '回复数', -- 回复数
                               is_anonymous TINYINT  DEFAULT 0 COMMENT '是否匿名评论: 0-实名, 1-匿名', -- 是否匿名评论: 0-实名, 1-匿名
                               is_top TINYINT  DEFAULT 0 COMMENT '是否置顶: 0-普通, 1-置顶', -- 是否置顶: 0-普通, 1-置顶
                               status VARCHAR(20)  DEFAULT 'published' COMMENT '状态: published-已发布, hidden-隐藏, deleted-已删除', -- 状态: published-已发布, hidden-隐藏, deleted-已删除
                               publish_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', -- 发布时间
                               last_reply_time DATETIME COMMENT '最后回复时间', -- 最后回复时间
                               emotion_score DECIMAL(3, 2) COMMENT '情绪评分', -- 情绪评分
                               sentiment_score DECIMAL(3, 2) COMMENT '情感评分', -- 情感评分
                               metadata JSON COMMENT '扩展元数据', -- 扩展元数据
    -- 公共字段
                               create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                               create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                               update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                               update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                               is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                               remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '日记评论表 (t_diary_comment)';

-- ============================================================================
-- 18. 访客用户表 (guest_user)
-- ============================================================================
DROP TABLE IF EXISTS t_guest_user;
CREATE TABLE t_guest_user (
                            id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                            guest_user_id VARCHAR(50)  UNIQUE COMMENT '访客用户ID (格式: guest_xxx)', -- 访客用户ID (格式: guest_xxx)
                            ip_address VARCHAR(45) COMMENT '客户端IP地址 (支持IPv6)', -- 客户端IP地址 (支持IPv6)
                            user_agent TEXT COMMENT '用户代理信息', -- 用户代理信息
                            nickname VARCHAR(50) COMMENT '访客昵称', -- 访客昵称
                            avatar VARCHAR(500) COMMENT '访客头像', -- 访客头像
                            last_active_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间
                            conversation_count INT  DEFAULT 0 COMMENT '会话数量', -- 会话数量
                            message_count INT  DEFAULT 0 COMMENT '消息数量', -- 消息数量
                            location VARCHAR(100) COMMENT 'IP地址的地理位置信息', -- IP地址的地理位置信息
                            device_info VARCHAR(200) COMMENT '设备信息', -- 设备信息
    -- 公共字段
                            create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                            create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                            update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                            update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                            is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                            remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '访客用户表 (t_guest_user)';

-- ============================================================================
-- 创建索引以提高查询性能
-- 注意: MySQL的CREATE INDEX不支持IF NOT EXISTS
-- 如果索引已存在，重复执行会产生警告但不会中断脚本执行
-- ============================================================================
-- t_user表索引
CREATE INDEX idx_user_account ON t_user (account);
CREATE INDEX idx_user_username ON t_user (username);
CREATE INDEX idx_user_email ON t_user (email);
CREATE INDEX idx_user_phone ON t_user (phone);
CREATE INDEX idx_user_last_active_time ON t_user (last_active_time);
CREATE INDEX idx_user_create_time ON t_user (create_time);
CREATE INDEX idx_user_member_level ON t_user (member_level);
CREATE INDEX idx_user_status ON t_user (status);
CREATE INDEX idx_user_is_verified ON t_user (is_verified);
CREATE INDEX idx_user_create_by ON t_user (create_by);
CREATE INDEX idx_user_update_by ON t_user (update_by);
CREATE INDEX idx_user_is_deleted ON t_user (is_deleted);
CREATE INDEX idx_user_third_party_id ON t_user (third_party_id);
CREATE INDEX idx_user_third_party_type ON t_user (third_party_type);

-- t_conversation表索引
CREATE INDEX idx_conversation_user_id ON t_conversation (user_id);
CREATE INDEX idx_conversation_start_time ON t_conversation (start_time);
CREATE INDEX idx_conversation_user_id_start_time ON t_conversation (user_id, start_time);
CREATE INDEX idx_conversation_primary_emotion ON t_conversation (primary_emotion);
CREATE INDEX idx_conversation_end_time ON t_conversation (end_time);
CREATE INDEX idx_conversation_create_time ON t_conversation (create_time);
CREATE INDEX idx_conversation_coze_conversation_id ON t_conversation (coze_conversation_id);
CREATE INDEX idx_conversation_status ON t_conversation (status);
CREATE INDEX idx_conversation_last_active_time ON t_conversation (last_active_time);
CREATE INDEX idx_conversation_create_by ON t_conversation (create_by);
CREATE INDEX idx_conversation_update_by ON t_conversation (update_by);
CREATE INDEX idx_conversation_is_deleted ON t_conversation (is_deleted);
CREATE INDEX idx_conversation_user_type ON t_conversation (user_type);
CREATE INDEX idx_conversation_emotion_trend ON t_conversation (emotion_trend);
CREATE INDEX idx_conversation_confidence ON t_conversation (confidence);
CREATE INDEX idx_conversation_client_ip ON t_conversation (client_ip);

-- t_message表索引
CREATE INDEX idx_message_conversation_id ON t_message (conversation_id);
CREATE INDEX idx_message_timestamp ON t_message (timestamp);
CREATE INDEX idx_message_conversation_id_timestamp ON t_message (conversation_id, timestamp);
CREATE INDEX idx_message_sender ON t_message (sender);
CREATE INDEX idx_message_type ON t_message (type);
CREATE INDEX idx_message_is_read ON t_message (is_read);
CREATE INDEX idx_message_create_time ON t_message (create_time);
CREATE INDEX idx_message_coze_chat_id ON t_message (coze_chat_id);
CREATE INDEX idx_message_status ON t_message (status);
CREATE INDEX idx_message_parent_message_id ON t_message (parent_message_id);
CREATE INDEX idx_message_create_by ON t_message (create_by);
CREATE INDEX idx_message_update_by ON t_message (update_by);
CREATE INDEX idx_message_is_deleted ON t_message (is_deleted);

-- t_coze_api_call表索引
CREATE INDEX idx_coze_api_call_conversation_id ON t_coze_api_call (conversation_id);
CREATE INDEX idx_coze_api_call_message_id ON t_coze_api_call (message_id);
CREATE INDEX idx_coze_api_call_coze_chat_id ON t_coze_api_call (coze_chat_id);
CREATE INDEX idx_coze_api_call_bot_id ON t_coze_api_call (bot_id);
CREATE INDEX idx_coze_api_call_user_id ON t_coze_api_call (user_id);
CREATE INDEX idx_coze_api_call_status ON t_coze_api_call (status);
CREATE INDEX idx_coze_api_call_final_status ON t_coze_api_call (final_status);
CREATE INDEX idx_coze_api_call_start_time ON t_coze_api_call (start_time);
CREATE INDEX idx_coze_api_call_request_type ON t_coze_api_call (request_type);
CREATE INDEX idx_coze_api_call_client_ip ON t_coze_api_call (client_ip);
CREATE INDEX idx_coze_api_call_session_id ON t_coze_api_call (session_id);
CREATE INDEX idx_coze_api_call_trace_id ON t_coze_api_call (trace_id);
CREATE INDEX idx_coze_api_call_user_status ON t_coze_api_call (user_id, status);
CREATE INDEX idx_coze_api_call_conversation_time ON t_coze_api_call (conversation_id, start_time);

-- t_emotion_analysis表索引
CREATE INDEX idx_emotion_analysis_user_id ON t_emotion_analysis (user_id);
CREATE INDEX idx_emotion_analysis_message_id ON t_emotion_analysis (message_id);
CREATE INDEX idx_emotion_analysis_primary_emotion ON t_emotion_analysis (primary_emotion);
CREATE INDEX idx_emotion_analysis_analysis_time ON t_emotion_analysis (analysis_time);
CREATE INDEX idx_emotion_analysis_create_time ON t_emotion_analysis (create_time);
CREATE INDEX idx_emotion_analysis_create_by ON t_emotion_analysis (create_by);
CREATE INDEX idx_emotion_analysis_update_by ON t_emotion_analysis (update_by);
CREATE INDEX idx_emotion_analysis_is_deleted ON t_emotion_analysis (is_deleted);

-- t_emotion_record表索引
CREATE INDEX idx_emotion_record_user_id ON t_emotion_record (user_id);
CREATE INDEX idx_emotion_record_date ON t_emotion_record (record_date);
CREATE INDEX idx_emotion_record_emotion_type ON t_emotion_record (emotion_type);
CREATE INDEX idx_emotion_record_user_id_date ON t_emotion_record (user_id, record_date);
CREATE INDEX idx_emotion_record_user_id_emotion_type ON t_emotion_record (user_id, emotion_type);
CREATE INDEX idx_emotion_record_intensity ON t_emotion_record (intensity);
CREATE INDEX idx_emotion_record_create_time ON t_emotion_record (create_time);
CREATE INDEX idx_emotion_record_create_by ON t_emotion_record (create_by);
CREATE INDEX idx_emotion_record_update_by ON t_emotion_record (update_by);
CREATE INDEX idx_emotion_record_is_deleted ON t_emotion_record (is_deleted);

-- t_growth_topic表索引
CREATE INDEX idx_growth_topic_category ON t_growth_topic (category);
CREATE INDEX idx_growth_topic_difficulty ON t_growth_topic (difficulty);
CREATE INDEX idx_growth_topic_is_unlocked ON t_growth_topic (is_unlocked);
CREATE INDEX idx_growth_topic_progress ON t_growth_topic (progress);
CREATE INDEX idx_growth_topic_completed_time ON t_growth_topic (completed_time);
CREATE INDEX idx_growth_topic_category_difficulty ON t_growth_topic (category, difficulty);
CREATE INDEX idx_growth_topic_create_time ON t_growth_topic (create_time);

-- t_topic_interaction表索引
CREATE INDEX idx_topic_interaction_topic_id ON t_topic_interaction (topic_id);
CREATE INDEX idx_topic_interaction_type ON t_topic_interaction (type);
CREATE INDEX idx_topic_interaction_completed_time ON t_topic_interaction (completed_time);
CREATE INDEX idx_topic_interaction_rating ON t_topic_interaction (rating);
CREATE INDEX idx_topic_interaction_topic_id_type ON t_topic_interaction (topic_id, type);
CREATE INDEX idx_topic_interaction_create_time ON t_topic_interaction (create_time);

-- t_location_pin表索引
CREATE INDEX idx_location_pin_latitude_longitude ON t_location_pin (latitude, longitude);
CREATE INDEX idx_location_pin_type ON t_location_pin (type);
CREATE INDEX idx_location_pin_category ON t_location_pin (category);
CREATE INDEX idx_location_pin_create_by ON t_location_pin (create_by);
CREATE INDEX idx_location_pin_likes ON t_location_pin (likes);
CREATE INDEX idx_location_pin_visits ON t_location_pin (visits);
CREATE INDEX idx_location_pin_is_bookmarked ON t_location_pin (is_bookmarked);
CREATE INDEX idx_location_pin_type_category ON t_location_pin (type, category);
CREATE INDEX idx_location_pin_create_time ON t_location_pin (create_time);
CREATE INDEX idx_location_pin_last_visit_time ON t_location_pin (last_visit_time);

-- t_community_post表索引
CREATE INDEX idx_community_post_user_id ON t_community_post (user_id);
CREATE INDEX idx_community_post_location_id ON t_community_post (location_id);
CREATE INDEX idx_community_post_create_time ON t_community_post (create_time);
CREATE INDEX idx_community_post_type ON t_community_post (type);
CREATE INDEX idx_community_post_likes ON t_community_post (likes);
CREATE INDEX idx_community_post_view_count ON t_community_post (view_count);
CREATE INDEX idx_community_post_is_private ON t_community_post (is_private);
CREATE INDEX idx_community_post_user_id_create_time ON t_community_post (user_id, create_time);
CREATE INDEX idx_community_post_type_create_time ON t_community_post (type, create_time);

-- t_comment表索引
CREATE INDEX idx_comment_post_id ON t_comment (post_id);
CREATE INDEX idx_comment_user_id ON t_comment (user_id);
CREATE INDEX idx_comment_reply_to_id ON t_comment (reply_to_id);
CREATE INDEX idx_comment_create_time ON t_comment (create_time);
CREATE INDEX idx_comment_likes ON t_comment (likes);
CREATE INDEX idx_comment_post_id_create_time ON t_comment (post_id, create_time);

-- t_achievement表索引
CREATE INDEX idx_achievement_category ON t_achievement (category);
CREATE INDEX idx_achievement_rarity ON t_achievement (rarity);
CREATE INDEX idx_achievement_unlocked_time ON t_achievement (unlocked_time);
CREATE INDEX idx_achievement_is_hidden ON t_achievement (is_hidden);
CREATE INDEX idx_achievement_progress ON t_achievement (progress);
CREATE INDEX idx_achievement_category_rarity ON t_achievement (category, rarity);
CREATE INDEX idx_achievement_create_time ON t_achievement (create_time);

-- t_reward表索引
CREATE INDEX idx_reward_topic_id ON t_reward (topic_id);
CREATE INDEX idx_reward_achievement_id ON t_reward (achievement_id);
CREATE INDEX idx_reward_type ON t_reward (type);
CREATE INDEX idx_reward_earned_time ON t_reward (earned_time);
CREATE INDEX idx_reward_rarity ON t_reward (rarity);
CREATE INDEX idx_reward_is_new ON t_reward (is_new);
CREATE INDEX idx_reward_type_earned_time ON t_reward (type, earned_time);
CREATE INDEX idx_reward_create_time ON t_reward (create_time);

-- t_user_stats表索引
CREATE INDEX idx_user_stats_user_id ON t_user_stats (user_id);
CREATE INDEX idx_user_stats_total_points ON t_user_stats (total_points);
CREATE INDEX idx_user_stats_consecutive_days ON t_user_stats (consecutive_days);
CREATE INDEX idx_user_stats_max_consecutive_days ON t_user_stats (max_consecutive_days);
CREATE INDEX idx_user_stats_social_interactions ON t_user_stats (social_interactions);
CREATE INDEX idx_user_stats_update_time ON t_user_stats (update_time);
CREATE INDEX idx_user_stats_create_time ON t_user_stats (create_time);

-- t_user_stats表日记相关索引
CREATE INDEX idx_user_stats_diary_posts_created ON t_user_stats (diary_posts_created);
CREATE INDEX idx_user_stats_diary_likes_received ON t_user_stats (diary_likes_received);
CREATE INDEX idx_user_stats_diary_comments_received ON t_user_stats (diary_comments_received);
CREATE INDEX idx_user_stats_diary_views_received ON t_user_stats (diary_views_received);
CREATE INDEX idx_user_stats_featured_diary_count ON t_user_stats (featured_diary_count);
CREATE INDEX idx_user_stats_ai_comments_received ON t_user_stats (ai_comments_received);

-- t_diary_post表索引
CREATE INDEX idx_diary_post_user_id ON t_diary_post (user_id);
CREATE INDEX idx_diary_post_publish_time ON t_diary_post (publish_time);
CREATE INDEX idx_diary_post_last_comment_time ON t_diary_post (last_comment_time);
CREATE INDEX idx_diary_post_status ON t_diary_post (status);
CREATE INDEX idx_diary_post_priority ON t_diary_post (priority);
CREATE INDEX idx_diary_post_featured ON t_diary_post (featured);
CREATE INDEX idx_diary_post_create_time ON t_diary_post (create_time);

-- t_diary_comment表索引
CREATE INDEX idx_diary_comment_diary_id ON t_diary_comment (diary_id);
CREATE INDEX idx_diary_comment_user_id ON t_diary_comment (user_id);
CREATE INDEX idx_diary_comment_parent_comment_id ON t_diary_comment (parent_comment_id);
CREATE INDEX idx_diary_comment_publish_time ON t_diary_comment (publish_time);
CREATE INDEX idx_diary_comment_last_reply_time ON t_diary_comment (last_reply_time);
CREATE INDEX idx_diary_comment_emotion_score ON t_diary_comment (emotion_score);
CREATE INDEX idx_diary_comment_sentiment_score ON t_diary_comment (sentiment_score);
CREATE INDEX idx_diary_comment_create_time ON t_diary_comment (create_time);

-- t_diary_post表复合索引和功能索引
CREATE INDEX idx_diary_post_user_publish ON t_diary_post (user_id, publish_time);
CREATE INDEX idx_diary_post_user_status ON t_diary_post (user_id, status);
CREATE INDEX idx_diary_post_public_publish ON t_diary_post (is_public, publish_time);
CREATE INDEX idx_diary_post_featured_publish ON t_diary_post (featured, publish_time);
CREATE INDEX idx_diary_post_mood_score ON t_diary_post (mood_score);
CREATE INDEX idx_diary_post_ai_sentiment ON t_diary_post (ai_sentiment_score);
CREATE INDEX idx_diary_post_location ON t_diary_post (latitude, longitude);
CREATE INDEX idx_diary_post_like_count ON t_diary_post (like_count);
CREATE INDEX idx_diary_post_comment_count ON t_diary_post (comment_count);
CREATE INDEX idx_diary_post_view_count ON t_diary_post (view_count);
CREATE INDEX idx_diary_post_create_by ON t_diary_post (create_by);
CREATE INDEX idx_diary_post_update_by ON t_diary_post (update_by);
CREATE INDEX idx_diary_post_is_deleted ON t_diary_post (is_deleted);

-- t_diary_comment表复合索引和功能索引
CREATE INDEX idx_diary_comment_diary_publish ON t_diary_comment (diary_id, publish_time);
CREATE INDEX idx_diary_comment_diary_type ON t_diary_comment (diary_id, comment_type);
CREATE INDEX idx_diary_comment_user_publish ON t_diary_comment (user_id, publish_time);
CREATE INDEX idx_diary_comment_parent_publish ON t_diary_comment (parent_comment_id, publish_time);
CREATE INDEX idx_diary_comment_type_publish ON t_diary_comment (comment_type, publish_time);
CREATE INDEX idx_diary_comment_status ON t_diary_comment (status);
CREATE INDEX idx_diary_comment_is_top ON t_diary_comment (is_top);
CREATE INDEX idx_diary_comment_like_count ON t_diary_comment (like_count);
CREATE INDEX idx_diary_comment_reply_count ON t_diary_comment (reply_count);
CREATE INDEX idx_diary_comment_ai_source ON t_diary_comment (ai_comment_source);
CREATE INDEX idx_diary_comment_create_by ON t_diary_comment (create_by);
CREATE INDEX idx_diary_comment_update_by ON t_diary_comment (update_by);
CREATE INDEX idx_diary_comment_is_deleted ON t_diary_comment (is_deleted);

-- t_guest_user表索引
CREATE INDEX idx_guest_user_guest_user_id ON t_guest_user (guest_user_id);
CREATE INDEX idx_guest_user_ip_address ON t_guest_user (ip_address);
CREATE INDEX idx_guest_user_last_active_time ON t_guest_user (last_active_time);
CREATE INDEX idx_guest_user_conversation_count ON t_guest_user (conversation_count);
CREATE INDEX idx_guest_user_message_count ON t_guest_user (message_count);
CREATE INDEX idx_guest_user_create_time ON t_guest_user (create_time);
CREATE INDEX idx_guest_user_create_by ON t_guest_user (create_by);
CREATE INDEX idx_guest_user_update_by ON t_guest_user (update_by);
CREATE INDEX idx_guest_user_is_deleted ON t_guest_user (is_deleted);

-- ============================================================================
-- 18. 管理员用户表 (admin)
-- ============================================================================
DROP TABLE IF EXISTS t_admin;
CREATE TABLE t_admin (
                       id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
                       account VARCHAR(50) NOT NULL UNIQUE COMMENT '管理员账号', -- 管理员账号
                       password VARCHAR(255) NOT NULL COMMENT '密码(加密后)', -- 密码(加密后)
                       username VARCHAR(50) NOT NULL COMMENT '管理员姓名', -- 管理员姓名
                       email VARCHAR(100) UNIQUE COMMENT '邮箱', -- 邮箱
                       phone VARCHAR(20) UNIQUE COMMENT '手机号', -- 手机号
                       avatar VARCHAR(500) COMMENT '头像URL', -- 头像URL
                       role VARCHAR(20) NOT NULL DEFAULT 'admin' COMMENT '角色: super_admin-超级管理员, admin-管理员, operator-运营', -- 角色: super_admin-超级管理员, admin-管理员, operator-运营
                       permissions JSON COMMENT '权限列表', -- 权限列表
                       status TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常', -- 状态: 0-禁用, 1-正常
                       last_login_time DATETIME COMMENT '最后登录时间', -- 最后登录时间
                       last_login_ip VARCHAR(45) COMMENT '最后登录IP (支持IPv6)', -- 最后登录IP (支持IPv6)
                       login_count INT DEFAULT 0 COMMENT '登录次数', -- 登录次数
                       department VARCHAR(50) COMMENT '所属部门', -- 所属部门
                       position VARCHAR(50) COMMENT '职位', -- 职位
    -- 公共字段
                       create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                       create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                       update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                       update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                       is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                       remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '管理员用户表 (t_admin)';

-- 管理员表索引
CREATE INDEX idx_admin_account ON t_admin (account);
CREATE INDEX idx_admin_email ON t_admin (email);
CREATE INDEX idx_admin_phone ON t_admin (phone);
CREATE INDEX idx_admin_role ON t_admin (role);
CREATE INDEX idx_admin_status ON t_admin (status);
CREATE INDEX idx_admin_create_time ON t_admin (create_time);
CREATE INDEX idx_admin_update_time ON t_admin (update_time);
CREATE INDEX idx_admin_is_deleted ON t_admin (is_deleted);

-- 初始化管理员数据
-- 默认超级管理员账号: admin, 密码: [REDACTED] (BCrypt加密后)
INSERT INTO t_admin (id, account, password, username, email, phone, avatar, role, permissions, status, login_count, department, position, create_time, update_time, is_deleted)
VALUES (
    REPLACE(UUID(), '-', ''),
    'admin',
    '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z2EHCYAKMRgAXMqV.N8VXXxu',
    '系统管理员',
    'admin@emotion-museum.com',
    '13800138000',
    NULL,
    'super_admin',
    '["*"]',
    1,
    0,
    '技术部',
    '系统管理员',
    NOW(),
    NOW(),
    0
);

-- ============================================================================
-- 数据库统计信息
-- ============================================================================
SELECT
    COUNT(*) as total_tables
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_SCHEMA = 'emotion'
    AND TABLE_NAME LIKE 't\_%' ESCAPE '\\';

-- 显示创建的表
SELECT
    TABLE_NAME as table_name,
    TABLE_COMMENT as comment,
    ENGINE as engine
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_SCHEMA = 'emotion'
    AND TABLE_NAME LIKE 't\_%' ESCAPE '\\'
ORDER BY
    TABLE_NAME;

-- ============================================================================
-- 19. AI接口配置表 (t_ai_config)
-- 用于存储各种AI接口的调用配置，支持从配置文件迁移到数据库管理
-- ============================================================================
DROP TABLE IF EXISTS t_ai_config;
CREATE TABLE t_ai_config (
    id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
    config_name VARCHAR(100) NOT NULL COMMENT '配置名称',
    config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键值 (唯一标识)',
    config_type VARCHAR(50) NOT NULL DEFAULT 'coze' COMMENT '配置类型: coze-扣子, openai-OpenAI, claude-Claude, gemini-Gemini等',
    provider VARCHAR(50) NOT NULL COMMENT '服务提供商: coze, openai, anthropic, google等',

    -- API基础配置
    api_base_url VARCHAR(500) NOT NULL COMMENT 'API基础URL',
    api_token VARCHAR(1000) NOT NULL COMMENT 'API访问令牌 (加密存储)',
    api_version VARCHAR(20) COMMENT 'API版本',

    -- 模型配置
    model_name VARCHAR(100) COMMENT '模型名称',
    bot_id VARCHAR(100) COMMENT 'Bot ID (Coze专用)',
    workflow_id VARCHAR(100) COMMENT 'Workflow ID (Coze专用)',

    -- 请求配置
    timeout_ms INT DEFAULT 30000 COMMENT '超时时间(毫秒)',
    retry_count INT DEFAULT 3 COMMENT '重试次数',
    retry_delay_ms INT DEFAULT 1000 COMMENT '重试延迟(毫秒)',
    max_tokens INT DEFAULT 4000 COMMENT '最大Token数',
    temperature DECIMAL(3,2) DEFAULT 0.7 COMMENT '温度参数 (0.0-2.0)',
    top_p DECIMAL(3,2) DEFAULT 1.0 COMMENT 'Top-p参数 (0.0-1.0)',

    -- 功能配置
    support_stream TINYINT DEFAULT 1 COMMENT '是否支持流式输出: 0-不支持, 1-支持',
    support_function_call TINYINT DEFAULT 0 COMMENT '是否支持函数调用: 0-不支持, 1-支持',
    support_vision TINYINT DEFAULT 0 COMMENT '是否支持视觉理解: 0-不支持, 1-支持',
    support_file_upload TINYINT DEFAULT 0 COMMENT '是否支持文件上传: 0-不支持, 1-支持',

    -- 使用场景配置
    usage_scenario VARCHAR(100) NOT NULL COMMENT '使用场景: chat-聊天, summary-总结, emotion_analysis-情绪分析, content_generation-内容生成等',
    priority INT DEFAULT 0 COMMENT '优先级 (数值越大优先级越高)',

    -- 费用配置
    input_price_per_1k DECIMAL(10,6) DEFAULT 0.000000 COMMENT '输入Token价格(每1K)',
    output_price_per_1k DECIMAL(10,6) DEFAULT 0.000000 COMMENT '输出Token价格(每1K)',
    currency VARCHAR(10) DEFAULT 'USD' COMMENT '货币单位',

    -- 限制配置
    rate_limit_per_minute INT DEFAULT 60 COMMENT '每分钟请求限制',
    rate_limit_per_hour INT DEFAULT 3600 COMMENT '每小时请求限制',
    rate_limit_per_day INT DEFAULT 86400 COMMENT '每日请求限制',

    -- 状态配置
    is_enabled TINYINT DEFAULT 1 COMMENT '是否启用: 0-禁用, 1-启用',
    is_default TINYINT DEFAULT 0 COMMENT '是否为默认配置: 0-否, 1-是',
    environment VARCHAR(20) DEFAULT 'production' COMMENT '环境: development-开发, testing-测试, production-生产',

    -- 扩展配置
    custom_headers JSON COMMENT '自定义请求头',
    custom_params JSON COMMENT '自定义参数',
    webhook_url VARCHAR(500) COMMENT 'Webhook回调地址',

    -- 监控配置
    health_check_url VARCHAR(500) COMMENT '健康检查URL',
    health_check_interval_minutes INT DEFAULT 5 COMMENT '健康检查间隔(分钟)',

    -- 描述信息
    description TEXT COMMENT '配置描述',
    usage_notes TEXT COMMENT '使用说明',

    -- 公共字段
    create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
    create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
    update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
    update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
    is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
    remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'AI接口配置表 (t_ai_config)';

-- AI配置表索引
CREATE INDEX idx_ai_config_config_key ON t_ai_config (config_key);
CREATE INDEX idx_ai_config_config_type ON t_ai_config (config_type);
CREATE INDEX idx_ai_config_provider ON t_ai_config (provider);
CREATE INDEX idx_ai_config_usage_scenario ON t_ai_config (usage_scenario);
CREATE INDEX idx_ai_config_is_enabled ON t_ai_config (is_enabled);
CREATE INDEX idx_ai_config_is_default ON t_ai_config (is_default);
CREATE INDEX idx_ai_config_environment ON t_ai_config (environment);
CREATE INDEX idx_ai_config_priority ON t_ai_config (priority);
CREATE INDEX idx_ai_config_create_time ON t_ai_config (create_time);
CREATE INDEX idx_ai_config_update_time ON t_ai_config (update_time);
CREATE INDEX idx_ai_config_is_deleted ON t_ai_config (is_deleted);
CREATE INDEX idx_ai_config_scenario_enabled ON t_ai_config (usage_scenario, is_enabled);
CREATE INDEX idx_ai_config_type_enabled ON t_ai_config (config_type, is_enabled);

-- ============================================================================
-- AI配置初始化数据
-- 基于AiChatServiceImpl.java中的配置参数创建默认配置
-- ============================================================================

-- 1. Coze聊天配置 (默认聊天场景)
INSERT INTO t_ai_config (
    id, config_name, config_key, config_type, provider,
    api_base_url, api_token, api_version,
    bot_id, workflow_id,
    timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature,
    support_stream, support_function_call, support_vision, support_file_upload,
    usage_scenario, priority, is_enabled, is_default, environment,
    input_price_per_1k, output_price_per_1k, currency,
    rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day,
    description, usage_notes,
    create_time, update_time, is_deleted
) VALUES (
    REPLACE(UUID(), '-', ''),
    'Coze聊天机器人配置',
    'coze.chat.default',
    'coze',
    'coze',
    'https://api.coze.cn',
    'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL',
    'v3',
    '7523042446285439016',
    '7523047462895796287',
    30000, 3, 1000, 4000, 0.7,
    1, 1, 0, 0,
    'chat', 100, 1, 1, 'production',
    0.001000, 0.002000, 'USD',
    60, 3600, 86400,
    'Coze平台的默认聊天机器人配置，用于日常情绪对话',
    '1. 需要配置有效的API Token\n2. 需要配置Bot ID和Workflow ID\n3. 支持流式输出和函数调用',
    NOW(), NOW(), 0
);

-- 2. Coze总结配置 (专用于对话总结)
INSERT INTO t_ai_config (
    id, config_name, config_key, config_type, provider,
    api_base_url, api_token, api_version,
    bot_id, workflow_id,
    timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature,
    support_stream, support_function_call, support_vision, support_file_upload,
    usage_scenario, priority, is_enabled, is_default, environment,
    input_price_per_1k, output_price_per_1k, currency,
    rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day,
    description, usage_notes,
    create_time, update_time, is_deleted
) VALUES (
    REPLACE(UUID(), '-', ''),
    'Coze对话总结配置',
    'coze.summary.default',
    'coze',
    'coze',
    'https://api.coze.cn',
    'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL',
    'v3',
    '7529062814150295595',
    '7523047462895796287',
    30000, 3, 1000, 8000, 0.3,
    0, 0, 0, 0,
    'summary', 90, 1, 1, 'production',
    0.001000, 0.002000, 'USD',
    30, 1800, 43200,
    'Coze平台的对话总结配置，专门用于生成对话摘要和情绪分析',
    '1. 使用较低的temperature以获得更稳定的总结结果\n2. 增加max_tokens以支持长文本总结\n3. 不支持流式输出',
    NOW(), NOW(), 0
);

-- 3. Coze情绪分析配置 (专用于情绪分析)
INSERT INTO t_ai_config (
    id, config_name, config_key, config_type, provider,
    api_base_url, api_token, api_version,
    bot_id, workflow_id,
    timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature,
    support_stream, support_function_call, support_vision, support_file_upload,
    usage_scenario, priority, is_enabled, is_default, environment,
    input_price_per_1k, output_price_per_1k, currency,
    rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day,
    description, usage_notes,
    create_time, update_time, is_deleted
) VALUES (
    REPLACE(UUID(), '-', ''),
    'Coze情绪分析配置',
    'coze.emotion_analysis.default',
    'coze',
    'coze',
    'https://api.coze.cn',
    'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL',
    'v3',
    '7529062814150295595', -- 复用总结bot，或配置专门的情绪分析bot
    '7523047462895796287', -- 复用总结workflow，或配置专门的情绪分析workflow
    45000, 3, 1500, 6000, 0.2,
    0, 1, 0, 0,
    'emotion_analysis', 95, 1, 1, 'production',
    0.001000, 0.002000, 'USD',
    20, 1200, 28800,
    'Coze平台的情绪分析配置，用于分析用户聊天记录的情绪状态',
    '1. 使用最低的temperature以获得准确的情绪分析\n2. 支持函数调用以获取结构化的分析结果\n3. 增加超时时间以处理复杂的情绪分析',
    NOW(), NOW(), 0
);

-- 4. 备用OpenAI配置 (作为备选方案)
INSERT INTO t_ai_config (
    id, config_name, config_key, config_type, provider,
    api_base_url, api_token, api_version,
    model_name,
    timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, top_p,
    support_stream, support_function_call, support_vision, support_file_upload,
    usage_scenario, priority, is_enabled, is_default, environment,
    input_price_per_1k, output_price_per_1k, currency,
    rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day,
    description, usage_notes,
    create_time, update_time, is_deleted
) VALUES (
    REPLACE(UUID(), '-', ''),
    'OpenAI GPT-4备用配置',
    'openai.gpt4.backup',
    'openai',
    'openai',
    'https://api.openai.com/v1',
    'sk-placeholder-openai-api-key-here', -- 需要配置实际的OpenAI API Key
    'v1',
    'gpt-4-turbo-preview',
    30000, 3, 2000, 4000, 0.7, 1.0,
    1, 1, 1, 1,
    'chat', 50, 0, 0, 'production', -- 默认禁用，作为备用
    0.010000, 0.030000, 'USD',
    60, 3600, 86400,
    'OpenAI GPT-4备用配置，当Coze服务不可用时的备选方案',
    '1. 需要配置有效的OpenAI API Key\n2. 支持视觉理解和文件上传\n3. 成本较高，建议作为备用方案',
    NOW(), NOW(), 0
);

-- 5. 开发环境测试配置
INSERT INTO t_ai_config (
    id, config_name, config_key, config_type, provider,
    api_base_url, api_token, api_version,
    bot_id, workflow_id,
    timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature,
    support_stream, support_function_call, support_vision, support_file_upload,
    usage_scenario, priority, is_enabled, is_default, environment,
    input_price_per_1k, output_price_per_1k, currency,
    rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day,
    description, usage_notes,
    create_time, update_time, is_deleted
) VALUES (
    REPLACE(UUID(), '-', ''),
    'Coze开发环境测试配置',
    'coze.chat.development',
    'coze',
    'coze',
    'https://api.coze.cn',
    'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL', -- 开发环境可使用相同token或配置专门的开发token
    'v3',
    '7523042446285439016', -- 开发环境可使用相同bot-id或配置专门的开发bot-id
    '7523047462895796287', -- 开发环境可使用相同workflow-id或配置专门的开发workflow-id
    10000, 2, 500, 2000, 0.8,
    1, 1, 0, 0,
    'chat', 80, 1, 0, 'development',
    0.000500, 0.001000, 'USD',
    120, 7200, 172800,
    'Coze平台开发环境测试配置，用于开发和调试',
    '1. 开发环境专用配置\n2. 较短的超时时间和更高的请求限制\n3. 用于功能测试和调试',
    NOW(), NOW(), 0
);




-- ============================================================================
-- 19. 用户档案表 (t_user_profile)
-- ============================================================================
DROP TABLE IF EXISTS t_user_profile;
CREATE TABLE t_user_profile (
                                id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
                                user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)',
                                nickname VARCHAR(50) NOT NULL COMMENT '昵称 (必填)',
                                gender VARCHAR(20) DEFAULT 'secret' COMMENT '性别',
                                zodiac VARCHAR(20) COMMENT '星座',
                                mbti VARCHAR(20) NOT NULL COMMENT 'MBTI人格类型 (必填)',
                                hobbies JSON COMMENT '兴趣爱好列表',
                                childhood_date DATE COMMENT '童年记忆日期',
                                childhood_content TEXT COMMENT '童年记忆内容',
                                peak_date DATE COMMENT '高光时刻日期',
                                peak_content TEXT COMMENT '高光时刻内容',
                                valley_date DATE COMMENT '低谷时刻日期',
                                valley_content TEXT COMMENT '低谷时刻内容',
                                future_vision TEXT COMMENT '未来愿景',
                                scripts JSON COMMENT '生成的剧本列表 (JSON)',
                                paths JSON COMMENT '选择的路径列表 (JSON)',
                                status TINYINT DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常',
                                -- 公共字段
                                create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
                                create_time DATETIME  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
                                update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
                                update_time DATETIME  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
                                is_deleted TINYINT  DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
                                remarks VARCHAR(500) COMMENT '备注' -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT '用户个人信息表 (t_user_profile)';

-- t_user_profile表索引
CREATE INDEX idx_user_profile_user_id ON t_user_profile (user_id);
CREATE INDEX idx_user_profile_create_time ON t_user_profile (create_time);


-- ============================================================================
-- 20. 生命事件表 (t_life_event)
-- 存储用户的人生轨迹事件，包括日期、标题、内容、AI回复等
-- 关联说明: user_id 关联 t_user.id
-- ============================================================================
DROP TABLE IF EXISTS t_life_event;
CREATE TABLE t_life_event (
    id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
    user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)',
    
    -- 事件信息
    event_type VARCHAR(50) DEFAULT 'daily_log' COMMENT '事件类型: daily_log-日常记录, milestone-里程碑',
    event_date DATETIME COMMENT '事件日期',
    title VARCHAR(200) COMMENT '事件标题',
    content TEXT COMMENT '事件内容',
    ai_reply TEXT COMMENT 'AI疗愈回复',
    
    -- 情绪分析
    emotion_type VARCHAR(50) COMMENT '情绪类型',
    emotion_score DECIMAL(3, 2) COMMENT '情绪评分',
    
    -- 标签
    tags JSON COMMENT '标签列表',
    
    -- 公共字段
    create_by VARCHAR(64) COMMENT '创建人ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_by VARCHAR(64) COMMENT '更新人ID',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除',
    remarks VARCHAR(500) COMMENT '备注'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '生命事件表 (t_life_event)';

-- t_life_event表索引
CREATE INDEX idx_life_event_user_id ON t_life_event (user_id);
CREATE INDEX idx_life_event_event_date ON t_life_event (event_date);
CREATE INDEX idx_life_event_user_date ON t_life_event (user_id, event_date);
CREATE INDEX idx_life_event_event_type ON t_life_event (event_type);
CREATE INDEX idx_life_event_create_time ON t_life_event (create_time);
CREATE INDEX idx_life_event_is_deleted ON t_life_event (is_deleted);


-- ============================================================================
-- 21. 爽文剧本表 (t_epic_script)
-- 存储用户生成的爽文剧本，包括主题、风格、剧情章节等
-- 关联说明: user_id 关联 t_user.id
-- ============================================================================
DROP TABLE IF EXISTS t_epic_script;
CREATE TABLE t_epic_script (
    id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
    user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)',
    
    -- 剧本基本信息
    title VARCHAR(200) COMMENT '剧本标题',
    theme TEXT COMMENT '剧本主题/渴望',
    style VARCHAR(50) COMMENT '剧本风格: career-职场逆袭, love-情感圆满, fantasy-玄幻觉醒',
    length VARCHAR(20) DEFAULT 'medium' COMMENT '篇幅长度: medium-标准篇, long-长篇',
    
    -- 剧情内容 (四章结构)
    plot_intro TEXT COMMENT '序幕：低谷回响',
    plot_turning TEXT COMMENT '转折：契机出现',
    plot_climax TEXT COMMENT '高潮：命运抉择',
    plot_ending TEXT COMMENT '结局：新的开始',
    
    -- 完整剧情JSON (备用)
    plot_json JSON COMMENT '完整剧情JSON结构',
    
    -- 状态
    is_selected TINYINT DEFAULT 0 COMMENT '是否当前选中: 0-否, 1-是',
    
    -- 公共字段
    create_by VARCHAR(64) COMMENT '创建人ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_by VARCHAR(64) COMMENT '更新人ID',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除',
    remarks VARCHAR(500) COMMENT '备注'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '爽文剧本表 (t_epic_script)';

-- t_epic_script表索引
CREATE INDEX idx_epic_script_user_id ON t_epic_script (user_id);
CREATE INDEX idx_epic_script_style ON t_epic_script (style);
CREATE INDEX idx_epic_script_user_selected ON t_epic_script (user_id, is_selected);
CREATE INDEX idx_epic_script_create_time ON t_epic_script (create_time);
CREATE INDEX idx_epic_script_is_deleted ON t_epic_script (is_deleted);


-- ============================================================================
-- 22. 实现路径表 (t_life_path)
-- 存储基于剧本生成的实现路径规划
-- 关联说明: user_id 关联 t_user.id, script_id 关联 t_epic_script.id
-- ============================================================================
DROP TABLE IF EXISTS t_life_path;
CREATE TABLE t_life_path (
    id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
    user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)',
    script_id VARCHAR(64) NOT NULL COMMENT '关联剧本ID (关联t_epic_script.id)',
    
    -- 路径基本信息
    title VARCHAR(200) COMMENT '路径标题',
    description TEXT COMMENT '路径描述',
    
    -- 路径步骤 (JSON数组)
    steps JSON COMMENT '路径步骤列表',
    
    -- 状态
    status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active-进行中, completed-已完成, archived-已归档',
    progress DECIMAL(5, 2) DEFAULT 0.00 COMMENT '完成进度百分比',
    
    -- 公共字段
    create_by VARCHAR(64) COMMENT '创建人ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_by VARCHAR(64) COMMENT '更新人ID',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除',
    remarks VARCHAR(500) COMMENT '备注'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '实现路径表 (t_life_path)';

-- t_life_path表索引
CREATE INDEX idx_life_path_user_id ON t_life_path (user_id);
CREATE INDEX idx_life_path_script_id ON t_life_path (script_id);
CREATE INDEX idx_life_path_user_script ON t_life_path (user_id, script_id);
CREATE INDEX idx_life_path_status ON t_life_path (status);
CREATE INDEX idx_life_path_create_time ON t_life_path (create_time);
CREATE INDEX idx_life_path_is_deleted ON t_life_path (is_deleted);


-- ============================================================================
-- 23. 路径步骤表 (t_life_path_step) - 可选，用于更细粒度的步骤管理
-- 存储路径的每个步骤详情
-- 关联说明: path_id 关联 t_life_path.id
-- ============================================================================
DROP TABLE IF EXISTS t_life_path_step;
CREATE TABLE t_life_path_step (
    id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键',
    path_id VARCHAR(64) NOT NULL COMMENT '路径ID (关联t_life_path.id)',
    user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)',
    
    -- 步骤信息
    step_order INT DEFAULT 0 COMMENT '步骤顺序',
    phase VARCHAR(100) COMMENT '阶段名称',
    time_frame VARCHAR(50) COMMENT '时间范围',
    content TEXT COMMENT '核心策略内容',
    action TEXT COMMENT '关键行动',
    resources TEXT COMMENT '所需资源',
    habit TEXT COMMENT '养成习惯',
    
    -- 状态
    status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待开始, in_progress-进行中, completed-已完成',
    completed_time DATETIME COMMENT '完成时间',
    
    -- 公共字段
    create_by VARCHAR(64) COMMENT '创建人ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_by VARCHAR(64) COMMENT '更新人ID',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除',
    remarks VARCHAR(500) COMMENT '备注'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '路径步骤表 (t_life_path_step)';

-- t_life_path_step表索引
CREATE INDEX idx_life_path_step_path_id ON t_life_path_step (path_id);
CREATE INDEX idx_life_path_step_user_id ON t_life_path_step (user_id);
CREATE INDEX idx_life_path_step_order ON t_life_path_step (path_id, step_order);
CREATE INDEX idx_life_path_step_status ON t_life_path_step (status);
CREATE INDEX idx_life_path_step_is_deleted ON t_life_path_step (is_deleted);


-- 提交事务
COMMIT;
