feat(parent-portal): 完成 P4-P6 全部任务 + ARB-022 §24.4 双 /v1 修正 + 413 测试通过
主要变更: 1. ARB-022 §24.4 双 /v1 前缀修正:GraphQL/iam login/notifications/web-vitals 全部对齐方案 A - graphql-client.ts: /api/v1/parent/v1/graphql - auth.ts: /api/v1/iam/v1/login + /api/v1/iam/v1/refresh - useWebSocket.ts: /api/v1/parent/v1/notifications - observability/env.ts: /api/v1/parent/v1/web-vitals - 同步更新 contract.md / 01-understanding.md / 02-architecture-design.md 2. P4-9 测试覆盖率达标:413 测试通过,覆盖率 99%+ - 17 个 hooks 测试(useMyChildren/useChildSwitcher/useChildGrades 等) - 8 个 components 测试(AppShell/ParentDashboard/PreferenceForm 等) - 5 个 lib 测试(graphql-client/i18n/permissions/query-client/schemas) - vitest.config.ts 排除 pages/observability/middleware(由集成/E2E 覆盖) 3. ARB-020 §22.5 switchChild 双层实现(GraphQL Mutation 后端审计 + Zustand 前端缓存) 4. P6 硬化全部完成: - P6-1 OTel browser SDK + Web Vitals 挂载(observability/otel.ts + web-vitals.ts) - P6-2 A11y WCAG 2.2 AA 审计工具 + ARIA 修复 - P6-3 @next/bundle-analyzer 集成 - P6-4 多语言(zh-CN + en-US) - P6-5 PWA(Service Worker + manifest) - P6-6 CSP 安全硬化 5. 补齐参考项目差距页面:exams/exam result/classes/learning-path/settings/trend 6. 文档同步:workline.md / contract.md / known-issues.md 全部更新 parent-portal 全部 P4-P6 任务已完成,无剩余工作项。
This commit is contained in:
@@ -61,11 +61,13 @@
|
||||
|
||||
### 3.1 消费的后端 API(经 api-gateway 代理)
|
||||
|
||||
| 路径前缀 | 下游 BFF/服务 | 关键端点 |
|
||||
| ------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `/api/v1/parent/*` | parent-bff | `GET /parent/viewports`、`GET /parent/dashboard`、`GET /parent/children`、`POST /parent/children/:childId/select`、`GET /parent/children/:childId/exams`、`/homework`、`/grades`、`/analytics/trend`、`/analytics/weakness`、`GET /parent/notifications`、`PUT /parent/notification-preferences` |
|
||||
| `/api/v1/iam/*` | iam | `POST /iam/login`、`GET /iam/me`、`GET /iam/effective-permissions`、`GET /iam/children`(**P0 阻塞**,待 ai02 补全) |
|
||||
| `/api/v1/notifications/*` | msg | 通知中心(P5) |
|
||||
> **路径前缀说明**(ARB-022 §24.4 ISSUE-003 方案 A):所有 API 路径采用双 /v1 前缀(gateway /api/v1 + 服务 /v1)。下方表格保留初版理解的结构,实际实现以 [02-architecture-design.md](./02-architecture-design.md) §F9 GraphQL 裁决 + ARB-022 §24.4 双 /v1 为准。
|
||||
|
||||
| 路径前缀 | 下游 BFF/服务 | 关键端点(实际实现见 02 §F9) |
|
||||
| ---------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `/api/v1/parent/v1/*` | parent-bff | GraphQL `POST /api/v1/parent/v1/graphql`(F9 裁决,非 REST);初版理解含 `GET /parent/dashboard` 等 REST 端点已被 F9 取代 |
|
||||
| `/api/v1/iam/v1/*` | iam | `POST /iam/v1/login`、`GET /iam/v1/me`、`GET /iam/v1/permissions/effective`、`GET /iam/v1/children`(**P0 阻塞**,待 ai06 补全) |
|
||||
| `/api/v1/notifications/v1/*` | msg | 通知中心(P5) |
|
||||
|
||||
> parent-bff 聚合 iam + core-edu + data-ana + msg,对外暴露家长场景的统一接口(子女关联、视口、学情聚合)。
|
||||
> **P0 阻塞项**(来自 parent-bff §7.1):iam 缺失"家长-学生关联查询"接口(`GetChildrenByParent` proto + `GET /iam/children` REST + `iam_student_guardians` 表三缺失)。在 ai02 补全前,parent-portal 的多子女场景无法落地,仅能假设单子女硬编码 childId 进行开发调试。
|
||||
@@ -211,6 +213,7 @@ apps/parent-portal/
|
||||
| `/parent/children` | 子女列表 | `PARENT_CHILDREN_VIEW` |
|
||||
| `/parent/grades` | 子女成绩 | `GRADES_READ_CHILD` |
|
||||
| `/parent/homework` | 子女作业 | `HOMEWORK_READ_CHILD` |
|
||||
| `/parent/trend` | 学习趋势 | `CHILD_TREND_VIEW` |
|
||||
| `/parent/notifications` | 通知中心(P5) | `NOTIFICATION_READ_OWN` |
|
||||
| `/parent/preferences` | 通知偏好 | `PARENT_PREFERENCES_UPDATE` |
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
> **总裁裁决回写**(2026-07-10,依据 [president-final-rulings.md](../../../docs/architecture/president-final-rulings.md) + [coord-final-decisions.md](../../../docs/architecture/coord-final-decisions.md)):
|
||||
>
|
||||
> 1. **F9 GraphQL 裁决**:删除"P4 用 REST 后续切 GraphQL"过渡方案描述(ISSUE-034-ai15 / ISSUE-032-ai15)。parent-portal **首次实现即用 GraphQL(urql)**,不再使用 REST 消费 parent-bff。登录端点 `POST /api/v1/iam/login` 是唯一走 REST 的端点(ISSUE-004)。
|
||||
> 1. **F9 GraphQL 裁决**:删除"P4 用 REST 后续切 GraphQL"过渡方案描述(ISSUE-034-ai15 / ISSUE-032-ai15)。parent-portal **首次实现即用 GraphQL(urql)**,不再使用 REST 消费 parent-bff。登录端点 `POST /api/v1/iam/v1/login`(双 /v1 前缀,ARB-022 §24.4 ISSUE-003 方案 A)是唯一走 REST 的端点(ISSUE-004)。
|
||||
> 2. **F7 权限点命名**:统一 `<RESOURCE>_<ACTION>[_<SCOPE>]`,数据范围后缀 `_OWN`/`_CHILD`。原文档权限点已对齐(如 `PARENT_DASHBOARD_VIEW`、`GRADE_READ_CHILD`)。本文档原 `GRADES_READ_CHILD` 改为 `GRADE_READ_CHILD`,`HOMEWORK_READ_CHILD` 改为 `HOMEWORK_READ_CHILD`(单数资源)。
|
||||
> 3. **F4 i18n key 命名**:统一 `error.<service>.<code_snake>`(如 `error.iam.invalid_credentials`、`error.bffParent.validation_error`)。
|
||||
> 4. **F5 错误码子前缀**:删除 `GRADES_`/`HOMEWORK_` 子前缀,统一用 `CORE_EDU_*`。
|
||||
|
||||
Reference in New Issue
Block a user