-- 审计快照功能: 订单快照表和回滚日志表
-- 用于记录用户消费时刻的完整状态快照，支持数据回滚

-- 订单快照表
CREATE TABLE IF NOT EXISTS `order_snapshots` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
  `order_id` BIGINT NOT NULL COMMENT '订单ID',
  `order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `snapshot_type` TINYINT NOT NULL COMMENT '快照类型：1=消费前 2=消费后',
  `snapshot_data` JSON NOT NULL COMMENT '完整状态快照(JSON)',
  `snapshot_hash` VARCHAR(64) DEFAULT NULL COMMENT '快照数据Hash(可选，用于校验)',
  PRIMARY KEY (`id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_user_id_created` (`user_id`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单快照表';

-- 审计回滚日志表
CREATE TABLE IF NOT EXISTS `audit_rollback_logs` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
  `order_id` BIGINT NOT NULL COMMENT '订单ID',
  `order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `operator_id` BIGINT NOT NULL COMMENT '操作人ID(管理员)',
  `operator_name` VARCHAR(64) DEFAULT NULL COMMENT '操作人名称',
  `rollback_type` TINYINT NOT NULL DEFAULT 1 COMMENT '回滚类型：1=完整回滚',
  `before_snapshot_id` BIGINT DEFAULT NULL COMMENT '回滚前快照ID(消费后快照)',
  `after_snapshot_id` BIGINT DEFAULT NULL COMMENT '回滚目标快照ID(消费前快照)',
  `changes_applied` JSON DEFAULT NULL COMMENT '实际执行的变更明细',
  `reason` VARCHAR(512) DEFAULT NULL COMMENT '回滚原因',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：1=成功 2=失败',
  `error_msg` TEXT DEFAULT NULL COMMENT '失败原因',
  PRIMARY KEY (`id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_operator` (`operator_id`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审计回滚操作日志';

-- 更新订单状态注释，增加状态5=已回滚
-- ALTER TABLE `orders` MODIFY COLUMN `status` INT NOT NULL DEFAULT 1 COMMENT '订单状态：1待支付 2已支付 3已取消 4已退款 5已回滚';
