307 lines
9.0 KiB
Markdown
307 lines
9.0 KiB
Markdown
|
|
# 前端接口使用情况验证报告
|
|||
|
|
|
|||
|
|
**验证日期**: 2026-03-11
|
|||
|
|
**验证范围**: api-spec.yml 中定义的接口 vs 新后端已实现的接口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 验证方法
|
|||
|
|
|
|||
|
|
1. 提取前端 `api-spec.yml` 中定义的所有接口路径
|
|||
|
|
2. 对比新后端 Controller 中已实现的接口
|
|||
|
|
3. 标记出前端已定义但新后端缺失的接口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 验证结果
|
|||
|
|
|
|||
|
|
### 前端接口统计
|
|||
|
|
|
|||
|
|
| 角色 | api-spec.yml 中接口数 | 新后端已实现 | 完全匹配 |
|
|||
|
|
|------|---------------------|------------|---------|
|
|||
|
|
| 教师端 | 37 | 37 | 36 |
|
|||
|
|
| 学校端 | 58 | 58 | 56 |
|
|||
|
|
| 家长端 | 14 | 14 | 14 |
|
|||
|
|
| 管理员端 | 39 | 39 | 38 |
|
|||
|
|
| **总计** | **148** | **148** | **144** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 接口差异分析
|
|||
|
|
|
|||
|
|
### 1. 教师端 - 课时完成接口
|
|||
|
|
|
|||
|
|
**前端定义**: `/api/v1/teacher/lessons/{id}/complete` (POST)
|
|||
|
|
**新后端实现**: `/api/v1/teacher/lessons/{id}/finish` (POST)
|
|||
|
|
|
|||
|
|
**分析**: 这是同一个功能的不同命名。新后端使用 `finish` 更准确地描述了"结束课时"的操作。
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
- 方案 A: 在前端 api-spec.yml 中将接口路径改为 `/finish` (推荐)
|
|||
|
|
- 方案 B: 在新后端添加 `/complete` 作为别名
|
|||
|
|
|
|||
|
|
### 2. 学校端 - 校本课程路径
|
|||
|
|
|
|||
|
|
**前端定义**: `/api/v1/school/school-courses`
|
|||
|
|
**新后端实现**: `/api/v1/school/school-courses` ✅
|
|||
|
|
|
|||
|
|
**状态**: 已实现,路径一致
|
|||
|
|
|
|||
|
|
### 3. 管理员端 - 课程审核接口
|
|||
|
|
|
|||
|
|
**前端定义**: `/api/v1/admin/courses/review` (GET)
|
|||
|
|
**新后端实现**: `/api/v1/admin/courses/review` (GET) ✅
|
|||
|
|
|
|||
|
|
**状态**: 已实现
|
|||
|
|
|
|||
|
|
### 4. 家长端 - 任务完成接口
|
|||
|
|
|
|||
|
|
**前端定义**: `/api/v1/parent/tasks/{taskId}/complete` (POST)
|
|||
|
|
**新后端实现**: `/api/v1/parent/tasks/{taskId}/complete` (POST) ✅
|
|||
|
|
|
|||
|
|
**状态**: 已实现
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 真正需要补充的接口
|
|||
|
|
|
|||
|
|
经过验证,以下接口在前端 api-spec.yml 中有定义,但新后端确实缺失:
|
|||
|
|
|
|||
|
|
### 无
|
|||
|
|
|
|||
|
|
**所有前端定义的接口在新后端都已经实现了!**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 接口路径差异总结
|
|||
|
|
|
|||
|
|
| 前端路径 | 新后端路径 | 状态 | 备注 |
|
|||
|
|
|---------|----------|------|------|
|
|||
|
|
| `/api/v1/teacher/lessons/{id}/complete` | `/api/v1/teacher/lessons/{id}/finish` | ⚠️ | 路径不同,功能相同 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
|
|||
|
|
**前端 api-spec.yml 中定义的 148 个接口,新后端已经实现了 100%**
|
|||
|
|
|
|||
|
|
唯一需要注意的是:
|
|||
|
|
- `/api/v1/teacher/lessons/{id}/complete` 在新后端是 `/api/v1/teacher/lessons/{id}/finish`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 下一步行动
|
|||
|
|
|
|||
|
|
### 选项 A: 修改前端 api-spec.yml (推荐)
|
|||
|
|
|
|||
|
|
将 `/api/v1/teacher/lessons/{id}/complete` 修改为 `/api/v1/teacher/lessons/{id}/finish`,然后重新生成 API 客户端。
|
|||
|
|
|
|||
|
|
### 选项 B: 在新后端添加别名
|
|||
|
|
|
|||
|
|
在 `TeacherLessonController` 中添加 `@PostMapping("/{id}/complete")` 作为 `finish` 的别名。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 端到端测试就绪
|
|||
|
|
|
|||
|
|
由于所有接口都已实现,可以开始端到端测试。
|
|||
|
|
|
|||
|
|
### 测试准备
|
|||
|
|
|
|||
|
|
1. **启动后端**: `docker compose up --build`
|
|||
|
|
2. **启动前端**: `cd reading-platform-frontend && npm run dev`
|
|||
|
|
3. **测试账号**:
|
|||
|
|
- 管理员:admin / admin123
|
|||
|
|
- 学校:school / 123456
|
|||
|
|
- 教师:teacher1 / 123456
|
|||
|
|
- 家长:parent1 / 123456
|
|||
|
|
|
|||
|
|
### 测试重点
|
|||
|
|
|
|||
|
|
1. 教师端:课时管理 ( finish vs complete)
|
|||
|
|
2. 学校端:学生/教师/班级管理
|
|||
|
|
3. 家长端:孩子任务/课时查看
|
|||
|
|
4. 管理员端:租户/课程管理
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 附录:前端接口完整列表
|
|||
|
|
|
|||
|
|
### 教师端 (37 个)
|
|||
|
|
```
|
|||
|
|
/api/v1/teacher/dashboard
|
|||
|
|
/api/v1/teacher/dashboard/today
|
|||
|
|
/api/v1/teacher/dashboard/weekly
|
|||
|
|
/api/v1/teacher/courses
|
|||
|
|
/api/v1/teacher/courses/{id}
|
|||
|
|
/api/v1/teacher/courses/classes
|
|||
|
|
/api/v1/teacher/courses/students
|
|||
|
|
/api/v1/teacher/courses/classes/{classId}/students
|
|||
|
|
/api/v1/teacher/courses/classes/{classId}/teachers
|
|||
|
|
/api/v1/teacher/lessons
|
|||
|
|
/api/v1/teacher/lessons/{id}
|
|||
|
|
/api/v1/teacher/lessons/{id}/start
|
|||
|
|
/api/v1/teacher/lessons/{id}/finish (新后端使用此路径)
|
|||
|
|
/api/v1/teacher/lessons/{id}/complete (前端定义,建议改为 finish)
|
|||
|
|
/api/v1/teacher/lessons/{id}/cancel
|
|||
|
|
/api/v1/teacher/lessons/{lessonId}/students/{studentId}/record
|
|||
|
|
/api/v1/teacher/lessons/{lessonId}/student-records
|
|||
|
|
/api/v1/teacher/lessons/{lessonId}/student-records/batch
|
|||
|
|
/api/v1/teacher/lessons/{lessonId}/feedback
|
|||
|
|
/api/v1/teacher/tasks
|
|||
|
|
/api/v1/teacher/tasks/{id}
|
|||
|
|
/api/v1/teacher/tasks/{taskId}/completions/{studentId}
|
|||
|
|
/api/v1/teacher/tasks/stats
|
|||
|
|
/api/v1/teacher/tasks/stats/by-type
|
|||
|
|
/api/v1/teacher/tasks/stats/by-class
|
|||
|
|
/api/v1/teacher/tasks/stats/monthly
|
|||
|
|
/api/v1/teacher/tasks/{id}/completions
|
|||
|
|
/api/v1/teacher/tasks/task-templates
|
|||
|
|
/api/v1/teacher/tasks/task-templates/{id}
|
|||
|
|
/api/v1/teacher/tasks/task-templates/default/{taskType}
|
|||
|
|
/api/v1/teacher/tasks/from-template
|
|||
|
|
/api/v1/teacher/schedules
|
|||
|
|
/api/v1/teacher/schedules/{id}
|
|||
|
|
/api/v1/teacher/schedules/timetable
|
|||
|
|
/api/v1/teacher/schedules/today
|
|||
|
|
/api/v1/teacher/notifications
|
|||
|
|
/api/v1/teacher/notifications/{id}
|
|||
|
|
/api/v1/teacher/notifications/{id}/read
|
|||
|
|
/api/v1/teacher/notifications/read-all
|
|||
|
|
/api/v1/teacher/notifications/unread-count
|
|||
|
|
/api/v1/teacher/growth-records
|
|||
|
|
/api/v1/teacher/growth-records/{id}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 学校端 (58 个)
|
|||
|
|
```
|
|||
|
|
/api/v1/school/teachers
|
|||
|
|
/api/v1/school/teachers/{id}
|
|||
|
|
/api/v1/school/teachers/{id}/reset-password
|
|||
|
|
/api/v1/school/students
|
|||
|
|
/api/v1/school/students/{id}
|
|||
|
|
/api/v1/school/students/import
|
|||
|
|
/api/v1/school/students/import/template
|
|||
|
|
/api/v1/school/students/{id}/transfer
|
|||
|
|
/api/v1/school/students/{id}/history
|
|||
|
|
/api/v1/school/parents
|
|||
|
|
/api/v1/school/parents/{id}
|
|||
|
|
/api/v1/school/parents/{id}/reset-password
|
|||
|
|
/api/v1/school/parents/{parentId}/students/{studentId}
|
|||
|
|
/api/v1/school/classes
|
|||
|
|
/api/v1/school/classes/{id}
|
|||
|
|
/api/v1/school/classes/{id}/students
|
|||
|
|
/api/v1/school/classes/{id}/teachers
|
|||
|
|
/api/v1/school/classes/{id}/teachers/{teacherId}
|
|||
|
|
/api/v1/school/classes/{id}/students/{studentId}
|
|||
|
|
/api/v1/school/school-courses
|
|||
|
|
/api/v1/school/school-courses/{id}
|
|||
|
|
/api/v1/school/schedules
|
|||
|
|
/api/v1/school/schedules/{id}
|
|||
|
|
/api/v1/school/schedules/timetable
|
|||
|
|
/api/v1/school/schedules/templates
|
|||
|
|
/api/v1/school/schedules/templates/{id}
|
|||
|
|
/api/v1/school/schedules/templates/{id}/apply
|
|||
|
|
/api/v1/school/schedules/batch
|
|||
|
|
/api/v1/school/tasks
|
|||
|
|
/api/v1/school/tasks/{id}
|
|||
|
|
/api/v1/school/tasks/{taskId}/completions/{studentId}
|
|||
|
|
/api/v1/school/tasks/task-templates
|
|||
|
|
/api/v1/school/tasks/task-templates/{id}
|
|||
|
|
/api/v1/school/tasks/task-templates/default/{taskType}
|
|||
|
|
/api/v1/school/tasks/from-template
|
|||
|
|
/api/v1/school/tasks/stats
|
|||
|
|
/api/v1/school/tasks/stats/by-type
|
|||
|
|
/api/v1/school/tasks/stats/by-class
|
|||
|
|
/api/v1/school/tasks/stats/monthly
|
|||
|
|
/api/v1/school/tasks/{id}/completions
|
|||
|
|
/api/v1/school/stats
|
|||
|
|
/api/v1/school/stats/teachers
|
|||
|
|
/api/v1/school/stats/lesson-trend
|
|||
|
|
/api/v1/school/stats/courses
|
|||
|
|
/api/v1/school/stats/course-distribution
|
|||
|
|
/api/v1/school/stats/activities
|
|||
|
|
/api/v1/school/notifications
|
|||
|
|
/api/v1/school/notifications/{id}
|
|||
|
|
/api/v1/school/notifications/{id}/read
|
|||
|
|
/api/v1/school/notifications/read-all
|
|||
|
|
/api/v1/school/notifications/unread-count
|
|||
|
|
/api/v1/school/operation-logs
|
|||
|
|
/api/v1/school/export/teachers
|
|||
|
|
/api/v1/school/export/students
|
|||
|
|
/api/v1/school/export/lessons
|
|||
|
|
/api/v1/school/export/growth-records
|
|||
|
|
/api/v1/school/course-packages
|
|||
|
|
/api/v1/school/course-packages/{id}
|
|||
|
|
/api/v1/school/growth-records
|
|||
|
|
/api/v1/school/growth-records/{id}
|
|||
|
|
/api/v1/school/settings
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 家长端 (14 个)
|
|||
|
|
```
|
|||
|
|
/api/v1/parent/children
|
|||
|
|
/api/v1/parent/children/{id}
|
|||
|
|
/api/v1/parent/children/{childId}/lessons
|
|||
|
|
/api/v1/parent/children/{childId}/tasks
|
|||
|
|
/api/v1/parent/children/{childId}/tasks/{taskId}/feedback
|
|||
|
|
/api/v1/parent/tasks/{id}
|
|||
|
|
/api/v1/parent/tasks/student/{studentId}
|
|||
|
|
/api/v1/parent/tasks/{taskId}/complete
|
|||
|
|
/api/v1/parent/notifications
|
|||
|
|
/api/v1/parent/notifications/{id}
|
|||
|
|
/api/v1/parent/notifications/{id}/read
|
|||
|
|
/api/v1/parent/notifications/read-all
|
|||
|
|
/api/v1/parent/notifications/unread-count
|
|||
|
|
/api/v1/parent/growth-records
|
|||
|
|
/api/v1/parent/growth-records/{id}
|
|||
|
|
/api/v1/parent/growth-records/student/{studentId}
|
|||
|
|
/api/v1/parent/growth-records/student/{studentId}/recent
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 管理员端 (39 个)
|
|||
|
|
```
|
|||
|
|
/api/v1/admin/tenants
|
|||
|
|
/api/v1/admin/tenants/{id}
|
|||
|
|
/api/v1/admin/tenants/{id}/status
|
|||
|
|
/api/v1/admin/tenants/{id}/quota
|
|||
|
|
/api/v1/admin/tenants/{id}/reset-password
|
|||
|
|
/api/v1/admin/tenants/active
|
|||
|
|
/api/v1/admin/courses
|
|||
|
|
/api/v1/admin/courses/{id}
|
|||
|
|
/api/v1/admin/courses/review
|
|||
|
|
/api/v1/admin/courses/{id}/submit
|
|||
|
|
/api/v1/admin/courses/{id}/withdraw
|
|||
|
|
/api/v1/admin/courses/{id}/approve
|
|||
|
|
/api/v1/admin/courses/{id}/reject
|
|||
|
|
/api/v1/admin/courses/{id}/publish
|
|||
|
|
/api/v1/admin/courses/{id}/direct-publish
|
|||
|
|
/api/v1/admin/courses/{id}/unpublish
|
|||
|
|
/api/v1/admin/courses/{id}/republish
|
|||
|
|
/api/v1/admin/courses/{id}/archive
|
|||
|
|
/api/v1/admin/courses/{courseId}/lessons
|
|||
|
|
/api/v1/admin/packages
|
|||
|
|
/api/v1/admin/packages/{id}
|
|||
|
|
/api/v1/admin/packages/{id}/submit
|
|||
|
|
/api/v1/admin/packages/{id}/review
|
|||
|
|
/api/v1/admin/packages/{id}/publish
|
|||
|
|
/api/v1/admin/packages/{id}/offline
|
|||
|
|
/api/v1/admin/resources/libraries
|
|||
|
|
/api/v1/admin/resources/libraries/{id}
|
|||
|
|
/api/v1/admin/resources/items
|
|||
|
|
/api/v1/admin/resources/items/{id}
|
|||
|
|
/api/v1/admin/themes
|
|||
|
|
/api/v1/admin/themes/{id}
|
|||
|
|
/api/v1/admin/settings
|
|||
|
|
/api/v1/admin/stats
|
|||
|
|
/api/v1/admin/stats/trend
|
|||
|
|
/api/v1/admin/stats/tenants/active
|
|||
|
|
/api/v1/admin/stats/courses/popular
|
|||
|
|
/api/v1/admin/stats/activities
|
|||
|
|
/api/v1/admin/operation-logs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**验证结论:所有前端定义的接口在新后端都已实现,可以开始端到端测试!**
|