账户与订阅设置
路由:/account。角色:当前用户。范围:当前主流程。依据:当前页面和调用组件(代码基线 67df5ab1,本轮仅修复根元素 hydration 并移除无调用旧 header 插槽)。以下数量是现有读取策略,不是实际业务记录数,也不是容量或服务承诺。
源码入口:page.tsx · account-settings.tsx · credentials-form.tsx · identity-connections.tsx · report-email-subscription.tsx 。
用户任务与当前操作
作为当前用户,我需要管理个人资料、登录方式与个人邮件偏好。当前操作围绕下表的数据完成;不从旧表和旧接口的存在反推新增产品需求。页面存在不等于来源、模型、送达或长期运行已通过真实验收。
页面需要的数据
| 区域/操作 | 实际展示或输入字段 | 展示数量/读取方式 | 是否持久化及最小存储 |
|---|---|---|---|
| 账号资料 | username、email、GitHub绑定、avatar、credentials_ready | 当前账户1份;更新后读回 | identity_users/会话;头像沿用既有限制 |
| 凭据与订阅 | 旧/新密码、确认、验证码;报告邮箱enabled/验证/就绪状态 | 明确保存或绑定,不自动提交 | 凭据哈希/会话版本与通知配置;表单密码只在内存 |
接口与业务落点
下列为本页业务读取/提交入口。全局会话、头像、站点元信息和共享组件中未在本页触发的导出函数不算新增页面能力。请求类型、响应与错误以生成客户端和后端为准。
| 页面调用 | 方法和路径 | 请求 → 响应合同 | 实现依据 |
|---|---|---|---|
getLoginOptions | GET /api/identity/options | 无业务入参 → LoginOptionsView | 客户端 · 后端 |
getReportEmailSubscription | GET /api/notifications/email-subscription | 无业务入参 → ReportEmailSubscriptionView | 客户端 · 后端 |
linkIdentityEmail | PUT /api/identity/email/link | VerifyEmailCodeInput → IdentitySessionView | 客户端 · 后端 |
sendEmailLinkCode | POST /api/identity/email/link/challenges | EmailCodeInput → EmailChallengeView | 客户端 · 后端 |
sendEmailLoginCode | POST /api/identity/email/challenges | EmailCodeInput → EmailChallengeView | 客户端 · 后端 |
startGithubLink | POST /api/identity/github/link | 无业务入参 → GithubAuthorizationView | 客户端 · 后端 |
updateIdentityCredentials | PUT /api/identity/credentials | IdentityCredentialsUpdateInput → IdentitySessionView | 客户端 · 后端 |
updateIdentityProfile | PUT /api/identity/profile | IdentityProfileInput → IdentitySessionView | 客户端 · 后端 |
updateReportEmailSubscription | PUT /api/notifications/email-subscription | ReportEmailSubscriptionInput → ReportEmailSubscriptionView | 客户端 · 后端 |
uploadIdentityAvatar | PUT /api/identity/avatar | IdentityAvatarInput → IdentitySessionView | 客户端 · 后端 |
数据落点:identity_users、identity_sessions、notification_targets。这是当前依赖定位,不代表这些表均为重新设计时必须新建;详细字段/键/关系及保留原因见页面数据库设计。
收敛与替换
不做多租户组织、角色后台或独立用户画像;订阅不是付费套餐。
实现时先复用上述合同。确有缺口须描述具体控件、输入、输出、当前失败和最小修复,不能直接把历史扩展方案列为前置。公开分发、付费供应商、海外新来源与 Flutter 继续受冻结范围和其他生效决策约束。
验收与非功能要求
- 主路径:修改失败保留非密码草稿;冲突不覆盖;未验证邮箱不能宣称通知可送达。
- 数据边界:上表数量、字段和统计范围要能从响应核对;未知、未分析、无权限和真实零值不同。筛选、页签与选择不创建持久业务副本。
- 状态:有远程读取的区域分别验证正常、零数据、加载、失败和撤权;静态说明的业务空态/无权限写不适用,不伪造验收。
- 写入:有保存/运行/发布时保留可恢复输入,版本冲突先重读;请求结果未知按现有接口查询或复用原幂等键,不新增全局操作账本。
- 交互:1440px与390px下主动作可见;Tab/Enter/Escape和适用的方向键可操作,弹层关闭返回触发点。凭据只按现有认证流程传递,不进入日志/URL/本机持久存储。