35 lines
3.8 KiB
Markdown
35 lines
3.8 KiB
Markdown
# 紧急联系人开发
|
||
|
||
## 范围与行为
|
||
|
||
参照图10新增 `/safety/contacts`,个人中心入口进入真实列表。支持姓名、手机号、关系资料的新增、编辑、归档删除,最多五位,列表隐藏手机号中间四位。告警通知、设备查看、远程控制和顺延通知均明确“暂未开放”,不因联系人保存而授权。
|
||
|
||
后端新增鉴权 `GET/POST /emergency-contacts`、`PUT/DELETE /emergency-contacts/:identity`。所有查询限定当前登录账户;写入持有账户行锁,保证五人上限及电话号码去重。新增必须带UUID请求号,相同请求重试返回原记录,已归档记录不能因重试恢复。删除为状态归档。
|
||
|
||
独立迁移命令 `migrate-emergency-contacts` 已对现有远程配置执行成功,只创建 `user_emergency_contact` 及相应注释和唯一索引,未执行全库迁移或初始化。
|
||
|
||
## 文件
|
||
|
||
- `backend/api/internal/models/user_emergency_contact.go`:联系人资料模型。
|
||
- `backend/api/internal/logic/client/user/emergency_contacts.go`:本人CRUD与边界校验。
|
||
- `backend/api/internal/logic/client/user/emergency_contacts_test.go`:输入、上限、越权与响应能力测试。
|
||
- `backend/api/internal/routers/client.go`:四条用户鉴权路由。
|
||
- `backend/api/cmd/cli/emergency_contact_migration.go`、`main.go`:独立事务迁移命令。
|
||
- `apps/user_app/lib/data/repositories/client_repository.dart`:联系人接口和会话保护。
|
||
- `apps/user_app/lib/ui/features/profile/emergency_contacts_page.dart`:列表、编辑和删除确认。
|
||
- `apps/user_app/lib/app/router.dart`、`ui/features/profile/profile_page.dart`:路由及入口。
|
||
- `apps/user_app/test/ui/emergency_contacts_page_test.dart`:失败保留输入和请求号、成功刷新及权限未开放。
|
||
|
||
## 验证及限制
|
||
|
||
Go用户逻辑、路由和CLI测试通过;Flutter静态检查、联系人页面测试、Web构建通过。当前API进程已切换为 `heqi-contacts-api.exe`,仍连接原远程数据库。
|
||
尚未完成告警联动、联系人顺序调整、设备授权审计、后台治理及真机拨号验收;不将这些首期缺项归为二期。图10仍需完善图标、字体、布局和真实状态对照,未判完整通过。
|
||
|
||
内置浏览器390×844实际完成:模拟账号登录后空列表→新增测试联系人→列表显示脱敏手机号→编辑姓名并保存→列表显示新姓名→删除确认→恢复空列表。仅本次新增的测试记录被状态归档,数据库保留幂等记录;未拨打电话、未发短信、未授予设备权限。卡片密度和权限提示布局仍与原图不同,保持部分实现状态。
|
||
|
||
后续视觉修正:恢复蓝底白字编号和关系标签;“权限 · 暂未开放”统一显示在权限行上方,每项仍可点击查看说明。电话、编辑与权限按钮按原图并排,320宽或放大文字时分行。320/390/430宽度、1.3倍字体及长姓名/关系描述测试通过,新增实际点击远程控制后未开放提示的断言。仍未判整页视觉通过。
|
||
|
||
新版Web在内置浏览器390宽用独立“视觉测试”联系人核对,编号、标签及五个操作入口同排可见,远程控制弹出未开放说明。补充后端新增请求重放测试,验证启用记录重试不重复插入、归档记录不能被重试复活,测试通过。
|
||
|
||
错误反馈修正:新增稳定业务码2501(五人上限)、2502(本人列表号码重复)、2503(原请求已处理且资料不一致或已归档)。前端只对明确业务拒绝显示原因,未知网络错误保留“结果未确认”,删除失败使用删除文案。后端联系人测试及七项前端联系人测试通过;新版API已重启,数据库结构未改动。此轮错误分支主要由自动测试验证,不代表所有异常均已完成浏览器联调。
|