SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

USE hyapp_user;

-- 后台用户详情设备 tab 需要注册之后的持续设备画像：users.register_device/os_version 只是注册时一次性快照，
-- 真实客户端此前从未上报，线上均为空。user_devices 在每次认证成功（登录/注册/refresh）后按
-- (app_code, user_id, device_id) 聚合客户端设备头，字段以“非空覆盖”合并，空值不抹掉历史上报。
-- CREATE TABLE IF NOT EXISTS 使已通过 initdb 建表的环境可以安全重复执行。
CREATE TABLE IF NOT EXISTS user_devices (
  app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码，用于多租户隔离',
  user_id BIGINT NOT NULL COMMENT '用户 ID',
  device_id VARCHAR(128) NOT NULL COMMENT '设备 ID，与 auth_sessions.device_id 同源',
  platform VARCHAR(32) NOT NULL DEFAULT '' COMMENT '平台，android/ios',
  device_model VARCHAR(128) NOT NULL DEFAULT '' COMMENT '设备型号，例如 Redmi Note 8 Pro',
  manufacturer VARCHAR(64) NOT NULL DEFAULT '' COMMENT '设备厂商，例如 Xiaomi/Apple',
  os_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '系统版本',
  imei VARCHAR(64) NOT NULL DEFAULT '' COMMENT '设备 IMEI，Android 10+ 无特权权限时为空',
  app_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '最近一次认证客户端版本',
  build_number VARCHAR(64) NOT NULL DEFAULT '' COMMENT '最近一次认证客户端构建号',
  first_seen_at_ms BIGINT NOT NULL COMMENT '首次认证成功时间，UTC epoch ms',
  last_seen_at_ms BIGINT NOT NULL COMMENT '最近认证成功时间，UTC epoch ms',
  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, device_id),
  KEY idx_user_devices_user_last_seen (app_code, user_id, last_seen_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户设备档案表，认证成功后按设备聚合最新上报资料';
