USE hyapp_user;

-- 归档同步表每个 SDKAppID 每小时仅一行，cron 只在该小表上 claim；
-- 私信事实仍通过 user_id 主键校验租户后写入既有索引表，不扫描用户或消息全表。
CREATE TABLE IF NOT EXISTS user_private_message_history_sync (
  sdk_app_id BIGINT NOT NULL COMMENT '腾讯 IM SDKAppID',
  hour_start_ms BIGINT NOT NULL COMMENT '待同步 UTC 小时起点 epoch ms',
  status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/processing/retry/completed',
  attempts INT NOT NULL DEFAULT 0 COMMENT '外部归档拉取尝试次数',
  next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '失败后最早重试时间',
  locked_by VARCHAR(96) NOT NULL DEFAULT '' COMMENT '当前 cron run ID',
  locked_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '处理租约截止时间',
  source_message_count INT NOT NULL DEFAULT 0 COMMENT '归档原始消息数',
  imported_event_count INT NOT NULL DEFAULT 0 COMMENT '新增 Host 私信事实数',
  last_error VARCHAR(512) NOT NULL DEFAULT '' COMMENT '最近一次脱敏错误',
  created_at_ms BIGINT NOT NULL COMMENT '创建时间，UTC epoch ms',
  updated_at_ms BIGINT NOT NULL COMMENT '更新时间，UTC epoch ms',
  PRIMARY KEY (sdk_app_id, hour_start_ms),
  KEY idx_private_message_history_sync_ready (sdk_app_id, status, next_retry_at_ms, hour_start_ms, locked_until_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='腾讯 IM 小时归档离线同步状态';
