feat(education): add class relationships

This commit is contained in:
2026-07-31 12:53:13 +08:00
parent 3fdc4edfe0
commit 428d4e10fd
26 changed files with 937 additions and 11 deletions

View File

@@ -17,6 +17,7 @@
- 答案保存端点 (见下方 Answer API) — 幂等保存,安全重试
- 题目安全过滤(答案/解析绝不暴露到前端)
- 管理端题目创作、目录放置、发布和归档端点 — 仅在 `JAVA_READ` 下接受写入
- 租户班级、现有 Member 学生/教师关系,以及具备过期与审计语义的幂等邀请创建/接受
- 独立的功能开关配置 + Scalar 数据源配置
- 错误码常量(通用 + 租户 + Catalog/Scalar + 题目/练习)
- System RBAC 权限注解及 V4080/V4090 条件种子(`education:capability``education:question:author``education:question:classify``education:question:publish``education:question:archive`);迁移不自动向任何角色授权
@@ -125,6 +126,20 @@ GET /admin-api/education/capability
| `1_005_003_075` | 归类版本或题目状态已变化 |
| `1_005_003_076` | 题目尚未归类,不能发布 |
### 管理后台与用户 APP - 班级关系
班级只属于当前框架租户,关系引用当前租户已经存在的 Member 用户。Education 不创建账号、不保存密码,也不把 `STUDENT`/`TEACHER` 班级角色映射为 System RBAC 角色。
| 端点 | 权限 | 说明 |
|------|------|------|
| `POST /admin-api/education/classes` | `education:class:create` | 创建当前租户班级 |
| `GET /admin-api/education/classes` | `education:class:query` | 查询当前租户班级 |
| `GET /admin-api/education/classes/{classId}/members` | `education:class-member:query` | 查询指定班级关系 |
| `POST /admin-api/education/classes/{classId}/invitations` | `education:class-invitation:create` | 幂等邀请现有 Member 用户 |
| `POST /app-api/education/class-invitations/{invitationId}/accept` | Member 登录态 | 邀请本人幂等接受 |
邀请创建的幂等范围是当前租户、创建人和 `idempotencyKey`;同键不同请求返回 `1_005_004_006`。接受时锁定邀请,校验邀请人、过期时间和班级状态,在同一事务最多创建一条关系和一条 `ACCEPTED` 审计。跨租户班级、关系与邀请在 Mapper 和 PostgreSQL trigger 两层失败关闭。V4140 是该能力唯一 migration。
### 用户 APP - 教育租户识别
```