feat: 完成现有小程序接口的全部迁移至新后端
This commit is contained in:
@@ -311,7 +311,7 @@ UNIQUE source_ref_hash、UNIQUE object_ref_hash(可空);索引 `(owner_use
|
||||
|
||||
qiniu ready 必须具备 bucket、objectKey、objectRefHash、mimeType、sizeBytes 和 checksum;external ready 必须有经核实的 externalUrl,无法取得内容摘要时在报告注明。源文件下载、上传与校验完成后才 ready,再写业务外键。DB 存引用,访问域名从服务配置取;私有签名 URL 在响应时生成,不能写回数据库或页面配置。
|
||||
|
||||
SQL 检查 ready 必填字段、external 的 HTTPS 前缀、avatar 必须 private,以及摘要/hash 为 64 位小写十六进制。摘要计算和规范化由服务端完成;HTTPS 前缀检查不代替域名白名单或远程文件校验。
|
||||
SQL 检查 ready 必填字段、external 的 HTTPS 前缀、头像已按用户确认允许 public(仍核对本人归属),以及摘要/hash 为 64 位小写十六进制。摘要计算和规范化由服务端完成;HTTPS 前缀检查不代替域名白名单或远程文件校验。
|
||||
|
||||
上传和对象存储操作不放在长数据库事务中;先完成上传并登记资产,再短事务绑定业务记录。未绑定文件由清理流程回收,清理前检查 users、worksheets、worksheet_resources、worksheet_resource_assets、categories 和 page_configs 的所有引用。旧桥复制云文件后也必须遵循同一路径。
|
||||
|
||||
@@ -452,7 +452,7 @@ ORDER BY w.sort_order, w.updated_at DESC, w.id;
|
||||
|
||||
涉及用户的写事务先锁用户行并核对状态,再锁题型行、需要时锁内容行;多个题型及同层内容按 ID 固定顺序加锁。收藏、下载、资料修改和注销遵守相同锁顺序,避免注销与新写入交叉。
|
||||
|
||||
清除资料:昵称与头像引用置 NULL,保留用户、收藏和历史;解除引用后清理用户私有文件。注销:锁用户 → 只对功能收藏(worksheet_resource_id IS NULL)涉及的现存题型按 ID 加锁并减少 likes → 删除功能及内容两种收藏、下载日志 → 解除头像及其他私有资产关联,标记清理 → 清理身份审计关联 → 删除用户,全部数据库修改一事务。用户不存在时旧 token 立即无效。注销后再次微信登录创建全新 userId,不复用已删除账户,不恢复旧记录。
|
||||
清除资料:昵称与头像引用置 NULL,保留用户、收藏和历史;解除引用后清理被解除绑定的头像文件。注销:锁用户 → 只对功能收藏(worksheet_resource_id IS NULL)涉及的现存题型按 ID 加锁并减少 likes → 删除功能及内容两种收藏、下载日志 → 解除头像及其他私有资产关联,标记清理 → 清理身份审计关联 → 删除用户,全部数据库修改一事务。用户不存在时旧 token 立即无效。注销后再次微信登录创建全新 userId,不复用已删除账户,不恢复旧记录。
|
||||
|
||||
功能和资源下载计数都是累计成功保存次数,注销删除个人日志时不回减任一层 downloads。likes 仅表示当前功能收藏数量,注销需要扣除当前关系的贡献;若旧计数小于应扣数量,扣减保护为 0,并在同事务记录系统审计异常,不能得到负值,也不能因此阻止注销。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user