Skip to content

数据库表创建-设备 ​

版本归属 ​

用于 v5 设备与离线同步版。

表清单 ​

  • user_devices

user_devices ​

用户设备表。用于记录当前用户上报的设备 JSON 数据和最近活跃时间。

执行 SQL ​

sql
CREATE TABLE IF NOT EXISTS user_devices (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  user_id BIGINT NOT NULL,
  data JSON NOT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uk_user_devices_user (user_id)
);

字段说明:

  • id:设备记录 ID
  • user_id:所属用户 ID
  • data:客户端上报的设备 JSON 数据,服务端不限制内部字段
  • created_at:创建时间
  • updated_at:更新时间,也作为最近在线或设备上报时间

索引说明:

  • uk_user_devices_user:保证同一用户只有一条设备上报记录,重复上报时更新已有记录

业务约束:

  • 用户只能新增、查询、删除自己的设备记录
  • POST /api/devices 请求体必须包含 user_id 和 data
  • 请求体 user_id 必须等于当前登录 token 对应的用户 ID
  • data 只要求是合法 JSON,内部字段不做限制
  • WebSocket 活跃、设备上报或客户端重新上线时可以更新 updated_at

建表后检查 ​

sql
DESC user_devices;
SHOW INDEX FROM user_devices;

最小验证 ​

以下 SQL 假设 users 表中已经存在 id = 1 的用户。

上报设备:

sql
INSERT INTO user_devices (user_id, data)
VALUES (1, JSON_OBJECT('platform', 'web', 'device_id', 'web-001'));

重复上报时更新:

sql
INSERT INTO user_devices (user_id, data)
VALUES (1, JSON_OBJECT('platform', 'web', 'version', '1.0.1'))
ON DUPLICATE KEY UPDATE
  data = VALUES(data);

查询用户设备:

sql
SELECT user_id, data, updated_at
FROM user_devices
WHERE user_id = 1
ORDER BY updated_at DESC;

代码落地点 ​

  • models/device_model.go 定义 UserDevice
  • 上报设备使用 user_id 做 upsert
  • WebSocket 建连或心跳时可以更新 updated_at
  • 删除设备只允许删除当前登录用户自己的记录

基于 MIT 许可发布