SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

USE hyapp_user;

-- 新建独立小表，不扫描或改写 users 热表。三组索引分别覆盖凭证主键、客户端幂等键和对象键唯一归属；
-- 资料更新的消费 SQL 始终命中主键，不会按 URL、状态或媒体字段全表查找。
CREATE TABLE IF NOT EXISTS user_avatar_upload_registrations (
  app_code VARCHAR(32) NOT NULL COMMENT '应用编码，用于多租户隔离',
  user_id BIGINT NOT NULL COMMENT '上传用户 ID',
  avatar_upload_id VARCHAR(64) NOT NULL COMMENT '资料更新消费凭证',
  client_command_id VARCHAR(128) NOT NULL COMMENT '客户端上传幂等键',
  media_payload_sha256 CHAR(64) NOT NULL COMMENT '规范化媒体事实摘要',
  expected_object_key VARCHAR(512) NOT NULL COMMENT 'user-service 授权的 COS 对象键',
  object_url VARCHAR(1024) NOT NULL DEFAULT '' COMMENT 'COS 上传完成后的受信访问地址',
  status VARCHAR(16) NOT NULL COMMENT 'authorized/active/consumed',
  content_type VARCHAR(64) NOT NULL COMMENT '按魔数识别的 MIME',
  media_format VARCHAR(16) NOT NULL COMMENT 'jpeg/png/gif/webp',
  size_bytes BIGINT NOT NULL COMMENT '原始文件字节数',
  width INT NOT NULL COMMENT '画布宽度',
  height INT NOT NULL COMMENT '画布高度',
  animated TINYINT(1) NOT NULL COMMENT '是否多帧动画',
  frame_count INT NOT NULL COMMENT '帧数',
  duration_ms BIGINT NOT NULL COMMENT '动画总时长，静态为 0',
  sha256 CHAR(64) NOT NULL COMMENT '原始文件 SHA-256',
  created_at_ms BIGINT NOT NULL COMMENT '创建时间，UTC epoch ms',
  updated_at_ms BIGINT NOT NULL COMMENT '更新时间，UTC epoch ms',
  PRIMARY KEY (app_code, user_id, avatar_upload_id),
  UNIQUE KEY uk_user_avatar_upload_command (app_code, user_id, client_command_id),
  UNIQUE KEY uk_user_avatar_upload_object (app_code, expected_object_key),
  KEY idx_user_avatar_upload_status_time (app_code, status, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户头像上传授权与消费记录';
