-- 会话 + 设备元数据（设备 & 会话管理 P2）
--
-- ① sessions：每次登录一条，绑定 device + refresh-token JTI，支撑「按设备强制退出 /
--    最后登录时间 / 会话历史」。refresh 轮换更新 refresh_jti+last_active；登出/强制退出
--    置 revoked_at。Redis 白名单仍作快速校验，sessions 是可查询的权威记录。
-- ② devices.client_version：该设备最近上报的客户端版本（列表展示）。
-- ③ devices.totp_trusted_until：预留——未来 2FA「信任设备」过期点；清除登录信息时清空。
--
-- 注：devices 唯一键 UNIQUE(uuid)→UNIQUE(user_id,uuid) 与 platform CHECK 加 linux 需
-- SQLite 表重建，风险隔离到单独迁移，不在本迁移内做。

CREATE TABLE sessions (
  id             INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id        INTEGER NOT NULL,
  device_id      INTEGER NOT NULL,
  refresh_jti    TEXT NOT NULL UNIQUE,
  client_ip      TEXT NULL,
  client_version TEXT NULL,
  created_at     DATETIME NOT NULL,
  last_active    DATETIME NULL,
  revoked_at     DATETIME NULL,
  FOREIGN KEY (user_id) REFERENCES users(id),
  FOREIGN KEY (device_id) REFERENCES devices(id)
);
CREATE INDEX idx_sessions_user ON sessions (user_id);
CREATE INDEX idx_sessions_device ON sessions (device_id);

ALTER TABLE devices ADD COLUMN client_version TEXT NULL;
ALTER TABLE devices ADD COLUMN totp_trusted_until DATETIME NULL;
