本次更新将用户标识系统从 UUID 字符串改为数字自增 ID,简化了用户管理并提高了数据库查询效率。
- 之前:
uid TEXT PRIMARY KEY- 使用 UUID 字符串作为主键 - 现在:
id INTEGER PRIMARY KEY AUTOINCREMENT- 使用自增整数作为主键
- 之前:
uid TEXT NOT NULL- 外键引用 users.uid - 现在:
user_id INTEGER NOT NULL- 外键引用 users.id
- 之前:
X-User-UID: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx - 现在:
X-User-ID: 1(整数)
所有 API 响应中的用户标识字段已更新:
- 之前:
"uid": "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" - 现在:
"user_id": 1
- 移除了 UUID 生成逻辑
- 用户 ID 从 localStorage 加载(键名从
user_uid改为user_id) - 如果 localStorage 中没有用户 ID,首次请求时服务器会自动创建
add_user(uid)→get_or_create_user()- 返回整数用户 ID- 所有函数的
uid参数改为user_id(int 类型) - 更新了所有 SQL 查询以使用新的字段名
get_user_uid()→get_user_id()- 自动获取或创建用户 ID- 移除了 UID 验证逻辑(不再需要检查是否存在)
- 所有路由处理函数更新为使用
user_id
- 添加了
get_user_id()函数 - 更新了图片生成流程以使用数字用户 ID
- 弃用了 JSON 数据迁移功能
系统启动时会自动检测旧表结构:
- 如果发现旧的
uid字段,会自动删除旧表 - 重新创建符合新结构的表
- 注意: 旧的历史记录数据不会被保留(根据需求,历史用户不需要兼容)
以下文件已被删除:
history.db- 旧数据库文件(已重建)generation_history.json- 旧的 JSON 历史文件
运行测试脚本验证功能:
python test_numeric_user_id.py测试包括:
- ✓ 用户 ID 自动创建
- ✓ 使用用户 ID 获取历史记录
- ✓ 获取所有用户的历史记录
- ✓ 日期查询功能
- 历史数据: 旧的用户数据不会迁移到新系统
- API 客户端: 使用旧 API 的客户端需要更新请求头和响应解析
- 浏览器缓存: 建议用户清除浏览器缓存和 localStorage
- 如果客户端未提供
X-User-ID头,服务器会自动创建新用户 - 前端页面会自动处理这种情况
- 性能提升: 整数索引比字符串索引更高效
- 存储优化: 整数占用空间更小
- 简化逻辑: 无需生成和管理 UUID
- 易于理解: 数字 ID 更直观,便于调试和日志分析
- 用户 ID 是全局自增的,第一个访问系统的用户获得 ID=1
- 用户 ID 一旦分配就不会改变
- 不同浏览器/设备会有不同的用户 ID(除非手动同步 localStorage)
- 评分功能仍然可以对所有用户的图片进行评分(不校验用户所有权)
如果需要回滚到旧系统:
- 恢复 Git 版本到更新前
- 删除新的
history.db - 如果有备份,恢复旧的
history.db和generation_history.json
警告: 回滚会导致新产生的数据丢失。