-- 迁移脚本 020: tw_task_log 补结构化列
--
-- 背景：
--   013 DROP 重建任务相关表后，017 重建 tw_task_log 时只有基础列。
--   而 shared task-service.ts 的 logOperation INSERT 与 getTimeline/getLogs SELECT
--   都需要 seq / round / from_assignee_id / to_assignee_id / actor_role 五列，
--   缺失导致 MySQL 直连模式下所有写日志的状态机操作 ERROR 1054 失败。
--
-- 索引：
--   operator_id 索引供"参与维度"查询（按经手人查任务，EXISTS 子查询）使用。
--
-- 兼容性：
--   IF NOT EXISTS 幂等（与 018/019 同风格），手动加过列的库不受影响。

ALTER TABLE tw_task_log
  ADD COLUMN IF NOT EXISTS `seq`              INT         NOT NULL DEFAULT 1 COMMENT '任务内单调序号（MAX+1 生成）',
  ADD COLUMN IF NOT EXISTS `round`            INT         NOT NULL DEFAULT 1 COMMENT '流转轮次（退回/打回 +1）',
  ADD COLUMN IF NOT EXISTS `from_assignee_id` VARCHAR(36) NULL COMMENT '操作前处理人 ID',
  ADD COLUMN IF NOT EXISTS `to_assignee_id`   VARCHAR(36) NULL COMMENT '操作后处理人 ID',
  ADD COLUMN IF NOT EXISTS `actor_role`       VARCHAR(20) NULL COMMENT '操作角色: creator/assignee';

CREATE INDEX IF NOT EXISTS idx_task_log_operator ON tw_task_log (`operator_id`);

CREATE INDEX IF NOT EXISTS idx_task_log_from_assignee ON tw_task_log (`from_assignee_id`);

CREATE INDEX IF NOT EXISTS idx_task_log_to_assignee ON tw_task_log (`to_assignee_id`);
