commit c0f89a933e04150465ea820d64f95f6e7eda1d5f Author: jianghao <332515344@qq.com> Date: Tue Feb 24 10:49:14 2026 +0800 feat(数据库): 添加数据库迁移脚本支持时间线功能 添加V1.1.0至V1.3.0版本的数据库迁移脚本,包含核心功能优化、搜索评论通知系统以及智能功能 diff --git a/V1.1.0__core_feature_optimization.sql b/V1.1.0__core_feature_optimization.sql new file mode 100644 index 0000000..8aaabcd --- /dev/null +++ b/V1.1.0__core_feature_optimization.sql @@ -0,0 +1,194 @@ +-- ===================================================== +-- Timeline 数据库迁移脚本 +-- 版本: V1.1.0 +-- 日期: 2024 +-- 描述: 第一阶段核心功能优化 - 数据库结构变更 +-- ===================================================== + +-- ----------------------------------------------------- +-- 1. 时间线节点排序字段 +-- 功能: 支持拖拽排序功能 +-- ----------------------------------------------------- + +-- 为 story_item 表添加排序字段 +ALTER TABLE story_item +ADD COLUMN sort_order INT DEFAULT 0 COMMENT '排序值,数值越小越靠前,用于拖拽排序'; + +-- 为排序字段添加索引,优化查询性能 +CREATE INDEX idx_story_item_sort_order +ON story_item(story_instance_id, sort_order, story_item_time DESC); + +-- ----------------------------------------------------- +-- 2. 标签系统表结构 +-- 功能: 支持为时间线节点添加标签 +-- ----------------------------------------------------- + +-- 标签表 +CREATE TABLE IF NOT EXISTS tag ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '标签唯一标识', + name VARCHAR(50) NOT NULL COMMENT '标签名称', + color VARCHAR(20) DEFAULT '#1890ff' COMMENT '标签颜色', + owner_id VARCHAR(64) NOT NULL COMMENT '创建者ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是', + INDEX idx_tag_owner (owner_id), + INDEX idx_tag_name (name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='标签表'; + +-- 时间线节点与标签关联表 +CREATE TABLE IF NOT EXISTS story_item_tag ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + tag_id VARCHAR(64) NOT NULL COMMENT '标签ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + create_id VARCHAR(64) COMMENT '创建者ID', + UNIQUE KEY uk_item_tag (story_item_id, tag_id), + INDEX idx_tag_story_item (tag_id, story_item_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间线节点标签关联表'; + +-- ----------------------------------------------------- +-- 3. 评论系统表结构 +-- 功能: 支持对时间线节点进行评论 +-- ----------------------------------------------------- + +-- 评论表 +CREATE TABLE IF NOT EXISTS story_comment ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '评论唯一标识', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '评论用户ID', + parent_id VARCHAR(64) DEFAULT NULL COMMENT '父评论ID,用于回复功能', + reply_to_user_id VARCHAR(64) DEFAULT NULL COMMENT '回复的用户ID', + content TEXT NOT NULL COMMENT '评论内容', + like_count INT DEFAULT 0 COMMENT '点赞数', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是', + INDEX idx_comment_story_item (story_item_id, create_time DESC), + INDEX idx_comment_user (user_id), + INDEX idx_comment_parent (parent_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表'; + +-- ----------------------------------------------------- +-- 4. 点赞系统表结构 +-- 功能: 支持对时间线节点进行点赞 +-- ----------------------------------------------------- + +-- 点赞表 +CREATE TABLE IF NOT EXISTS story_like ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '点赞用户ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_item_user (story_item_id, user_id), + INDEX idx_like_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='点赞表'; + +-- ----------------------------------------------------- +-- 5. 收藏系统表结构 +-- 功能: 支持收藏时间线节点 +-- ----------------------------------------------------- + +-- 收藏表 +CREATE TABLE IF NOT EXISTS story_favorite ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '收藏记录唯一标识', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '收藏用户ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_item_user (story_item_id, user_id), + INDEX idx_favorite_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表'; + +-- ----------------------------------------------------- +-- 6. 消息通知表结构 +-- 功能: 支持系统消息推送 +-- ----------------------------------------------------- + +-- 消息通知表 +CREATE TABLE IF NOT EXISTS notification ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '消息唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '接收用户ID', + type VARCHAR(20) NOT NULL COMMENT '消息类型: COMMENT/LIKE/MENTION/INVITE/SYSTEM', + title VARCHAR(200) NOT NULL COMMENT '消息标题', + content TEXT COMMENT '消息内容', + related_id VARCHAR(64) COMMENT '关联ID(评论ID/节点ID等)', + related_type VARCHAR(20) COMMENT '关联类型', + sender_id VARCHAR(64) COMMENT '发送者ID', + sender_name VARCHAR(100) COMMENT '发送者名称', + sender_avatar VARCHAR(500) COMMENT '发送者头像', + is_read TINYINT DEFAULT 0 COMMENT '是否已读 0-未读 1-已读', + read_time DATETIME COMMENT '阅读时间', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_notification_user (user_id, is_read, create_time DESC), + INDEX idx_notification_type (type) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表'; + +-- ----------------------------------------------------- +-- 7. 操作历史记录表 +-- 功能: 支持撤销/重做功能 +-- ----------------------------------------------------- + +-- 操作历史表 +CREATE TABLE IF NOT EXISTS operation_history ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '记录唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '操作用户ID', + story_id VARCHAR(64) COMMENT '故事ID', + operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: CREATE/UPDATE/DELETE/REORDER', + target_type VARCHAR(20) NOT NULL COMMENT '目标类型: STORY/STORY_ITEM', + target_id VARCHAR(64) NOT NULL COMMENT '目标ID', + before_data JSON COMMENT '操作前数据快照', + after_data JSON COMMENT '操作后数据快照', + description VARCHAR(200) COMMENT '操作描述', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_history_user_story (user_id, story_id, create_time DESC), + INDEX idx_history_target (target_type, target_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作历史记录表'; + +-- ----------------------------------------------------- +-- 8. 优化现有表索引 +-- 功能: 提升查询性能 +-- ----------------------------------------------------- + +-- 为 story_item 表添加复合索引,优化时间线查询 +CREATE INDEX idx_story_item_time_query +ON story_item(story_instance_id, is_delete, story_item_time DESC); + +-- 为 story_permission 表添加索引 +CREATE INDEX idx_story_permission_user +ON story_permission(user_id, permission_type); + +-- ----------------------------------------------------- +-- 数据迁移说明 +-- ----------------------------------------------------- + +-- 1. sort_order 字段默认值为 0,现有数据无需迁移 +-- 2. 新表均为空表,无需数据迁移 +-- 3. 建议在低峰期执行此脚本 + +-- ----------------------------------------------------- +-- 回滚脚本 (如需回滚,请执行以下语句) +-- ----------------------------------------------------- + +/* +-- 删除新增字段 +ALTER TABLE story_item DROP COLUMN sort_order; + +-- 删除新增索引 +DROP INDEX idx_story_item_sort_order ON story_item; +DROP INDEX idx_story_item_time_query ON story_item; +DROP INDEX idx_story_permission_user ON story_permission; + +-- 删除新增表 +DROP TABLE IF EXISTS operation_history; +DROP TABLE IF EXISTS notification; +DROP TABLE IF EXISTS story_favorite; +DROP TABLE IF EXISTS story_like; +DROP TABLE IF EXISTS story_comment; +DROP TABLE IF EXISTS story_item_tag; +DROP TABLE IF EXISTS tag; +*/ diff --git a/V1.2.0__search_comment_notification.sql b/V1.2.0__search_comment_notification.sql new file mode 100644 index 0000000..5ba1aab --- /dev/null +++ b/V1.2.0__search_comment_notification.sql @@ -0,0 +1,230 @@ +-- ===================================================== +-- Timeline 数据库迁移脚本 +-- 版本: V1.2.0 +-- 日期: 2024 +-- 描述: 第二阶段功能增强 - 搜索、标签、评论、通知系统 +-- ===================================================== + +-- ----------------------------------------------------- +-- 1. 标签系统表结构(如已存在则跳过) +-- ----------------------------------------------------- + +-- 标签表 +CREATE TABLE IF NOT EXISTS tag ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '标签唯一标识', + name VARCHAR(50) NOT NULL COMMENT '标签名称', + color VARCHAR(20) DEFAULT '#1890ff' COMMENT '标签颜色', + owner_id VARCHAR(64) NOT NULL COMMENT '创建者ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是', + INDEX idx_tag_owner (owner_id), + INDEX idx_tag_name (name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='标签表'; + +-- 时间线节点与标签关联表 +CREATE TABLE IF NOT EXISTS story_item_tag ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + tag_id VARCHAR(64) NOT NULL COMMENT '标签ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + create_id VARCHAR(64) COMMENT '创建者ID', + UNIQUE KEY uk_item_tag (story_item_id, tag_id), + INDEX idx_tag_story_item (tag_id, story_item_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间线节点标签关联表'; + +-- ----------------------------------------------------- +-- 2. 评论系统表结构 +-- ----------------------------------------------------- + +-- 评论表 +CREATE TABLE IF NOT EXISTS story_comment ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '评论唯一标识', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '评论用户ID', + parent_id VARCHAR(64) DEFAULT NULL COMMENT '父评论ID,用于回复功能', + reply_to_user_id VARCHAR(64) DEFAULT NULL COMMENT '回复的用户ID', + content TEXT NOT NULL COMMENT '评论内容', + like_count INT DEFAULT 0 COMMENT '点赞数', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是', + INDEX idx_comment_story_item (story_item_id, create_time DESC), + INDEX idx_comment_user (user_id), + INDEX idx_comment_parent (parent_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表'; + +-- ----------------------------------------------------- +-- 3. 点赞系统表结构 +-- ----------------------------------------------------- + +-- 点赞表(节点点赞) +CREATE TABLE IF NOT EXISTS story_item_like ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '点赞用户ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_item_user (story_item_id, user_id), + INDEX idx_like_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节点点赞表'; + +-- 评论点赞表 +CREATE TABLE IF NOT EXISTS comment_like ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + comment_id VARCHAR(64) NOT NULL COMMENT '评论ID', + user_id VARCHAR(64) NOT NULL COMMENT '点赞用户ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_comment_user (comment_id, user_id), + INDEX idx_comment_like_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论点赞表'; + +-- ----------------------------------------------------- +-- 4. 收藏系统表结构 +-- ----------------------------------------------------- + +-- 收藏表 +CREATE TABLE IF NOT EXISTS story_item_favorite ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '收藏记录唯一标识', + story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID', + user_id VARCHAR(64) NOT NULL COMMENT '收藏用户ID', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_item_user (story_item_id, user_id), + INDEX idx_favorite_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表'; + +-- ----------------------------------------------------- +-- 5. 消息通知系统表结构 +-- ----------------------------------------------------- + +-- 消息通知表 +CREATE TABLE IF NOT EXISTS notification ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '消息唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '接收用户ID', + type VARCHAR(20) NOT NULL COMMENT '消息类型: COMMENT/LIKE/MENTION/INVITE/SYSTEM', + title VARCHAR(200) NOT NULL COMMENT '消息标题', + content TEXT COMMENT '消息内容', + related_id VARCHAR(64) COMMENT '关联ID(评论ID/节点ID等)', + related_type VARCHAR(20) COMMENT '关联类型: STORY_ITEM/COMMENT/STORY', + sender_id VARCHAR(64) COMMENT '发送者ID', + sender_name VARCHAR(100) COMMENT '发送者名称', + sender_avatar VARCHAR(500) COMMENT '发送者头像', + is_read TINYINT DEFAULT 0 COMMENT '是否已读 0-未读 1-已读', + read_time DATETIME COMMENT '阅读时间', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_notification_user (user_id, is_read, create_time DESC), + INDEX idx_notification_type (type) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表'; + +-- ----------------------------------------------------- +-- 6. 操作历史记录表(支持撤销/重做) +-- ----------------------------------------------------- + +-- 操作历史表 +CREATE TABLE IF NOT EXISTS operation_history ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '记录唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '操作用户ID', + story_id VARCHAR(64) COMMENT '故事ID', + operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: CREATE/UPDATE/DELETE/REORDER', + target_type VARCHAR(20) NOT NULL COMMENT '目标类型: STORY/STORY_ITEM', + target_id VARCHAR(64) NOT NULL COMMENT '目标ID', + before_data JSON COMMENT '操作前数据快照', + after_data JSON COMMENT '操作后数据快照', + description VARCHAR(200) COMMENT '操作描述', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_history_user_story (user_id, story_id, create_time DESC), + INDEX idx_history_target (target_type, target_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作历史记录表'; + +-- ----------------------------------------------------- +-- 7. 用户消息设置表 +-- ----------------------------------------------------- + +-- 用户消息设置表 +CREATE TABLE IF NOT EXISTS user_notification_setting ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + user_id VARCHAR(64) UNIQUE NOT NULL COMMENT '用户ID', + comment_notify TINYINT DEFAULT 1 COMMENT '评论通知 0-关闭 1-开启', + like_notify TINYINT DEFAULT 1 COMMENT '点赞通知 0-关闭 1-开启', + mention_notify TINYINT DEFAULT 1 COMMENT '@提及通知 0-关闭 1-开启', + invite_notify TINYINT DEFAULT 1 COMMENT '邀请通知 0-关闭 1-开启', + system_notify TINYINT DEFAULT 1 COMMENT '系统通知 0-关闭 1-开启', + email_notify TINYINT DEFAULT 0 COMMENT '邮件通知 0-关闭 1-开启', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户消息设置表'; + +-- ----------------------------------------------------- +-- 8. @提及记录表 +-- ----------------------------------------------------- + +-- @提及表 +CREATE TABLE IF NOT EXISTS mention ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '提及记录唯一标识', + from_user_id VARCHAR(64) NOT NULL COMMENT '提及者ID', + to_user_id VARCHAR(64) NOT NULL COMMENT '被提及者ID', + related_type VARCHAR(20) NOT NULL COMMENT '关联类型: COMMENT/STORY_ITEM', + related_id VARCHAR(64) NOT NULL COMMENT '关联ID', + is_notified TINYINT DEFAULT 0 COMMENT '是否已发送通知 0-否 1-是', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_mention_to (to_user_id, is_notified, create_time DESC), + INDEX idx_mention_related (related_type, related_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='@提及记录表'; + +-- ----------------------------------------------------- +-- 9. 统计字段更新触发器 +-- ----------------------------------------------------- + +-- 为 story_item 表添加统计字段 +ALTER TABLE story_item +ADD COLUMN comment_count INT DEFAULT 0 COMMENT '评论数', +ADD COLUMN like_count INT DEFAULT 0 COMMENT '点赞数', +ADD COLUMN favorite_count INT DEFAULT 0 COMMENT '收藏数'; + +-- ----------------------------------------------------- +-- 10. 索引优化 +-- ----------------------------------------------------- + +-- 为 story_item 表添加复合索引 +CREATE INDEX IF NOT EXISTS idx_story_item_stats +ON story_item(story_instance_id, is_delete, like_count DESC, create_time DESC); + +-- ----------------------------------------------------- +-- 数据迁移说明 +-- ----------------------------------------------------- + +-- 1. 新表均为空表,无需数据迁移 +-- 2. 统计字段默认值为 0,现有数据无需迁移 +-- 3. 建议在低峰期执行此脚本 +-- 4. Elasticsearch 索引需要单独创建和同步 + +-- ----------------------------------------------------- +-- 回滚脚本 (如需回滚,请执行以下语句) +-- ----------------------------------------------------- + +/* +-- 删除新增字段 +ALTER TABLE story_item DROP COLUMN comment_count; +ALTER TABLE story_item DROP COLUMN like_count; +ALTER TABLE story_item DROP COLUMN favorite_count; + +-- 删除新增索引 +DROP INDEX IF EXISTS idx_story_item_stats ON story_item; + +-- 删除新增表 +DROP TABLE IF EXISTS mention; +DROP TABLE IF EXISTS user_notification_setting; +DROP TABLE IF EXISTS operation_history; +DROP TABLE IF EXISTS notification; +DROP TABLE IF EXISTS story_item_favorite; +DROP TABLE IF EXISTS comment_like; +DROP TABLE IF EXISTS story_item_like; +DROP TABLE IF EXISTS story_comment; +DROP TABLE IF EXISTS story_item_tag; +DROP TABLE IF EXISTS tag; +*/ diff --git a/V1.3.0__smart_features.sql b/V1.3.0__smart_features.sql new file mode 100644 index 0000000..e86fb25 --- /dev/null +++ b/V1.3.0__smart_features.sql @@ -0,0 +1,161 @@ +-- ===================================================== +-- Timeline 数据库迁移脚本 +-- 版本: V1.3.0 +-- 日期: 2024 +-- 描述: 第三阶段智能化功能 - 提醒系统、数据分析 +-- ===================================================== + +-- ----------------------------------------------------- +-- 1. 提醒系统表结构 +-- ----------------------------------------------------- + +-- 提醒表 +CREATE TABLE IF NOT EXISTS reminder ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '提醒唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '用户ID', + type VARCHAR(20) NOT NULL COMMENT '提醒类型: RECORD/MEMORY/ANNIVERSARY/CUSTOM', + title VARCHAR(200) NOT NULL COMMENT '提醒标题', + content TEXT COMMENT '提醒内容', + story_instance_id VARCHAR(64) COMMENT '关联的故事ID', + story_item_id VARCHAR(64) COMMENT '关联的节点ID', + remind_time DATETIME NOT NULL COMMENT '提醒时间', + repeat_type VARCHAR(20) DEFAULT 'NONE' COMMENT '重复类型: NONE/DAILY/WEEKLY/MONTHLY/YEARLY', + is_sent TINYINT DEFAULT 0 COMMENT '是否已发送 0-否 1-是', + sent_time DATETIME COMMENT '发送时间', + is_enabled TINYINT DEFAULT 1 COMMENT '是否启用 0-禁用 1-启用', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + INDEX idx_reminder_user (user_id, is_enabled, remind_time), + INDEX idx_reminder_pending (is_sent, remind_time), + INDEX idx_reminder_type (type) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提醒表'; + +-- ----------------------------------------------------- +-- 2. 纪念日表结构 +-- ----------------------------------------------------- + +-- 纪念日表 +CREATE TABLE IF NOT EXISTS anniversary ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '纪念日唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '用户ID', + title VARCHAR(200) NOT NULL COMMENT '纪念日标题', + description TEXT COMMENT '描述', + anniversary_date DATE NOT NULL COMMENT '纪念日日期', + repeat_type VARCHAR(20) DEFAULT 'YEARLY' COMMENT '重复类型: YEARLY/MONTHLY/ONCE', + remind_days INT DEFAULT 1 COMMENT '提前提醒天数', + is_lunar TINYINT DEFAULT 0 COMMENT '是否农历 0-公历 1-农历', + is_enabled TINYINT DEFAULT 1 COMMENT '是否启用', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + is_delete TINYINT DEFAULT 0 COMMENT '是否删除', + INDEX idx_anniversary_user (user_id, is_delete), + INDEX idx_anniversary_date (anniversary_date) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='纪念日表'; + +-- ----------------------------------------------------- +-- 3. 用户统计缓存表 +-- ----------------------------------------------------- + +-- 用户统计缓存表 +CREATE TABLE IF NOT EXISTS user_stats_cache ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + user_id VARCHAR(64) UNIQUE NOT NULL COMMENT '用户ID', + total_moments BIGINT DEFAULT 0 COMMENT '总时刻数', + total_media BIGINT DEFAULT 0 COMMENT '总媒体数', + total_stories BIGINT DEFAULT 0 COMMENT '总故事数', + total_comments BIGINT DEFAULT 0 COMMENT '总评论数', + total_likes BIGINT DEFAULT 0 COMMENT '总点赞数', + consecutive_days INT DEFAULT 0 COMMENT '连续记录天数', + max_consecutive_days INT DEFAULT 0 COMMENT '最长连续记录天数', + last_active_date DATE COMMENT '最后活跃日期', + stats_json JSON COMMENT '详细统计数据JSON', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + INDEX idx_stats_user (user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户统计缓存表'; + +-- ----------------------------------------------------- +-- 4. 年度报告表 +-- ----------------------------------------------------- + +-- 年度报告表 +CREATE TABLE IF NOT EXISTS yearly_report ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '报告唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '用户ID', + year INT NOT NULL COMMENT '年份', + total_moments BIGINT DEFAULT 0 COMMENT '年度时刻数', + total_media BIGINT DEFAULT 0 COMMENT '年度媒体数', + most_active_month VARCHAR(7) COMMENT '最活跃月份', + most_active_day DATE COMMENT '最活跃日期', + top_location VARCHAR(200) COMMENT '最常去地点', + top_tag VARCHAR(50) COMMENT '最常用标签', + monthly_breakdown JSON COMMENT '月度明细JSON', + insights JSON COMMENT 'AI洞察JSON', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_user_year (user_id, year), + INDEX idx_report_user (user_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='年度报告表'; + +-- ----------------------------------------------------- +-- 5. 智能填充历史表 +-- ----------------------------------------------------- + +-- 智能填充历史表 +CREATE TABLE IF NOT EXISTS smart_fill_history ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '记录唯一标识', + user_id VARCHAR(64) NOT NULL COMMENT '用户ID', + file_name VARCHAR(500) COMMENT '文件名', + inferred_time DATETIME COMMENT '推断的时间', + time_source VARCHAR(20) COMMENT '时间来源', + time_confidence INT COMMENT '时间置信度', + inferred_location VARCHAR(200) COMMENT '推断的地点', + location_source VARCHAR(20) COMMENT '地点来源', + location_confidence INT COMMENT '地点置信度', + is_applied TINYINT DEFAULT 0 COMMENT '是否已应用 0-否 1-是', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + INDEX idx_fill_user (user_id, create_time DESC) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能填充历史表'; + +-- ----------------------------------------------------- +-- 6. 定时任务配置表 +-- ----------------------------------------------------- + +-- 定时任务配置表 +CREATE TABLE IF NOT EXISTS scheduled_task ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', + task_name VARCHAR(100) UNIQUE NOT NULL COMMENT '任务名称', + task_type VARCHAR(50) NOT NULL COMMENT '任务类型', + cron_expression VARCHAR(100) COMMENT 'Cron表达式', + is_enabled TINYINT DEFAULT 1 COMMENT '是否启用', + last_execute_time DATETIME COMMENT '最后执行时间', + next_execute_time DATETIME COMMENT '下次执行时间', + execute_count BIGINT DEFAULT 0 COMMENT '执行次数', + last_status VARCHAR(20) COMMENT '最后执行状态', + last_error TEXT COMMENT '最后错误信息', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时任务配置表'; + +-- 初始化定时任务 +INSERT INTO scheduled_task (task_name, task_type, cron_expression, is_enabled) VALUES +('MEMORY_REMINDER_TASK', 'REMINDER', '0 0 8 * * ?', 1), +('STATS_CACHE_TASK', 'STATS', '0 0 3 * * ?', 1), +('YEARLY_REPORT_TASK', 'REPORT', '0 0 0 1 1 ?', 1) +ON DUPLICATE KEY UPDATE task_name = task_name; + +-- ----------------------------------------------------- +-- 回滚脚本 (如需回滚,请执行以下语句) +-- ----------------------------------------------------- + +/* +-- 删除新增表 +DROP TABLE IF EXISTS scheduled_task; +DROP TABLE IF EXISTS smart_fill_history; +DROP TABLE IF EXISTS yearly_report; +DROP TABLE IF EXISTS user_stats_cache; +DROP TABLE IF EXISTS anniversary; +DROP TABLE IF EXISTS reminder; +*/ diff --git a/timeline.session.sql b/timeline.session.sql new file mode 100644 index 0000000..cbfb0e6 --- /dev/null +++ b/timeline.session.sql @@ -0,0 +1,5 @@ +ALTER TABLE story_item ADD COLUMN share_id VARCHAR(64) DEFAULT NULL COMMENT '分享ID'; +ALTER TABLE `story_item` +ADD COLUMN `video_url` VARCHAR(64) COMMENT '视频文件 Instance ID', +ADD COLUMN `duration` BIGINT COMMENT '视频时长(秒)', +ADD COLUMN `thumbnail_url` VARCHAR(64) COMMENT '视频封面 Instance ID'; \ No newline at end of file