Merge branch 'main' of http://8.148.151.56:3000/tonytech/kindergarten_java into main_dev
This commit is contained in:
commit
7d86fb08c5
161
API 对比分析.md
161
API 对比分析.md
@ -1,161 +0,0 @@
|
||||
# API 对比分析报告
|
||||
|
||||
## 概述
|
||||
对比 reading-platform-backend (Node.js/NestJS) 和 reading-platform-java (Spring Boot) 的 API 接口差异
|
||||
|
||||
---
|
||||
|
||||
## 已补全的接口
|
||||
|
||||
### 1. 任务管理相关接口(SchoolTaskController, TeacherTaskController)
|
||||
|
||||
#### 任务统计接口
|
||||
- `GET /api/v1/school/tasks/stats` - 获取任务统计数据
|
||||
- `GET /api/v1/school/tasks/stats/by-type` - 按任务类型统计
|
||||
- `GET /api/v1/school/tasks/stats/by-class` - 按班级统计
|
||||
- `GET /api/v1/school/tasks/stats/monthly` - 月度统计趋势
|
||||
|
||||
#### 任务完成情况接口
|
||||
- `GET /api/v1/school/tasks/:id/completions` - 获取任务完成情况分页
|
||||
- `PUT /api/v1/school/tasks/:taskId/completions/:studentId` - 更新任务完成状态
|
||||
|
||||
#### 任务模板接口
|
||||
- `GET /api/v1/school/task-templates` - 获取任务模板列表
|
||||
- `GET /api/v1/school/task-templates/:id` - 获取单个模板
|
||||
- `GET /api/v1/school/task-templates/default/:taskType` - 获取默认模板
|
||||
- `POST /api/v1/school/task-templates` - 创建模板
|
||||
- `PUT /api/v1/school/task-templates/:id` - 更新模板
|
||||
- `DELETE /api/v1/school/task-templates/:id` - 删除模板
|
||||
- `POST /api/v1/school/tasks/from-template` - 从模板创建任务
|
||||
|
||||
### 2. 通知相关接口
|
||||
|
||||
#### 学校管理员通知(SchoolNotificationController - 新增)
|
||||
- `GET /api/v1/school/notifications` - 获取通知列表
|
||||
- `GET /api/v1/school/notifications/:id` - 根据 ID 获取通知
|
||||
- `GET /api/v1/school/notifications/unread-count` - 获取未读数量
|
||||
- `POST /api/v1/school/notifications/:id/read` - 标记已读
|
||||
- `POST /api/v1/school/notifications/read-all` - 全部标记已读
|
||||
|
||||
### 3. 排课和课表相关接口(SchoolScheduleController)
|
||||
- `GET /api/v1/school/schedules/timetable` - 获取课表(带日期范围)
|
||||
- `POST /api/v1/school/schedules/batch` - 批量创建排课
|
||||
- `GET /api/v1/school/schedules/templates/:id` - 获取单个模板
|
||||
- `PUT /api/v1/school/schedules/templates/:id` - 更新模板
|
||||
- `POST /api/v1/school/schedules/templates/:id/apply` - 应用模板
|
||||
|
||||
### 4. 新增 DTO
|
||||
- `TaskTemplateCreateRequest` - 任务模板创建请求
|
||||
- `TaskTemplateUpdateRequest` - 任务模板更新请求
|
||||
- `CreateTaskFromTemplateRequest` - 从模板创建任务请求
|
||||
- `SchedulePlanCreateRequest` - 课表计划创建请求
|
||||
- `ScheduleTemplateApplyRequest` - 课表模板应用请求
|
||||
|
||||
---
|
||||
|
||||
## 仍需补全的接口
|
||||
|
||||
### P1 - 重要功能
|
||||
|
||||
#### 1. 成长档案接口(SchoolGrowthController, TeacherGrowthController)
|
||||
- `GET /api/v1/school/students/:studentId/growth-records` - 按学生查询成长档案
|
||||
- `GET /api/v1/school/classes/:classId/growth-records` - 按班级查询成长档案
|
||||
- `GET /api/v1/teacher/classes/:classId/growth-records` - 教师端按班级查询
|
||||
|
||||
#### 2. 教师端课时增强接口(TeacherLessonController)
|
||||
- `POST /api/v1/teacher/lessons/:id/finish` - 完成课时(带反馈数据)
|
||||
- `POST /api/v1/teacher/lessons/:id/students/:studentId/record` - 保存学生记录
|
||||
- `GET /api/v1/teacher/lessons/:id/student-records` - 获取学生记录
|
||||
- `POST /api/v1/teacher/lessons/:id/student-records/batch` - 批量保存学生记录
|
||||
- `POST /api/v1/teacher/lessons/:id/feedback` - 提交反馈
|
||||
- `GET /api/v1/teacher/lessons/:id/feedback` - 获取反馈
|
||||
|
||||
#### 3. 教师端课程增强接口(TeacherCourseController)
|
||||
- `GET /api/v1/teacher/courses/classes` - 获取班级列表
|
||||
- `GET /api/v1/teacher/students` - 获取所有学生
|
||||
- `GET /api/v1/teacher/classes/:id/students` - 获取班级学生
|
||||
- `GET /api/v1/teacher/classes/:id/teachers` - 获取班级教师
|
||||
- `GET /api/v1/teacher/schedules/timetable` - 获取课表
|
||||
- `GET /api/v1/teacher/schedules/today` - 获取今天排课
|
||||
- `POST /api/v1/teacher/schedules` - 创建排课
|
||||
- `PUT /api/v1/teacher/schedules/:id` - 更新排课
|
||||
- `DELETE /api/v1/teacher/schedules/:id` - 取消排课
|
||||
|
||||
#### 4. 班级管理接口(SchoolClassController)
|
||||
- `GET /api/v1/school/classes/:id/students` - 获取班级学生
|
||||
- `GET /api/v1/school/classes/:id/teachers` - 获取班级教师
|
||||
- `POST /api/v1/school/classes/:id/teachers` - 添加班级教师
|
||||
- `PUT /api/v1/school/classes/:id/teachers/:teacherId` - 更新班级教师
|
||||
- `DELETE /api/v1/school/classes/:id/teachers/:teacherId` - 移除班级教师
|
||||
- `POST /api/v1/school/students/:id/transfer` - 学生调班
|
||||
- `GET /api/v1/school/students/:id/history` - 学生调班历史
|
||||
- `POST /api/v1/school/students/import` - 批量导入学生
|
||||
- `GET /api/v1/school/students/import/template` - 获取导入模板
|
||||
|
||||
### P2 - 辅助功能
|
||||
|
||||
#### 1. 统计报告接口(SchoolStatsController)
|
||||
- `GET /api/v1/school/stats/teachers` - 活跃教师统计
|
||||
- `GET /api/v1/school/stats/courses` - 课程使用统计
|
||||
- `GET /api/v1/school/stats/activities` - 最近活动
|
||||
- `GET /api/v1/school/stats/lesson-trend` - 课时趋势
|
||||
- `GET /api/v1/school/stats/course-distribution` - 课程分布
|
||||
- `GET /api/v1/school/reports/overview` - 概览报告
|
||||
- `GET /api/v1/school/reports/teachers` - 教师报告
|
||||
- `GET /api/v1/school/reports/courses` - 课程报告
|
||||
- `GET /api/v1/school/reports/students` - 学生报告
|
||||
|
||||
#### 2. 导出接口增强(SchoolExportController)
|
||||
- `GET /api/v1/school/export/lessons?startDate=&endDate=` - 导出课时(带日期范围)
|
||||
- `GET /api/v1/school/export/teacher-stats?startDate=&endDate=` - 导出教师统计
|
||||
- `GET /api/v1/school/export/student-stats?classId=` - 导出学生统计(按班级)
|
||||
|
||||
#### 3. 课程包/套餐接口
|
||||
- `GET /api/v1/school/package` - 获取套餐信息
|
||||
- `GET /api/v1/school/package/usage` - 获取套餐使用情况
|
||||
|
||||
#### 4. 家长相关接口
|
||||
- `POST /api/v1/school/parents/:parentId/children/:studentId` - 添加孩子到家长
|
||||
- `DELETE /api/v1/school/parents/:parentId/children/:studentId` - 从家长移除孩子
|
||||
|
||||
#### 5. 管理员课程接口
|
||||
- `GET /api/v1/admin/courses/:id/stats` - 课程统计
|
||||
- `GET /api/v1/admin/courses/:id/validate` - 验证课程
|
||||
- `GET /api/v1/admin/courses/:id/versions` - 版本历史
|
||||
- `POST /api/v1/admin/courses/:id/submit` - 提交审核
|
||||
- `POST /api/v1/admin/courses/:id/withdraw` - 撤销审核
|
||||
- `POST /api/v1/admin/courses/:id/approve` - 审核通过
|
||||
- `POST /api/v1/admin/courses/:id/reject` - 审核驳回
|
||||
- `POST /api/v1/admin/courses/:id/direct-publish` - 直接发布
|
||||
- `POST /api/v1/admin/courses/:id/publish` - 发布
|
||||
- `POST /api/v1/admin/courses/:id/unpublish` - 下架
|
||||
- `POST /api/v1/admin/courses/:id/republish` - 重新发布
|
||||
|
||||
#### 6. 资源接口增强
|
||||
- `POST /api/v1/admin/resources/items/batch-delete` - 批量删除资源项
|
||||
- `GET /api/v1/admin/resources/stats` - 资源统计
|
||||
|
||||
#### 7. 反馈接口
|
||||
- `GET /api/v1/teacher/feedbacks` - 获取反馈列表
|
||||
- `GET /api/v1/teacher/feedbacks/stats` - 获取反馈统计
|
||||
- `GET /api/v1/school/feedbacks` - 获取反馈列表(学校端)
|
||||
- `GET /api/v1/school/feedbacks/stats` - 获取反馈统计(学校端)
|
||||
|
||||
#### 8. 认证接口
|
||||
- `GET /api/v1/auth/profile` - 获取用户信息
|
||||
- `POST /api/v1/auth/logout` - 登出
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
本次补全了以下主要功能:
|
||||
1. 任务管理:统计、模板、完成情况更新
|
||||
2. 通知:学校管理员通知接口
|
||||
3. 排课:课表模板、批量创建、应用模板
|
||||
|
||||
下一步建议优先补全:
|
||||
1. 成长档案按学生/班级查询接口
|
||||
2. 教师端课时反馈接口
|
||||
3. 班级管理相关接口
|
||||
4. 学生调班和批量导入接口
|
||||
586
CLAUDE.md
586
CLAUDE.md
@ -87,8 +87,483 @@ Result<T> error(code, msg) // { code: xxx, message: "...", data: null }
|
||||
```
|
||||
|
||||
### 4. OpenAPI 驱动开发
|
||||
- 后端:在 Controller 上使用 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
- 前端:运行 `npm run api:update` 从 `api-spec.yml` 重新生成 TypeScript 客户端
|
||||
|
||||
- **后端**:在 Controller 上使用 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
- **前端**:运行 `npm run api:update` 从 `api-spec.yml` 重新生成 TypeScript 客户端
|
||||
|
||||
### 5. 前后端接口规范
|
||||
|
||||
#### 后端:以 Controller 为"唯一真源"
|
||||
|
||||
以后端 `Spring Boot Controller` 为接口定义的唯一真源,通过 `SpringDoc/Knife4j` 导出`OpenAPI` 规范,所有接口必须符合统一响应模型。
|
||||
|
||||
**统一响应模型:**
|
||||
```java
|
||||
// 普通接口
|
||||
Result<T> success(T data) // { code: 200, message: "success", data: ... }
|
||||
Result<T> error(code, msg) // { code: xxx, message: "...", data: null }
|
||||
|
||||
// 分页接口
|
||||
Result<PageResult<T>> // { code: 200, message: "success", data: { items, total, page, pageSize } }
|
||||
```
|
||||
|
||||
**响应结构说明:**
|
||||
| 接口类型 | 返回类型 | 分页字段命名 |
|
||||
|---------|---------|-------------|
|
||||
| 普通接口 | `Result<T>` | - |
|
||||
| 分页接口 | `Result<PageResult<T>>` | `page`, `pageSize`, `total`, `items` |
|
||||
| 错误响应 | `Result<Void>` | 参考 `ErrorCode` 枚举 |
|
||||
|
||||
**请求参数规范:**
|
||||
| 参数类型 | 注解 | 说明 |
|
||||
|---------|------|------|
|
||||
| 路径变量 | `@PathVariable` | 与 OpenAPI path 模板保持一致 |
|
||||
| 查询参数 | `@RequestParam` | 分页:`page`, `pageSize`;过滤:`keyword`, `category` 等 |
|
||||
| 请求体 | `@RequestBody DTO` | 使用 `*Request` 类,不直接暴露实体 |
|
||||
|
||||
#### 前端:src/apis + fetch.ts 调用模式
|
||||
|
||||
围绕 `src/apis` + `fetch.ts` 的调用模式,将真实接口规范(路径、method、参数、响应结构)维护到 `apis.ts`。
|
||||
|
||||
**工作流程:**
|
||||
```
|
||||
后端 Controller (带 @Schema 注解)
|
||||
↓
|
||||
Knife4j/Swagger → /v3/api-docs
|
||||
↓
|
||||
api-spec.yml (OpenAPI 规范)
|
||||
↓
|
||||
orval (npm run api:gen)
|
||||
↓
|
||||
生成的 TypeScript 类型 + API 客户端
|
||||
↓
|
||||
Vue 组件使用 (强制类型校验)
|
||||
```
|
||||
|
||||
#### 实施步骤
|
||||
|
||||
**一、梳理并固化接口响应规范**
|
||||
|
||||
1. **确认统一响应模型**
|
||||
- 普通接口:`Result<业务 DTO>`,字段 `code/message/data`
|
||||
- 分页接口:`Result<PageResult<业务 DTO>>`,分页字段命名(`page`, `pageSize`, `total` 等)
|
||||
- 错误响应:统一使用 `Result<Void>` 或类似 `ResultVoid` schema
|
||||
|
||||
2. **从后端提炼规范说明**
|
||||
- 位置:`reading-platform-java/common/response` 与 `common/enums/ErrorCode`
|
||||
- 输出:简短的"接口规范说明"文档,写入 `docs/` 目录
|
||||
|
||||
**二、从后端生成/校准 OpenAPI 规范**
|
||||
|
||||
1. **配置 SpringDoc/Knife4j 导出 OpenAPI**
|
||||
- 查看/完善后端 OpenAPI 配置类(如 `OpenApiConfig` 或 Knife4j 配置)
|
||||
- 指定 API 基本信息(title/description/version),与当前 `api-spec.yml` 对齐
|
||||
- 扫描 `controller/*` 包下所有带 `@RestController` 的类
|
||||
- 支持 `@Operation`、`@Parameter`、`@Schema` 注解
|
||||
|
||||
2. **规范化 Controller 注解与返回类型**
|
||||
- 检查 Controller 方法返回类型是否全部为 `Result<T>` 或`Result<PageResult<T>>`
|
||||
- 为缺少注解的接口补全 `@Operation`、`@Parameter`、`@Schema`
|
||||
- 校准路径前缀与角色划分(`/api/v1/teacher/*`、`/api/v1/school/*` 等)
|
||||
|
||||
3. **替换/同步前端 api-spec.yml**
|
||||
- 使用导出的 OpenAPI JSON/YAML 覆盖/更新 `reading-platform-frontend/api-spec.yml`
|
||||
- 约定更新流程:修改后端 Controller → 查看/验证文档 → 导出并覆盖 api-spec.yml → 前端重新生成客户端
|
||||
|
||||
**三、将接口规范映射到前端 src/apis 体系**
|
||||
|
||||
1. **分析现有 src/apis 使用方式**
|
||||
- 搜索全项目对 `from 'src/apis/fetch'` 或`getRequests` 的引用
|
||||
- 列出当前真实在用的 URL 列表及对应页面组件
|
||||
- 对比这些 URL 与后端 Controller 路径以及 `api-spec.yml` 中的 paths
|
||||
|
||||
2. **设计 apis.ts 的"接口字典"结构**
|
||||
- 以 `SwaggerType` / `RequestType` 为基础
|
||||
- 将真实接口按模块分类(教师端、学校端、家长端、管理员端)
|
||||
- 每个接口包含:路径、method、请求参数类型、响应类型
|
||||
|
||||
### 6. DTO/VO 使用规范
|
||||
|
||||
#### 响应对象(Response/VO)
|
||||
- **必须创建独立的 VO 实体类**,不要使用 `Map`、`HashMap` 或 `JSONObject` 返回数据
|
||||
- VO 类应放在 `com.reading.platform.dto.response` 包下
|
||||
- 使用 `@Schema` 注解描述字段含义,便于生成 API 文档
|
||||
- 使用 `@Data` 和 `@Builder` 注解简化代码
|
||||
|
||||
**示例:**
|
||||
```java
|
||||
@Data
|
||||
@Builder
|
||||
@Schema(description = "用户信息响应")
|
||||
public class UserInfoResponse {
|
||||
@Schema(description = "用户 ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(description = "昵称")
|
||||
private String nickname;
|
||||
|
||||
@Schema(description = "角色")
|
||||
private String role;
|
||||
}
|
||||
```
|
||||
|
||||
#### 请求对象(Request/DTO)
|
||||
- 复杂请求参数应创建 DTO 类,放在 `com.reading.platform.dto.request` 包下
|
||||
- 使用 `@Valid` 和校验注解确保参数合法性
|
||||
|
||||
#### 为什么不用 Map?
|
||||
- ✅ VO 实体类:类型安全、IDE 智能提示、API 文档自动生成、易于维护
|
||||
- ❌ Map:类型不安全、无文档、易出错、难以重构
|
||||
|
||||
### 7. Swagger/OpenAPI 注解规范
|
||||
|
||||
#### 强制要求
|
||||
**所有实体类(Entity)、DTO、VO 都必须添加 `@Schema` 注解**,确保 API 文档完整性和前端类型生成准确性。
|
||||
|
||||
#### 注解使用规范
|
||||
|
||||
**1. 类级别注解**
|
||||
```java
|
||||
// Entity 类
|
||||
@Data
|
||||
@TableName("users")
|
||||
@Schema(description = "用户信息") // 必须添加
|
||||
public class User { ... }
|
||||
|
||||
// DTO/VO 类
|
||||
@Data
|
||||
@Schema(description = "用户创建请求") // 必须添加
|
||||
public class UserCreateRequest { ... }
|
||||
|
||||
@Data
|
||||
@Schema(description = "用户信息响应") // 必须添加
|
||||
public class UserResponse { ... }
|
||||
```
|
||||
|
||||
**2. 字段级别注解**
|
||||
```java
|
||||
@Schema(description = "用户 ID", example = "1", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户名", example = "zhangsan", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String username;
|
||||
|
||||
@Schema(description = "年龄", example = "18", minimum = "1", maximum = "150")
|
||||
private Integer age;
|
||||
|
||||
@Schema(description = "创建时间", example = "2024-01-01 12:00:00")
|
||||
private LocalDateTime createdAt;
|
||||
```
|
||||
|
||||
**3. Controller 方法注解**
|
||||
```java
|
||||
@Operation(summary = "创建用户", description = "创建新用户并返回用户信息")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "创建成功"),
|
||||
@ApiResponse(responseCode = "400", description = "参数错误"),
|
||||
@ApiResponse(responseCode = "409", description = "用户名已存在")
|
||||
})
|
||||
@PostMapping
|
||||
public Result<UserResponse> createUser(@Valid @RequestBody UserCreateRequest request) {
|
||||
return Result.success(userService.createUser(request));
|
||||
}
|
||||
```
|
||||
|
||||
**4. 参数注解**
|
||||
```java
|
||||
@Operation(summary = "根据 ID 获取用户")
|
||||
@GetMapping("/{id}")
|
||||
public Result<UserResponse> getUser(
|
||||
@Parameter(description = "用户 ID", required = true)
|
||||
@PathVariable Long id,
|
||||
|
||||
@Parameter(description = "是否包含详细信息")
|
||||
@RequestParam(defaultValue = "false")
|
||||
Boolean includeDetails
|
||||
) {
|
||||
return Result.success(userService.getUser(id, includeDetails));
|
||||
}
|
||||
```
|
||||
|
||||
#### 常用注解说明
|
||||
|
||||
| 注解 | 位置 | 说明 |
|
||||
|------|------|------|
|
||||
| `@Schema(description = "...")` | 类/字段 | 描述类或字段的含义 |
|
||||
| `@Schema(example = "...")` | 字段 | 示例值 |
|
||||
| `@Schema(requiredMode = REQUIRED)` | 字段 | 必填字段 |
|
||||
| `@Schema(requiredMode = READ_ONLY)` | 字段 | 只读字段(如 ID、创建时间) |
|
||||
| `@Schema(minimum = "1", maximum = "100")` | 字段 | 数值范围 |
|
||||
| `@Schema(minLength = 1, maxLength = 50)` | 字段 | 字符串长度 |
|
||||
| `@Schema(pattern = "^[a-zA-Z]+$")` | 字段 | 正则表达式 |
|
||||
| `@Operation(summary = "...")` | 方法 | 接口摘要 |
|
||||
| `@Parameter(description = "...")` | 参数 | 参数描述 |
|
||||
|
||||
#### 完整示例
|
||||
|
||||
**Entity 类:**
|
||||
```java
|
||||
package com.reading.platform.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@TableName("courses")
|
||||
@Schema(description = "课程信息")
|
||||
public class Course {
|
||||
|
||||
@Schema(description = "课程 ID", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "租户 ID", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
private Long tenantId;
|
||||
|
||||
@Schema(description = "课程名称", example = "绘本阅读入门", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String name;
|
||||
|
||||
@Schema(description = "课程编码", example = "READ001")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "课程描述")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "封面图片 URL")
|
||||
private String coverUrl;
|
||||
|
||||
@Schema(description = "分类", example = "language")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "适用年龄段", example = "5-6 岁")
|
||||
private String ageRange;
|
||||
|
||||
@Schema(description = "难度等级", example = "beginner")
|
||||
private String difficultyLevel;
|
||||
|
||||
@Schema(description = "课程时长(分钟)", example = "30")
|
||||
private Integer durationMinutes;
|
||||
|
||||
@Schema(description = "状态", example = "published")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.READ_ONLY)
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updatedAt;
|
||||
}
|
||||
```
|
||||
|
||||
**DTO 类:**
|
||||
```java
|
||||
package com.reading.platform.dto.request;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
@Data
|
||||
@Schema(description = "课程创建请求")
|
||||
public class CourseCreateRequest {
|
||||
|
||||
@Schema(description = "课程名称", example = "绘本阅读入门", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "课程名称不能为空")
|
||||
@Size(max = 100, message = "课程名称不能超过 100 个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "课程描述", example = "适合大班幼儿的绘本阅读课程")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "分类", example = "language")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "适用年龄段", example = "5-6 岁")
|
||||
private String ageRange;
|
||||
}
|
||||
```
|
||||
|
||||
#### 代码审查要点
|
||||
|
||||
- [ ] Entity 类是否添加了 `@Schema(description = "...")`
|
||||
- [ ] Entity 字段是否添加了 `@Schema` 注解描述字段含义
|
||||
- [ ] DTO/VO 类是否添加了 `@Schema(description = "...")`
|
||||
- [ ] DTO/VO 字段是否添加了 `@Schema` 注解
|
||||
- [ ] Controller 方法是否添加了 `@Operation` 注解
|
||||
- [ ] Controller 参数是否添加了 `@Parameter` 注解
|
||||
- [ ] 必填字段是否标注了 `requiredMode = REQUIRED`
|
||||
- [ ] 只读字段(ID、时间戳)是否标注了 `requiredMode = READ_ONLY`
|
||||
- [ ] 是否有合适的 `example` 示例值
|
||||
|
||||
#### 注意事项
|
||||
|
||||
1. **导入正确的包**
|
||||
```java
|
||||
import io.swagger.v3.oas.annotations.media.Schema; // Swagger 3.x
|
||||
```
|
||||
|
||||
2. **Lombok 与 Schema 的配合**
|
||||
- `@Data` 生成的 getter 方法会自动继承字段上的 `@Schema` 注解
|
||||
- 但建议字段和方法都加上注解以确保兼容性
|
||||
|
||||
3. **必填校验**
|
||||
- `requiredMode = REQUIRED` 仅用于文档说明
|
||||
- 实际校验需要配合 `@NotNull`、`@NotBlank` 等校验注解
|
||||
|
||||
4. **枚举类型**
|
||||
```java
|
||||
@Schema(description = "状态", example = "active", allowableValues = {"active", "inactive"})
|
||||
private String status;
|
||||
```
|
||||
|
||||
### 8. 前端接口校验规范
|
||||
|
||||
#### 基于 OpenAPI + orval + TypeScript 的强制校验链路
|
||||
|
||||
本项目前端采用**从接口文档到页面代码的强制类型校验链路**,确保前后端接口一致性和类型安全。
|
||||
|
||||
**技术栈:**
|
||||
- **OpenAPI 3.0**:统一的 API 接口规范
|
||||
- **orval**:从 OpenAPI 规范生成 TypeScript 类型和 API 客户端
|
||||
- **TypeScript**:静态类型检查
|
||||
- **ESLint**:代码规范约束
|
||||
- **axios**:HTTP 请求(由 orval 自动生成)
|
||||
|
||||
**工作流程:**
|
||||
|
||||
```
|
||||
后端 Controller (带 @Schema 注解)
|
||||
↓
|
||||
Knife4j/Swagger
|
||||
↓
|
||||
api-spec.yml (OpenAPI 规范)
|
||||
↓
|
||||
orval (npm run api:gen)
|
||||
↓
|
||||
生成的 TypeScript 类型 + API 客户端
|
||||
↓
|
||||
Vue 组件使用 (强制类型校验)
|
||||
```
|
||||
|
||||
#### 配置说明
|
||||
|
||||
**orval 配置 (`orval.config.ts` 或 `vite.config.ts`):**
|
||||
```typescript
|
||||
export default {
|
||||
'api': {
|
||||
input: {
|
||||
target: './api-spec.yml',
|
||||
filters: {
|
||||
tags: ['default'], // 只生成指定标签的接口
|
||||
},
|
||||
},
|
||||
output: {
|
||||
mode: 'split', // 分离模式:每个接口一个文件
|
||||
target: './src/api/generated/client.ts',
|
||||
schemas: './src/api/generated/schemas',
|
||||
client: 'axios',
|
||||
mock: false,
|
||||
override: {
|
||||
fetch: {
|
||||
includeHttpRequestHeader: true,
|
||||
},
|
||||
useTypeOverInterfaces: true, // 优先使用 type
|
||||
useDate: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
#### 使用规范
|
||||
|
||||
**1. 后端必须添加 @Schema 注解**
|
||||
```java
|
||||
@Operation(summary = "获取用户信息")
|
||||
@GetMapping("/{id}")
|
||||
public Result<UserInfoResponse> getUser(@PathVariable Long id) {
|
||||
return Result.success(userService.getUser(id));
|
||||
}
|
||||
```
|
||||
|
||||
**2. 前端必须使用生成的类型和客户端**
|
||||
```typescript
|
||||
// ✅ 正确:使用生成的类型和 API
|
||||
import { getUser } from '@/api/generated/client';
|
||||
import type { UserInfoResponse } from '@/api/generated/schemas';
|
||||
|
||||
const user: UserInfoResponse = await getUser(id);
|
||||
|
||||
// ❌ 错误:不要手写类型或手动调用 axios
|
||||
interface ManualUser { id: number; name: string; }
|
||||
const user = await axios.get(`/api/users/${id}`);
|
||||
```
|
||||
|
||||
**3. ESLint 约束规则**
|
||||
```typescript
|
||||
// .eslintrc.cjs 中添加
|
||||
rules: {
|
||||
// 禁止手动调用 axios,必须使用生成的 API 客户端
|
||||
'no-restricted-imports': [
|
||||
'error',
|
||||
{
|
||||
patterns: ['axios', '!@/api/generated/*'],
|
||||
},
|
||||
],
|
||||
// 强制使用生成的类型定义
|
||||
'@typescript-eslint/no-explicit-any': 'error',
|
||||
// 禁止使用 any 类型(特殊情况需 eslint-disable 注释)
|
||||
}
|
||||
```
|
||||
|
||||
**4. 运行时校验(可选)**
|
||||
使用 `zod` 或 `yup` 进行运行时数据校验:
|
||||
```typescript
|
||||
import { UserInfoSchema } from '@/api/generated/schemas';
|
||||
import { z } from 'zod';
|
||||
|
||||
// 运行时校验响应数据
|
||||
const parsedData = UserInfoSchema.parse(apiResponse);
|
||||
```
|
||||
|
||||
#### 开发命令
|
||||
|
||||
```bash
|
||||
cd reading-platform-frontend
|
||||
|
||||
# 从后端更新 API 规范并生成客户端
|
||||
npm run api:gen
|
||||
|
||||
# 或者完整流程(包含从后端导出 swagger)
|
||||
npm run api:update
|
||||
```
|
||||
|
||||
#### 代码审查要点
|
||||
|
||||
- [ ] 前端是否使用了 orval 生成的类型,而非手写 interface
|
||||
- [ ] 是否使用生成的 API 客户端,而非手动 axios 调用
|
||||
- [ ] TypeScript 编译是否通过(无类型错误)
|
||||
- [ ] 后端 Controller 是否正确添加 @Schema 注解
|
||||
- [ ] API 变更后是否重新运行了 `npm run api:gen`
|
||||
|
||||
#### 常见问题
|
||||
|
||||
**Q: 为什么要强制使用生成的类型?**
|
||||
A: 手写类型容易与后端实际返回不一致,导致运行时错误。生成类型确保前后端一致性。
|
||||
|
||||
**Q: 如何添加自定义逻辑?**
|
||||
A: 在生成的客户端外封装业务逻辑层,不要修改生成的文件。
|
||||
|
||||
**Q: API 变更后忘记更新怎么办?**
|
||||
A: CI/CD 中可添加类型检查步骤,类型不通过则构建失败。
|
||||
|
||||
## 开发命令
|
||||
|
||||
@ -141,4 +616,109 @@ npm run api:update
|
||||
| 家长 | parent1 | 123456 |
|
||||
|
||||
## API 文档
|
||||
- 访问地址:http://localhost:8080/doc.html(后端启动后)
|
||||
- 访问地址:http://localhost:8080/doc.html(后端启动后)
|
||||
|
||||
## 近期补充的接口和字段(2026-03-10)
|
||||
|
||||
### 实体类新增字段
|
||||
|
||||
**StudentRecord** - 学生评价记录
|
||||
- `focus` - 专注力评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `interest` - 兴趣评分 (1-5)
|
||||
- `understanding` - 理解度评分 (1-5)
|
||||
|
||||
**LessonFeedback** - 课时反馈
|
||||
- `design_quality` - 设计质量评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `goal_achievement` - 目标达成度评分 (1-5)
|
||||
- `step_feedbacks` - 环节反馈 JSON
|
||||
- `pros` - 优点
|
||||
- `suggestions` - 建议
|
||||
- `activities_done` - 完成的活动 JSON
|
||||
|
||||
**Lesson** - 课时
|
||||
- `actual_duration` - 实际时长(分钟)
|
||||
- `overall_rating` - 整体评分
|
||||
- `participation_rating` - 参与度评分
|
||||
- `completion_note` - 完成说明
|
||||
|
||||
**Student** - 学生
|
||||
- `class_id` - 班级 ID
|
||||
- `parent_name` - 家长姓名
|
||||
- `parent_phone` - 家长手机号
|
||||
- `reading_count` - 阅读次数
|
||||
- `lesson_count` - 课时数
|
||||
|
||||
**ClassTeacher** - 班级教师
|
||||
- `is_primary` - 是否主教
|
||||
- `sort_order` - 排序
|
||||
|
||||
**StudentClassHistory** - 学生班级历史
|
||||
- `reason` - 调班原因
|
||||
|
||||
### 新增 Service 方法
|
||||
|
||||
**ClassService**
|
||||
- `getClassList(Long tenantId)` - 获取班级列表(无分页)
|
||||
- `getClassStudents(Long classId, ...)` - 获取班级学生分页
|
||||
- `getClassTeachers(Long classId)` - 获取班级教师列表
|
||||
- `addClassTeacher(...)` - 添加班级教师
|
||||
- `updateClassTeacher(...)` - 更新班级教师角色
|
||||
- `removeClassTeacher(...)` - 移除班级教师
|
||||
|
||||
**LessonService**
|
||||
- `finishLesson(...)` - 结束课时
|
||||
- `saveStudentRecord(...)` - 保存学生评价记录
|
||||
- `getStudentRecords(Long lessonId)` - 获取课程所有学生记录
|
||||
- `batchSaveStudentRecords(...)` - 批量保存学生评价记录
|
||||
- `saveLessonFeedback(...)` - 提交课程反馈
|
||||
- `getLessonFeedback(Long lessonId)` - 获取课程反馈
|
||||
|
||||
**StudentService**
|
||||
- `transferStudent(...)` - 学生调班
|
||||
- `getStudentClassHistory(Long studentId)` - 获取学生调班历史
|
||||
|
||||
**TaskService**
|
||||
- `getTaskCompletion(Long taskId, Long studentId)` - 获取任务完成记录
|
||||
|
||||
### 新增 Controller 接口
|
||||
|
||||
**学校端 (/api/v1/school/*)**
|
||||
- `GET /classes/list` - 获取班级列表(无分页)
|
||||
- `GET /classes/{id}/students` - 获取班级学生分页
|
||||
- `GET /classes/{id}/teachers` - 获取班级教师列表
|
||||
- `POST /classes/{id}/teachers` - 添加班级教师
|
||||
- `PUT /classes/{id}/teachers/{teacherId}` - 更新班级教师角色
|
||||
- `DELETE /classes/{id}/teachers/{teacherId}` - 移除班级教师
|
||||
- `POST /students/{id}/transfer` - 学生调班
|
||||
- `GET /students/{id}/history` - 获取学生调班历史
|
||||
|
||||
**教师端 (/api/v1/teacher/*)**
|
||||
- `GET /courses/classes` - 获取教师的班级列表
|
||||
- `GET /courses/students` - 获取教师所有学生分页
|
||||
- `GET /courses/classes/{classId}/students` - 获取班级学生分页
|
||||
- `GET /courses/classes/{classId}/teachers` - 获取班级教师列表
|
||||
- `POST /lessons/{id}/finish` - 结束课时
|
||||
- `POST /lessons/{lessonId}/students/{studentId}/record` - 保存学生评价记录
|
||||
- `GET /lessons/{lessonId}/student-records` - 获取课程所有学生记录
|
||||
- `POST /lessons/{lessonId}/student-records/batch` - 批量保存学生评价记录
|
||||
- `POST /lessons/{lessonId}/feedback` - 提交课程反馈
|
||||
- `GET /lessons/{lessonId}/feedback` - 获取课程反馈
|
||||
- `GET /schedules/timetable` - 获取课表(按日期范围)
|
||||
- `GET /schedules/today` - 获取今日课表
|
||||
- `POST /schedules` - 创建课表计划
|
||||
- `PUT /schedules/{id}` - 更新课表计划
|
||||
- `DELETE /schedules/{id}` - 取消课表计划
|
||||
|
||||
**家长端 (/api/v1/parent/*)**
|
||||
- `GET /children` - 获取我的孩子(增强返回格式)
|
||||
- `GET /children/{id}` - 获取孩子详情(增强返回格式)
|
||||
- `GET /children/{childId}/lessons` - 获取孩子的课时记录
|
||||
- `GET /children/{childId}/tasks` - 获取孩子的任务(带完成状态)
|
||||
- `PUT /children/{childId}/tasks/{taskId}/feedback` - 提交任务家长反馈
|
||||
|
||||
### 数据库迁移
|
||||
|
||||
- 迁移脚本:``
|
||||
- 包含上述所有实体类新增字段的 ALTER TABLE 语句
|
||||
132
Service 重构总结.md
132
Service 重构总结.md
@ -1,132 +0,0 @@
|
||||
# Service 层重构总结
|
||||
|
||||
## 重构时间
|
||||
2026-03-10
|
||||
|
||||
## 重构目的
|
||||
将 Service 层从"直接 class 实现"重构为"interface + impl"模式,符合 Spring 最佳实践。
|
||||
|
||||
## 重构的 Service 列表
|
||||
|
||||
本次重构共完成了 14 个 Service 的 interface + impl 模式改造:
|
||||
|
||||
### 新增的 Interface 文件
|
||||
|
||||
| 序号 | 接口文件 | 实现类文件 |
|
||||
|------|----------|------------|
|
||||
| 1 | `AdminStatsService.java` | `AdminStatsServiceImpl.java` |
|
||||
| 2 | `CourseLessonService.java` | `CourseLessonServiceImpl.java` |
|
||||
| 3 | `CoursePackageService.java` | `CoursePackageServiceImpl.java` |
|
||||
| 4 | `ExportService.java` | `ExportServiceImpl.java` |
|
||||
| 5 | `FileUploadService.java` | `FileUploadServiceImpl.java` |
|
||||
| 6 | `OperationLogService.java` | `OperationLogServiceImpl.java` |
|
||||
| 7 | `ResourceService.java` | `ResourceServiceImpl.java` |
|
||||
| 8 | `SchoolCourseService.java` | `SchoolCourseServiceImpl.java` |
|
||||
| 9 | `SystemSettingService.java` | `SystemSettingServiceImpl.java` |
|
||||
| 10 | `TeacherDashboardService.java` | `TeacherDashboardServiceImpl.java` |
|
||||
| 11 | `ScheduleService.java` | `ScheduleServiceImpl.java` |
|
||||
| 12 | `ThemeService.java` | `ThemeServiceImpl.java` |
|
||||
| 13 | `TenantService.java` | `TenantServiceImpl.java` (已存在) |
|
||||
| 14 | `SchoolStatsService.java` | `SchoolStatsServiceImpl.java` |
|
||||
|
||||
### 已有的 Interface + Impl 模式 Service
|
||||
|
||||
以下 Service 在重构前已经是 interface + impl 模式:
|
||||
|
||||
1. `AuthService` → `AuthServiceImpl`
|
||||
2. `ClassService` → `ClassServiceImpl`
|
||||
3. `StudentService` → `StudentServiceImpl`
|
||||
4. `TaskService` → `TaskServiceImpl`
|
||||
5. `CourseService` → `CourseServiceImpl`
|
||||
6. `GrowthRecordService` → `GrowthRecordServiceImpl`
|
||||
7. `LessonService` → `LessonServiceImpl`
|
||||
8. `NotificationService` → `NotificationServiceImpl`
|
||||
9. `ParentService` → `ParentServiceImpl`
|
||||
10. `TeacherService` → `TeacherServiceImpl`
|
||||
11. `TokenService` → `TokenServiceImpl`
|
||||
|
||||
## 重构模式
|
||||
|
||||
所有 Service 遵循以下模式:
|
||||
|
||||
### Interface 定义
|
||||
```java
|
||||
package com.reading.platform.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 服务接口
|
||||
*/
|
||||
public interface XxxService {
|
||||
|
||||
/**
|
||||
* 方法描述
|
||||
*/
|
||||
List<Xxx> getXxxList(Long id);
|
||||
|
||||
/**
|
||||
* 方法描述
|
||||
*/
|
||||
Xxx createXxx(XxxCreateRequest request);
|
||||
}
|
||||
```
|
||||
|
||||
### Impl 实现类
|
||||
```java
|
||||
package com.reading.platform.service.impl;
|
||||
|
||||
import com.reading.platform.mapper.XxxMapper;
|
||||
import com.reading.platform.service.XxxService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 服务实现类
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class XxxServiceImpl implements XxxService {
|
||||
|
||||
private final XxxMapper xxxMapper;
|
||||
|
||||
@Override
|
||||
public List<Xxx> getXxxList(Long id) {
|
||||
// 业务逻辑
|
||||
}
|
||||
|
||||
@Override
|
||||
public Xxx createXxx(XxxCreateRequest request) {
|
||||
// 业务逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 架构优势
|
||||
|
||||
1. **依赖倒置**:Controller 依赖接口而非具体实现
|
||||
2. **易于测试**:可以通过 Mock 接口进行测试
|
||||
3. **易于扩展**:可以轻松切换不同的实现
|
||||
4. **代码规范**:符合 Spring 官方推荐的最佳实践
|
||||
|
||||
## 编译验证
|
||||
|
||||
```bash
|
||||
cd reading-platform-java
|
||||
mvn clean compile -DskipTests
|
||||
```
|
||||
|
||||
编译结果:**BUILD SUCCESS**
|
||||
|
||||
## 文件统计
|
||||
|
||||
- 接口文件:25 个
|
||||
- 实现类文件:25 个
|
||||
- 总计:50 个 Service 相关文件
|
||||
|
||||
## 后续建议
|
||||
|
||||
1. 为新实现的接口添加单元测试
|
||||
2. 在 CI/CD 流程中确保编译使用 JDK 17
|
||||
3. 保持新增 Service 遵循 interface + impl 模式
|
||||
157
docs/后端接口补全总结.md
Normal file
157
docs/后端接口补全总结.md
Normal file
@ -0,0 +1,157 @@
|
||||
# 后端接口补全总结
|
||||
|
||||
本文档总结了为匹配前端 API 调用而补全的后端接口。
|
||||
|
||||
## 已完成的工作
|
||||
|
||||
### 1. 学校端 (`/api/v1/school/*`)
|
||||
|
||||
#### 班级管理 (`/classes`)
|
||||
- `GET /list` - 获取班级列表(无分页)
|
||||
- `GET /{id}/students` - 获取班级学生分页
|
||||
- `GET /{id}/teachers` - 获取班级教师列表
|
||||
- `POST /{id}/teachers` - 添加班级教师
|
||||
- `PUT /{id}/teachers/{teacherId}` - 更新班级教师角色
|
||||
- `DELETE /{id}/teachers/{teacherId}` - 移除班级教师
|
||||
|
||||
#### 学生管理 (`/students`)
|
||||
- `POST /{id}/transfer` - 学生调班
|
||||
- `GET /{id}/history` - 获取学生调班历史
|
||||
|
||||
### 2. 教师端 (`/api/v1/teacher/*`)
|
||||
|
||||
#### 课程管理 (`/courses`)
|
||||
- `GET /classes` - 获取教师的班级列表
|
||||
- `GET /students` - 获取教师所有学生分页
|
||||
- `GET /classes/{classId}/students` - 获取班级学生分页
|
||||
- `GET /classes/{classId}/teachers` - 获取班级教师列表
|
||||
|
||||
#### 课时管理 (`/lessons`)
|
||||
- `POST /{id}/finish` - 结束课时(包含实际时长、评分等)
|
||||
- `POST /{lessonId}/students/{studentId}/record` - 保存学生评价记录
|
||||
- `GET /{lessonId}/student-records` - 获取课程所有学生记录
|
||||
- `POST /{lessonId}/student-records/batch` - 批量保存学生评价记录
|
||||
- `POST /{lessonId}/feedback` - 提交课程反馈
|
||||
- `GET /{lessonId}/feedback` - 获取课程反馈
|
||||
|
||||
#### 课表管理 (`/schedules`)
|
||||
- `GET /timetable` - 获取课表(按日期范围)
|
||||
- `GET /today` - 获取今日课表
|
||||
- `POST /` - 创建课表计划
|
||||
- `PUT /{id}` - 更新课表计划
|
||||
- `DELETE /{id}` - 取消课表计划
|
||||
|
||||
### 3. 家长端 (`/api/v1/parent/*`)
|
||||
|
||||
#### 孩子信息 (`/children`)
|
||||
- `GET /` - 获取我的孩子(增强返回格式)
|
||||
- `GET /{id}` - 获取孩子详情(增强返回格式)
|
||||
- `GET /{childId}/lessons` - 获取孩子的课时记录
|
||||
- `GET /{childId}/tasks` - 获取孩子的任务(带完成状态)
|
||||
|
||||
#### 任务管理 (`/tasks`)
|
||||
- `PUT /{childId}/tasks/{taskId}/feedback` - 提交任务家长反馈
|
||||
|
||||
### 4. 管理员端 (`/api/v1/admin/*`)
|
||||
|
||||
管理员端接口大部分已存在,以下接口需要在未来补充:
|
||||
- `PUT /themes/reorder` - 主题重新排序
|
||||
- `PUT /packages/{packageId}/courses` - 设置套餐课程
|
||||
- `POST /packages/{packageId}/courses` - 添加课程到套餐
|
||||
- `DELETE /packages/{packageId}/courses/{courseId}` - 从套餐移除课程
|
||||
- `POST /packages/{id}/submit` - 提交审核
|
||||
- `POST /packages/{id}/review` - 审核套餐
|
||||
- `POST /packages/{id}/publish` - 发布套餐
|
||||
- `POST /packages/{id}/offline` - 下架套餐
|
||||
|
||||
## 实体类更新
|
||||
|
||||
### StudentRecord
|
||||
新增字段:
|
||||
- `focus` - 专注力评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `interest` - 兴趣评分 (1-5)
|
||||
- `understanding` - 理解度评分 (1-5)
|
||||
|
||||
### LessonFeedback
|
||||
新增字段:
|
||||
- `designQuality` - 设计质量评分 (1-5)
|
||||
- `participation` - 参与度评分 (1-5)
|
||||
- `goalAchievement` - 目标达成度评分 (1-5)
|
||||
- `stepFeedbacks` - 环节反馈 JSON
|
||||
- `pros` - 优点
|
||||
- `suggestions` - 建议
|
||||
- `activitiesDone` - 完成的活动 JSON
|
||||
|
||||
## Service 方法更新
|
||||
|
||||
### ClassService
|
||||
- `getClassList(Long tenantId)` - 获取班级列表
|
||||
- `getClassStudents(Long classId, ...)` - 获取班级学生分页
|
||||
- `getClassTeachers(Long classId)` - 获取班级教师列表
|
||||
- `addClassTeacher(...)` - 添加班级教师
|
||||
- `updateClassTeacher(...)` - 更新班级教师角色
|
||||
- `removeClassTeacher(...)` - 移除班级教师
|
||||
|
||||
### LessonService
|
||||
- `finishLesson(...)` - 结束课时
|
||||
- `saveStudentRecord(...)` - 保存学生评价记录
|
||||
- `getStudentRecords(Long lessonId)` - 获取课程所有学生记录
|
||||
- `batchSaveStudentRecords(...)` - 批量保存学生评价记录
|
||||
- `saveLessonFeedback(...)` - 提交课程反馈
|
||||
- `getLessonFeedback(Long lessonId)` - 获取课程反馈
|
||||
|
||||
### StudentService
|
||||
- `transferStudent(...)` - 学生调班
|
||||
- `getStudentClassHistory(Long studentId)` - 获取学生调班历史
|
||||
|
||||
### TaskService
|
||||
- `getTaskCompletion(Long taskId, Long studentId)` - 获取任务完成记录
|
||||
|
||||
## 数据库迁移需求
|
||||
|
||||
需要创建数据库迁移脚本,添加以下字段:
|
||||
|
||||
```sql
|
||||
-- student_records 表新增字段
|
||||
ALTER TABLE student_records ADD COLUMN focus INT COMMENT '专注力评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN participation INT COMMENT '参与度评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN interest INT COMMENT '兴趣评分 (1-5)';
|
||||
ALTER TABLE student_records ADD COLUMN understanding INT COMMENT '理解度评分 (1-5)';
|
||||
|
||||
-- lesson_feedbacks 表新增字段
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN design_quality INT COMMENT '设计质量评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN participation INT COMMENT '参与度评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN goal_achievement INT COMMENT '目标达成度评分 (1-5)';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN step_feedbacks TEXT COMMENT '环节反馈 JSON';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN pros TEXT COMMENT '优点';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN suggestions TEXT COMMENT '建议';
|
||||
ALTER TABLE lesson_feedbacks ADD COLUMN activities_done TEXT COMMENT '完成的活动 JSON';
|
||||
|
||||
-- student_class_history 表新增字段
|
||||
ALTER TABLE student_class_history ADD COLUMN reason VARCHAR(255) COMMENT '调班原因';
|
||||
```
|
||||
|
||||
## 待补充的接口
|
||||
|
||||
### 学校端
|
||||
- `GET /stats/teachers/active` - 获取活跃教师统计
|
||||
- `GET /stats/courses` - 获取课程使用统计
|
||||
- `GET /stats/activities` - 获取最近活动
|
||||
- `GET /stats/lesson-trend` - 课时趋势
|
||||
- `GET /stats/course-distribution` - 课程分布
|
||||
- `GET /reports/*` - 数据报告接口
|
||||
|
||||
### 教师端
|
||||
- `POST /tasks/{taskId}/remind` - 发送任务提醒
|
||||
- `GET /school-courses/*` - 校本课程相关接口
|
||||
|
||||
### 家长端
|
||||
- `GET /growth-records/student/{studentId}` - 获取孩子成长记录(已存在,路径不同)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 所有新增的数据库字段需要创建 Flyway 迁移脚本
|
||||
2. 部分接口的返回数据结构已调整以匹配前端需求
|
||||
3. 部分 Service 方法需要进一步测试验证
|
||||
4. 教师端的班级、学生过滤逻辑需要根据实际业务场景优化
|
||||
135
docs/表名统一修改说明.md
Normal file
135
docs/表名统一修改说明.md
Normal file
@ -0,0 +1,135 @@
|
||||
# 表名统一修改说明
|
||||
|
||||
## 修改时间
|
||||
2026-03-10
|
||||
|
||||
## 修改目的
|
||||
将数据库表名从复数形式改为单数形式,使其与 ORM 实体类名保持一致(除了下划线和驼峰的区别)。
|
||||
|
||||
## 修改内容
|
||||
|
||||
### 1. Flyway 迁移脚本
|
||||
创建了新的 Flyway 迁移脚本:
|
||||
- 文件:`reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql`
|
||||
- 功能:将所有数据库表名从复数改为单数
|
||||
|
||||
### 2. 实体类 @TableName 注解更新
|
||||
更新了 36 个实体类的 `@TableName` 注解:
|
||||
|
||||
| 序号 | 原表名(复数) | 新表名(单数) | 实体类名 |
|
||||
|-----|---------------|---------------|---------|
|
||||
| 1 | `admin_users` | `admin_user` | `AdminUser` |
|
||||
| 2 | `tenants` | `tenant` | `Tenant` |
|
||||
| 3 | `teachers` | `teacher` | `Teacher` |
|
||||
| 4 | `students` | `student` | `Student` |
|
||||
| 5 | `parents` | `parent` | `Parent` |
|
||||
| 6 | `parent_students` | `parent_student` | `ParentStudent` |
|
||||
| 7 | `classes` | `clazz` | `Clazz` |
|
||||
| 8 | `class_teachers` | `class_teacher` | `ClassTeacher` |
|
||||
| 9 | `student_class_history` | `student_class_history` | `StudentClassHistory` (无需修改) |
|
||||
| 10 | `courses` | `course` | `Course` |
|
||||
| 11 | `course_versions` | `course_version` | `CourseVersion` |
|
||||
| 12 | `course_resources` | `course_resource` | `CourseResource` |
|
||||
| 13 | `course_scripts` | `course_script` | `CourseScript` |
|
||||
| 14 | `course_script_pages` | `course_script_page` | `CourseScriptPage` |
|
||||
| 15 | `course_activities` | `course_activity` | `CourseActivity` |
|
||||
| 16 | `course_packages` | `course_package` | `CoursePackage` |
|
||||
| 17 | `school_courses` | `school_course` | `SchoolCourse` |
|
||||
| 18 | `tenant_courses` | `tenant_course` | `TenantCourse` |
|
||||
| 19 | `lessons` | `lesson` | `Lesson` |
|
||||
| 20 | `lesson_feedbacks` | `lesson_feedback` | `LessonFeedback` |
|
||||
| 21 | `student_records` | `student_record` | `StudentRecord` |
|
||||
| 22 | `tasks` | `task` | `Task` |
|
||||
| 23 | `task_targets` | `task_target` | `TaskTarget` |
|
||||
| 24 | `task_completions` | `task_completion` | `TaskCompletion` |
|
||||
| 25 | `task_templates` | `task_template` | `TaskTemplate` |
|
||||
| 26 | `growth_records` | `growth_record` | `GrowthRecord` |
|
||||
| 27 | `resource_libraries` | `resource_library` | `ResourceLibrary` |
|
||||
| 28 | `resource_items` | `resource_item` | `ResourceItem` |
|
||||
| 29 | `schedule_plans` | `schedule_plan` | `SchedulePlan` |
|
||||
| 30 | `schedule_templates` | `schedule_template` | `ScheduleTemplate` |
|
||||
| 31 | `system_settings` | `system_setting` | `SystemSetting` |
|
||||
| 32 | `themes` | `theme` | `Theme` |
|
||||
| 33 | `tags` | `tag` | `Tag` |
|
||||
| 34 | `notifications` | `notification` | `Notification` |
|
||||
| 35 | `operation_logs` | `operation_log` | `OperationLog` |
|
||||
|
||||
### 3. Mapper 接口 SQL 更新
|
||||
更新了以下 Mapper 接口中的硬编码 SQL 表名:
|
||||
|
||||
| 文件 | 修改内容 |
|
||||
|-----|---------|
|
||||
| `ThemeMapper.java` | `DELETE FROM themes` → `DELETE FROM theme` |
|
||||
| `ParentMapper.java` | `DELETE FROM parents` → `DELETE FROM parent` |
|
||||
| `TenantMapper.java` | `DELETE FROM tenants` → `DELETE FROM tenant` (2 处) |
|
||||
| `TeacherMapper.java` | `DELETE FROM teachers` → `DELETE FROM teacher` |
|
||||
| `StudentMapper.java` | `DELETE FROM students` → `DELETE FROM student` |
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 步骤 1:备份数据库
|
||||
在执行迁移前,务必备份开发/生产数据库:
|
||||
```bash
|
||||
mysqldump -u root -p reading_platform > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### 步骤 2:执行 Flyway 迁移
|
||||
启动后端服务,Flyway 会自动执行 `V22__rename_tables_to_singular.sql` 迁移脚本。
|
||||
|
||||
或者手动执行:
|
||||
```bash
|
||||
mysql -u root -p reading_platform < reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql
|
||||
```
|
||||
|
||||
### 步骤 3:验证迁移结果
|
||||
在 MySQL 中执行:
|
||||
```sql
|
||||
-- 查看所有表名
|
||||
SHOW TABLES;
|
||||
|
||||
-- 验证特定表是否存在
|
||||
SHOW TABLES LIKE 'student';
|
||||
SHOW TABLES LIKE 'student_record';
|
||||
SHOW TABLES LIKE 'lesson_feedback';
|
||||
```
|
||||
|
||||
### 步骤 4:测试功能
|
||||
启动后端服务后,测试以下功能:
|
||||
1. 用户管理(管理员、教师、学生、家长)
|
||||
2. 班级管理
|
||||
3. 课程管理
|
||||
4. 课时管理
|
||||
5. 任务管理
|
||||
6. 成长记录
|
||||
7. 资源管理
|
||||
8. 日程管理
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **外键处理**:迁移脚本中先禁用外键检查(`SET FOREIGN_KEY_CHECKS = 0`),执行完后再启用
|
||||
2. **Flyway 历史**:确保 `flyway_schema_history` 表正确记录迁移历史
|
||||
3. **生产环境**:在生产环境执行前,务必在开发/测试环境充分测试
|
||||
4. **回滚方案**:如需回滚,可以准备反向迁移脚本(将单数表名改回复数)
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
### 新增文件
|
||||
- `reading-platform-java/src/main/resources/db/migration/V22__rename_tables_to_singular.sql`
|
||||
|
||||
### 修改的文件
|
||||
- 所有 Entity 类(36 个文件)
|
||||
- 5 个 Mapper 接口
|
||||
|
||||
## 验证清单
|
||||
|
||||
- [x] 所有 Entity 类的 `@TableName` 注解已更新
|
||||
- [x] 所有 Mapper 接口的 SQL 已更新
|
||||
- [x] Controller 中无硬编码表名引用
|
||||
- [x] Service 中无硬编码表名引用
|
||||
- [x] Flyway 迁移脚本已创建
|
||||
|
||||
## 后续工作
|
||||
|
||||
1. 在开发环境执行迁移并验证
|
||||
2. 更新 API 文档中的表名引用(如有)
|
||||
3. 更新项目文档中的表名引用(如有)
|
||||
224
docs/限流功能使用说明.md
Normal file
224
docs/限流功能使用说明.md
Normal file
@ -0,0 +1,224 @@
|
||||
# 限流功能使用说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
本项目已集成基于 Redis 滑动窗口算法的限流功能,支持两种使用方式:
|
||||
1. **配置化限流** - 在 `application.yml` 中配置规则,自动对所有接口生效
|
||||
2. **注解限流** - 在 Controller 方法上使用 `@RateLimit` 注解,针对特定接口限流
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 核心组件
|
||||
|
||||
| 组件 | 说明 |
|
||||
|------|------|
|
||||
| `@RateLimit` | 限流注解,可自定义时间窗口、最大请求数 |
|
||||
| `RateLimitProperties` | 配置化限流的属性类 |
|
||||
| `RateLimiter` | Redis 限流工具类(滑动窗口算法) |
|
||||
| `RateLimitAspect` | 注解限流的 AOP 切面 |
|
||||
| `RateLimitInterceptor` | 配置化限流的拦截器 |
|
||||
| `ErrorCode.RATE_LIMIT_EXCEEDED` | 限流错误码(5001) |
|
||||
|
||||
### 限流优先级
|
||||
|
||||
**注解限流 > 配置化限流 > 默认限流**
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 方式一:配置化限流(推荐作为基础防护)
|
||||
|
||||
在 `application.yml` 中配置:
|
||||
|
||||
```yaml
|
||||
rate-limit:
|
||||
enabled: true # 是否启用限流
|
||||
default-time-window: 60 # 默认时间窗口(秒)
|
||||
default-max-requests: 1000 # 默认时间窗口内最大请求数
|
||||
rules: # 限流规则列表
|
||||
# 登录接口限流 - 防止暴力破解
|
||||
- pattern: "/api/v1/auth/login"
|
||||
time-window: 60
|
||||
max-requests: 10
|
||||
# 验证码接口限流 - 防止刷验证码
|
||||
- pattern: "/api/v1/auth/captcha"
|
||||
time-window: 60
|
||||
max-requests: 5
|
||||
# 短信接口限流 - 防止短信轰炸
|
||||
- pattern: "/api/v1/sms/**"
|
||||
time-window: 60
|
||||
max-requests: 3
|
||||
# 文件上传接口限流
|
||||
- pattern: "/api/v1/**/upload/**"
|
||||
time-window: 60
|
||||
max-requests: 30
|
||||
exclude-patterns: # 排除限流的接口
|
||||
- "/doc.html"
|
||||
- "/swagger-resources/**"
|
||||
- "/v3/api-docs/**"
|
||||
- "/webjars/**"
|
||||
- "/uploads/**"
|
||||
```
|
||||
|
||||
### 方式二:注解限流(针对特殊接口)
|
||||
|
||||
在 Controller 方法上添加 `@RateLimit` 注解:
|
||||
|
||||
```java
|
||||
package com.reading.platform.controller.auth;
|
||||
|
||||
import com.reading.platform.common.annotation.RateLimit;
|
||||
import com.reading.platform.common.response.Result;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/auth")
|
||||
public class AuthController {
|
||||
|
||||
/**
|
||||
* 登录接口 - 限流防止暴力破解
|
||||
* 60 秒内最多 10 次请求
|
||||
*/
|
||||
@PostMapping("/login")
|
||||
@RateLimit(time = 60, maxRequests = 10, message = "登录过于频繁,请稍后再试")
|
||||
public Result<LoginResponse> login(@RequestBody LoginRequest request) {
|
||||
// ... 登录逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码 - 严格限流
|
||||
* 60 秒内最多 3 次请求
|
||||
*/
|
||||
@PostMapping("/captcha")
|
||||
@RateLimit(time = 60, maxRequests = 3, message = "操作过于频繁,请稍后再试")
|
||||
public Result<Void> sendCaptcha(@RequestParam String phone) {
|
||||
// ... 发送验证码逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义限流键前缀
|
||||
* 适用于需要按用户 ID 等特殊维度限流的场景
|
||||
*/
|
||||
@PostMapping("/special")
|
||||
@RateLimit(keyPrefix = "special_api:", time = 60, maxRequests = 5)
|
||||
public Result<Void> specialApi() {
|
||||
// ... 特殊接口逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 常见限流场景建议值
|
||||
|
||||
| 接口类型 | 时间窗口 | 最大请求数 | 说明 |
|
||||
|---------|---------|-----------|------|
|
||||
| 登录接口 | 60 秒 | 10 | 防止暴力破解 |
|
||||
| 验证码/短信 | 60 秒 | 3-5 | 防止短信轰炸 |
|
||||
| 文件上传 | 60 秒 | 30 | 防止资源滥用 |
|
||||
| 普通业务接口 | 60 秒 | 100-1000 | 根据业务调整 |
|
||||
| 导出接口 | 60 秒 | 5-10 | 防止服务器过载 |
|
||||
|
||||
## 限流响应
|
||||
|
||||
当请求被限流拦截时,返回:
|
||||
|
||||
**配置化限流响应:**
|
||||
```json
|
||||
{
|
||||
"code": 5001,
|
||||
"message": "请求过于频繁,请稍后再试",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
HTTP 状态码:`429 Too Many Requests`
|
||||
|
||||
响应头:
|
||||
```
|
||||
X-RateLimit-Limit: 1
|
||||
X-RateLimit-Remaining: 0
|
||||
Retry-After: 60
|
||||
```
|
||||
|
||||
**注解限流响应:**
|
||||
```json
|
||||
{
|
||||
"code": 5001,
|
||||
"message": "登录过于频繁,请稍后再试",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## Redis 数据结构
|
||||
|
||||
限流使用 Redis 的 `Sorted Set`(有序集合)存储:
|
||||
|
||||
- **Key 格式**: `rate_limit:{key}`
|
||||
- **Member**: 时间戳(毫秒)
|
||||
- **Score**: 时间戳(毫秒)
|
||||
|
||||
示例:
|
||||
```
|
||||
rate_limit:192.168.1.1:/api/v1/auth/login
|
||||
|- 1710000000000
|
||||
|- 1710000001000
|
||||
|- 1710000002000
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **Redis 依赖**: 限流功能依赖 Redis,需确保 Redis 服务可用
|
||||
2. **异常情况放行**: 当 Redis 不可用时,系统会自动放行请求,避免影响正常业务
|
||||
3. **集群部署**: 滑动窗口算法天然支持分布式,无需额外配置
|
||||
4. **监控告警**: 建议添加限流触发的监控告警,及时发现异常流量
|
||||
|
||||
## 日志示例
|
||||
|
||||
```
|
||||
2024-03-10 22:00:00 WARN - 请求被限流拦截:URI=/api/v1/auth/login, 规则=/api/v1/auth/login, 最大请求数=10
|
||||
2024-03-10 22:00:01 DEBUG - 请求通过限流检查:URI=/api/v1/users, 规则=default
|
||||
```
|
||||
|
||||
## 测试方法
|
||||
|
||||
使用 `curl` 或 Postman 快速测试:
|
||||
|
||||
```bash
|
||||
# 循环发送 15 次登录请求(第 11 次开始应该被限流)
|
||||
for i in {1..15}; do
|
||||
echo "请求 $i:"
|
||||
curl -X POST http://localhost:8080/api/v1/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test","password":"test"}' \
|
||||
-w "\nHTTP 状态码:%{http_code}\n\n"
|
||||
done
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### RateLimit 注解参数
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `keyPrefix` | String | "" | 限流键前缀,默认使用 `IP:类名。方法名` |
|
||||
| `time` | long | 60 | 时间窗口大小 |
|
||||
| `timeUnit` | TimeUnit | SECONDS | 时间单位 |
|
||||
| `maxRequests` | long | 100 | 时间窗口内最大请求数 |
|
||||
| `message` | String | "请求过于频繁,请稍后再试" | 限流提示信息 |
|
||||
| `enabled` | boolean | true | 是否启用限流 |
|
||||
|
||||
### application.yml 配置参数
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `enabled` | boolean | true | 是否启用限流 |
|
||||
| `default-time-window` | long | 60 | 默认时间窗口(秒) |
|
||||
| `default-max-requests` | long | 1000 | 默认最大请求数 |
|
||||
| `rules` | List | [] | 限流规则列表 |
|
||||
| `exclude-patterns` | List | [] | 排除限流的接口路径 |
|
||||
|
||||
### RateLimitRule 配置参数
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `pattern` | String | 接口路径(支持 Ant 风格通配符) |
|
||||
| `time-window` | long | 时间窗口(秒) |
|
||||
| `max-requests` | long | 最大请求数 |
|
||||
@ -1,5 +1,5 @@
|
||||
import { http } from './index';
|
||||
import { readingApi, GetTenantPageResult } from './client';
|
||||
import { http } from "./index";
|
||||
import { readingApi, GetTenantPageResult } from "./client";
|
||||
|
||||
// ==================== 类型定义 ====================
|
||||
|
||||
@ -164,12 +164,46 @@ export interface AdminSettings {
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
|
||||
export interface AdminSettingsUpdateRequest {
|
||||
systemName?: string;
|
||||
systemDesc?: string;
|
||||
contactPhone?: string;
|
||||
contactEmail?: string;
|
||||
systemLogo?: string;
|
||||
passwordStrength?: string;
|
||||
maxLoginAttempts?: number;
|
||||
tokenExpire?: string;
|
||||
forceHttps?: boolean;
|
||||
emailEnabled?: boolean;
|
||||
smtpHost?: string;
|
||||
smtpPort?: number;
|
||||
smtpUser?: string;
|
||||
smtpPassword?: string;
|
||||
fromEmail?: string;
|
||||
smsEnabled?: boolean;
|
||||
storageType?: string;
|
||||
maxFileSize?: number;
|
||||
allowedTypes?: string;
|
||||
defaultTeacherQuota?: number;
|
||||
defaultStudentQuota?: number;
|
||||
enableAutoExpire?: boolean;
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
|
||||
export interface TenantStatusUpdateRequest {
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface TenantQuotaUpdateRequest {
|
||||
packageType?: string;
|
||||
teacherQuota?: number;
|
||||
studentQuota?: number;
|
||||
}
|
||||
|
||||
// ==================== 租户管理 ====================
|
||||
|
||||
export const getTenants = (
|
||||
params: TenantQueryParams,
|
||||
): Promise<GetTenantPageResult> =>
|
||||
readingApi.getTenantPage(params as any).then((res) => res.data as any);
|
||||
export const getTenants = (params: TenantQueryParams) =>
|
||||
readingApi.getTenantPage(params);
|
||||
|
||||
export const getTenant = (id: number): Promise<TenantDetail> =>
|
||||
readingApi.getTenant(id).then((res) => res.data as any);
|
||||
@ -182,7 +216,7 @@ export const createTenant = (
|
||||
// Orval 将返回值定义为 ResultTenant / ResultMapStringString,这里按现有前端期望结构进行兼容转换
|
||||
return {
|
||||
...(map as Tenant),
|
||||
tempPassword: (map as any).tempPassword ?? '',
|
||||
tempPassword: (map as any).tempPassword ?? "",
|
||||
};
|
||||
});
|
||||
|
||||
@ -196,9 +230,7 @@ export const updateTenantQuota = (
|
||||
id: number,
|
||||
data: UpdateTenantQuotaDto,
|
||||
): Promise<Tenant> =>
|
||||
readingApi
|
||||
.updateTenantQuota(id, data as any)
|
||||
.then((res) => res.data as any);
|
||||
readingApi.updateTenantQuota(id, data as any).then((res) => res.data as any);
|
||||
|
||||
export const updateTenantStatus = (
|
||||
id: number,
|
||||
@ -224,19 +256,11 @@ export const getAdminStats = (): Promise<AdminStats> =>
|
||||
export const getTrendData = (): Promise<TrendData[]> =>
|
||||
readingApi.getTrendData().then((res) => res.data as any);
|
||||
|
||||
export const getActiveTenants = (
|
||||
limit?: number,
|
||||
): Promise<ActiveTenant[]> =>
|
||||
readingApi
|
||||
.getActiveTenants({ limit } as any)
|
||||
.then((res) => res.data as any);
|
||||
export const getActiveTenants = (limit?: number): Promise<ActiveTenant[]> =>
|
||||
readingApi.getActiveTenants({ limit } as any).then((res) => res.data as any);
|
||||
|
||||
export const getPopularCourses = (
|
||||
limit?: number,
|
||||
): Promise<PopularCourse[]> =>
|
||||
readingApi
|
||||
.getPopularCourses({ limit } as any)
|
||||
.then((res) => res.data as any);
|
||||
export const getPopularCourses = (limit?: number): Promise<PopularCourse[]> =>
|
||||
readingApi.getPopularCourses({ limit } as any).then((res) => res.data as any);
|
||||
|
||||
// ==================== 系统设置 ====================
|
||||
|
||||
@ -246,6 +270,4 @@ export const getAdminSettings = (): Promise<AdminSettings> =>
|
||||
export const updateAdminSettings = (
|
||||
data: Record<string, any>,
|
||||
): Promise<AdminSettings> =>
|
||||
readingApi
|
||||
.updateSettings1(data as any)
|
||||
.then(() => getAdminSettings());
|
||||
readingApi.updateSettings1(data as any).then(() => getAdminSettings());
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 活跃教师统计响应
|
||||
*/
|
||||
export interface ActiveTeacherStatsResponse {
|
||||
/** 教师 ID */
|
||||
id?: string;
|
||||
/** 教师姓名 */
|
||||
name?: string;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 管理员设置更新请求
|
||||
*/
|
||||
export interface AdminSettingsUpdateRequest {
|
||||
/** 系统名称 */
|
||||
systemName?: string;
|
||||
/** 系统描述 */
|
||||
systemDesc?: string;
|
||||
/** 联系电话 */
|
||||
contactPhone?: string;
|
||||
/** 联系邮箱 */
|
||||
contactEmail?: string;
|
||||
/** 系统 Logo */
|
||||
systemLogo?: string;
|
||||
/** 密码强度 */
|
||||
passwordStrength?: string;
|
||||
/** 最大登录尝试次数 */
|
||||
maxLoginAttempts?: number;
|
||||
/** Token 过期时间 */
|
||||
tokenExpire?: string;
|
||||
/** 强制 HTTPS */
|
||||
forceHttps?: boolean;
|
||||
/** 邮箱启用 */
|
||||
emailEnabled?: boolean;
|
||||
/** SMTP 主机 */
|
||||
smtpHost?: string;
|
||||
/** SMTP 端口 */
|
||||
smtpPort?: number;
|
||||
/** SMTP 用户 */
|
||||
smtpUser?: string;
|
||||
/** SMTP 密码 */
|
||||
smtpPassword?: string;
|
||||
/** 发件人邮箱 */
|
||||
fromEmail?: string;
|
||||
/** 短信启用 */
|
||||
smsEnabled?: boolean;
|
||||
/** 存储类型 */
|
||||
storageType?: string;
|
||||
/** 最大文件大小 */
|
||||
maxFileSize?: number;
|
||||
/** 允许的文件类型 */
|
||||
allowedTypes?: string;
|
||||
/** 默认教师配额 */
|
||||
defaultTeacherQuota?: number;
|
||||
/** 默认学生配额 */
|
||||
defaultStudentQuota?: number;
|
||||
/** 启用自动过期 */
|
||||
enableAutoExpire?: boolean;
|
||||
/** 提前通知天数 */
|
||||
notifyBeforeDays?: number;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 管理员统计数据响应
|
||||
*/
|
||||
export interface AdminStatsResponse {
|
||||
/** 租户总数 */
|
||||
tenantCount?: number;
|
||||
/** 活跃租户数 */
|
||||
activeTenantCount?: number;
|
||||
/** 教师总数 */
|
||||
teacherCount?: number;
|
||||
/** 学生总数 */
|
||||
studentCount?: number;
|
||||
/** 课程总数 */
|
||||
courseCount?: number;
|
||||
/** 已发布课程数 */
|
||||
publishedCourseCount?: number;
|
||||
/** 课时总数 */
|
||||
lessonCount?: number;
|
||||
/** 本月课时数 */
|
||||
monthlyLessons?: number;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentRecordResponse } from './studentRecordResponse';
|
||||
|
||||
/**
|
||||
* 批量保存学生记录响应
|
||||
*/
|
||||
export interface BatchSaveStudentRecordResponse {
|
||||
/** 保存数量 */
|
||||
count?: number;
|
||||
/** 学生记录列表 */
|
||||
records?: StudentRecordResponse[];
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { BatchStudentRecordRequestRecordsItem } from './batchStudentRecordRequestRecordsItem';
|
||||
|
||||
export interface BatchStudentRecordRequest {
|
||||
records?: BatchStudentRecordRequestRecordsItem[];
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type BatchStudentRecordRequestRecordsItem = {[key: string]: { [key: string]: unknown }};
|
||||
@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildStats } from './childStats';
|
||||
import type { ClassInfo } from './classInfo';
|
||||
|
||||
/**
|
||||
* 孩子详情响应
|
||||
*/
|
||||
export interface ChildDetailResponse {
|
||||
/** 孩子 ID */
|
||||
id?: string;
|
||||
/** 孩子姓名 */
|
||||
name?: string;
|
||||
/** 性别 */
|
||||
gender?: string;
|
||||
/** 出生日期 */
|
||||
birthDate?: string;
|
||||
/** 阅读次数 */
|
||||
readingCount?: number;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
stats?: ChildStats;
|
||||
classInfo?: ClassInfo;
|
||||
/** 关系 */
|
||||
relationship?: string;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassInfo } from './classInfo';
|
||||
|
||||
/**
|
||||
* 孩子信息响应
|
||||
*/
|
||||
export interface ChildInfoResponse {
|
||||
/** 孩子 ID */
|
||||
id?: string;
|
||||
/** 孩子姓名 */
|
||||
name?: string;
|
||||
/** 性别 */
|
||||
gender?: string;
|
||||
/** 出生日期 */
|
||||
birthDate?: string;
|
||||
/** 阅读次数 */
|
||||
readingCount?: number;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
classInfo?: ClassInfo;
|
||||
/** 关系 */
|
||||
relationship?: string;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 孩子统计信息
|
||||
*/
|
||||
export interface ChildStats {
|
||||
/** 课时记录数 */
|
||||
lessonRecords?: number;
|
||||
/** 成长记录数 */
|
||||
growthRecords?: number;
|
||||
/** 任务完成数 */
|
||||
taskCompletions?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级信息
|
||||
*/
|
||||
export interface ClassInfo {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级信息响应
|
||||
*/
|
||||
export interface ClassInfoResponse {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
/** 学生数量 */
|
||||
studentCount?: number;
|
||||
/** 课时数量 */
|
||||
lessonCount?: number;
|
||||
/** 我的角色 */
|
||||
myRole?: string;
|
||||
/** 是否主教 */
|
||||
isPrimary?: boolean;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级简单信息
|
||||
*/
|
||||
export interface ClassSimpleInfo {
|
||||
/** 班级 ID */
|
||||
id?: string;
|
||||
/** 班级名称 */
|
||||
name?: string;
|
||||
/** 年级 */
|
||||
grade?: string;
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 班级教师关联
|
||||
*/
|
||||
export interface ClassTeacher {
|
||||
/** ID */
|
||||
readonly id?: string;
|
||||
classId?: string;
|
||||
teacherId?: string;
|
||||
role?: string;
|
||||
isPrimary?: boolean;
|
||||
sortOrder?: number;
|
||||
/** 创建人用户名 */
|
||||
readonly createdBy?: string;
|
||||
/** 更新人用户名 */
|
||||
readonly updatedBy?: string;
|
||||
/** 创建时间 */
|
||||
readonly createdAt?: string;
|
||||
/** 更新时间 */
|
||||
readonly updatedAt?: string;
|
||||
/** 逻辑删除标志 */
|
||||
readonly deleted?: number;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export interface ClassTeacherRequest {
|
||||
teacherId?: string;
|
||||
role?: string;
|
||||
isPrimary?: boolean;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { Lesson } from './lesson';
|
||||
|
||||
/**
|
||||
* 分页响应
|
||||
*/
|
||||
export interface CommonPageResponseLesson {
|
||||
/** 数据列表 */
|
||||
items?: Lesson[];
|
||||
/** 总数 */
|
||||
total?: number;
|
||||
/** 当前页码 */
|
||||
page?: number;
|
||||
/** 每页大小 */
|
||||
pageSize?: number;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskCompletionInfoResponse } from './taskCompletionInfoResponse';
|
||||
|
||||
/**
|
||||
* 分页响应
|
||||
*/
|
||||
export interface CommonPageResponseTaskCompletionInfoResponse {
|
||||
/** 数据列表 */
|
||||
items?: TaskCompletionInfoResponse[];
|
||||
/** 总数 */
|
||||
total?: number;
|
||||
/** 当前页码 */
|
||||
page?: number;
|
||||
/** 每页大小 */
|
||||
pageSize?: number;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程分布响应
|
||||
*/
|
||||
export interface CourseDistributionResponse {
|
||||
/** 课程名称 */
|
||||
name?: string;
|
||||
/** 课时数量 */
|
||||
value?: number;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 热门课程统计响应
|
||||
*/
|
||||
export interface CourseStatsResponse {
|
||||
/** 课程 ID */
|
||||
id?: string;
|
||||
/** 课程名称 */
|
||||
name?: string;
|
||||
/** 分类 */
|
||||
category?: string;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
/** 使用次数 */
|
||||
usageCount?: number;
|
||||
/** 教师数 */
|
||||
teacherCount?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程使用统计响应
|
||||
*/
|
||||
export interface CourseUsageStatsResponse {
|
||||
/** 课程 ID */
|
||||
courseId?: string;
|
||||
/** 课程名称 */
|
||||
courseName?: string;
|
||||
/** 使用次数 */
|
||||
usageCount?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 文件上传响应
|
||||
*/
|
||||
export interface FileUploadResponse {
|
||||
/** 文件 URL */
|
||||
fileUrl?: string;
|
||||
/** 文件名称 */
|
||||
fileName?: string;
|
||||
/** 文件大小 */
|
||||
fileSize?: number;
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetChildLessonsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetChildTasksParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
status?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetClassStudents1Params = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetClassStudentsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTeacherStudentsParams = {
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
keyword?: string;
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type GetTimetable1Params = {
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
classId?: string;
|
||||
};
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 导入模板响应
|
||||
*/
|
||||
export interface ImportTemplateResponse {
|
||||
/** 表头 */
|
||||
headers?: string[];
|
||||
/** 示例数据 */
|
||||
example?: string[];
|
||||
}
|
||||
@ -6,188 +6,295 @@
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export * from './approveCourseParams';
|
||||
export * from './bindStudentParams';
|
||||
export * from './changePasswordParams';
|
||||
export * from './classCreateRequest';
|
||||
export * from './classUpdateRequest';
|
||||
export * from './clazz';
|
||||
export * from './completeTaskParams';
|
||||
export * from './course';
|
||||
export * from './courseCreateRequest';
|
||||
export * from './courseLesson';
|
||||
export * from './coursePackage';
|
||||
export * from './courseUpdateRequest';
|
||||
export * from './createTaskFromTemplateRequest';
|
||||
export * from './deleteFileParams';
|
||||
export * from './getActiveTeachersParams';
|
||||
export * from './getActiveTenantsParams';
|
||||
export * from './getActivitiesParams';
|
||||
export * from './getClassPageParams';
|
||||
export * from './getCompletions1Params';
|
||||
export * from './getCompletionsParams';
|
||||
export * from './getCoursePage1Params';
|
||||
export * from './getCoursePageParams';
|
||||
export * from './getCourses1Params';
|
||||
export * from './getCoursesParams';
|
||||
export * from './getGrowthRecordPage1Params';
|
||||
export * from './getGrowthRecordPageParams';
|
||||
export * from './getGrowthRecordsByStudentParams';
|
||||
export * from './getItemsParams';
|
||||
export * from './getLessonTrendParams';
|
||||
export * from './getLibrariesParams';
|
||||
export * from './getLogs1Params';
|
||||
export * from './getLogsParams';
|
||||
export * from './getMonthlyStats1Params';
|
||||
export * from './getMonthlyStatsParams';
|
||||
export * from './getMyLessonsParams';
|
||||
export * from './getMyNotifications1Params';
|
||||
export * from './getMyNotifications2Params';
|
||||
export * from './getMyNotificationsParams';
|
||||
export * from './getPackages1Params';
|
||||
export * from './getPackagesParams';
|
||||
export * from './getParentPageParams';
|
||||
export * from './getPopularCoursesParams';
|
||||
export * from './getRecentActivitiesParams';
|
||||
export * from './getRecentGrowthRecordsParams';
|
||||
export * from './getReviewCoursePageParams';
|
||||
export * from './getSchedulePlans1Params';
|
||||
export * from './getSchedulePlansParams';
|
||||
export * from './getScheduleTemplatesParams';
|
||||
export * from './getStudentPageParams';
|
||||
export * from './getTaskPage1Params';
|
||||
export * from './getTaskPageParams';
|
||||
export * from './getTasksByStudentParams';
|
||||
export * from './getTeacherPageParams';
|
||||
export * from './getTemplates1Params';
|
||||
export * from './getTemplatesParams';
|
||||
export * from './getTenantPageParams';
|
||||
export * from './getThemesParams';
|
||||
export * from './getTimetableParams';
|
||||
export * from './growthRecord';
|
||||
export * from './growthRecordCreateRequest';
|
||||
export * from './growthRecordUpdateRequest';
|
||||
export * from './lesson';
|
||||
export * from './lessonCreateRequest';
|
||||
export * from './lessonUpdateRequest';
|
||||
export * from './localTime';
|
||||
export * from './loginRequest';
|
||||
export * from './loginResponse';
|
||||
export * from './notification';
|
||||
export * from './operationLog';
|
||||
export * from './pageResultClazz';
|
||||
export * from './pageResultCourse';
|
||||
export * from './pageResultCoursePackage';
|
||||
export * from './pageResultGrowthRecord';
|
||||
export * from './pageResultLesson';
|
||||
export * from './pageResultNotification';
|
||||
export * from './pageResultOperationLog';
|
||||
export * from './pageResultParent';
|
||||
export * from './pageResultResourceItem';
|
||||
export * from './pageResultSchedulePlan';
|
||||
export * from './pageResultScheduleTemplate';
|
||||
export * from './pageResultSchoolCourse';
|
||||
export * from './pageResultStudent';
|
||||
export * from './pageResultTask';
|
||||
export * from './pageResultTaskCompletion';
|
||||
export * from './pageResultTaskTemplate';
|
||||
export * from './pageResultTeacher';
|
||||
export * from './pageResultTenant';
|
||||
export * from './parent';
|
||||
export * from './parentCreateRequest';
|
||||
export * from './parentUpdateRequest';
|
||||
export * from './rejectCourseParams';
|
||||
export * from './resetPassword1Params';
|
||||
export * from './resetPasswordParams';
|
||||
export * from './resourceItem';
|
||||
export * from './resourceLibrary';
|
||||
export * from './resultClazz';
|
||||
export * from './resultCourse';
|
||||
export * from './resultCourseLesson';
|
||||
export * from './resultCoursePackage';
|
||||
export * from './resultGrowthRecord';
|
||||
export * from './resultLesson';
|
||||
export * from './resultListCourse';
|
||||
export * from './resultListCourseLesson';
|
||||
export * from './resultListGrowthRecord';
|
||||
export * from './resultListLesson';
|
||||
export * from './resultListMapStringObject';
|
||||
export * from './resultListMapStringObjectDataItem';
|
||||
export * from './resultListResourceLibrary';
|
||||
export * from './resultListSchedulePlan';
|
||||
export * from './resultListStudent';
|
||||
export * from './resultListTenantResponse';
|
||||
export * from './resultListTheme';
|
||||
export * from './resultLoginResponse';
|
||||
export * from './resultLong';
|
||||
export * from './resultMapStringObject';
|
||||
export * from './resultMapStringObjectData';
|
||||
export * from './resultMapStringString';
|
||||
export * from './resultMapStringStringData';
|
||||
export * from './resultNotification';
|
||||
export * from './resultPageResultClazz';
|
||||
export * from './resultPageResultCourse';
|
||||
export * from './resultPageResultCoursePackage';
|
||||
export * from './resultPageResultGrowthRecord';
|
||||
export * from './resultPageResultLesson';
|
||||
export * from './resultPageResultNotification';
|
||||
export * from './resultPageResultOperationLog';
|
||||
export * from './resultPageResultParent';
|
||||
export * from './resultPageResultResourceItem';
|
||||
export * from './resultPageResultSchedulePlan';
|
||||
export * from './resultPageResultScheduleTemplate';
|
||||
export * from './resultPageResultSchoolCourse';
|
||||
export * from './resultPageResultStudent';
|
||||
export * from './resultPageResultTask';
|
||||
export * from './resultPageResultTaskCompletion';
|
||||
export * from './resultPageResultTaskTemplate';
|
||||
export * from './resultPageResultTeacher';
|
||||
export * from './resultPageResultTenant';
|
||||
export * from './resultParent';
|
||||
export * from './resultResourceItem';
|
||||
export * from './resultResourceLibrary';
|
||||
export * from './resultSchedulePlan';
|
||||
export * from './resultScheduleTemplate';
|
||||
export * from './resultSchoolCourse';
|
||||
export * from './resultStudent';
|
||||
export * from './resultTask';
|
||||
export * from './resultTaskCompletion';
|
||||
export * from './resultTaskTemplate';
|
||||
export * from './resultTeacher';
|
||||
export * from './resultTenant';
|
||||
export * from './resultTheme';
|
||||
export * from './resultUserInfoResponse';
|
||||
export * from './resultVoid';
|
||||
export * from './resultVoidData';
|
||||
export * from './reviewPackageBody';
|
||||
export * from './schedulePlan';
|
||||
export * from './schedulePlanCreateRequest';
|
||||
export * from './scheduleTemplate';
|
||||
export * from './scheduleTemplateApplyRequest';
|
||||
export * from './schoolCourse';
|
||||
export * from './student';
|
||||
export * from './studentCreateRequest';
|
||||
export * from './studentUpdateRequest';
|
||||
export * from './task';
|
||||
export * from './taskCompletion';
|
||||
export * from './taskCreateRequest';
|
||||
export * from './taskTemplate';
|
||||
export * from './taskTemplateCreateRequest';
|
||||
export * from './taskTemplateUpdateRequest';
|
||||
export * from './taskUpdateRequest';
|
||||
export * from './teacher';
|
||||
export * from './teacherCreateRequest';
|
||||
export * from './teacherUpdateRequest';
|
||||
export * from './tenant';
|
||||
export * from './tenantCreateRequest';
|
||||
export * from './tenantResponse';
|
||||
export * from './tenantUpdateRequest';
|
||||
export * from './theme';
|
||||
export * from './updateCompletion1Params';
|
||||
export * from './updateCompletionParams';
|
||||
export * from './updateSettings1Body';
|
||||
export * from './updateSettingsBody';
|
||||
export * from './updateTenantQuotaBody';
|
||||
export * from './updateTenantStatusBody';
|
||||
export * from './uploadFileBody';
|
||||
export * from './userInfoResponse';
|
||||
export * from "./activeTeacherStatsResponse";
|
||||
export * from "./adminSettingsUpdateRequest";
|
||||
export * from "./adminStatsResponse";
|
||||
export * from "./approveCourseParams";
|
||||
export * from "./batchSaveStudentRecordResponse";
|
||||
export * from "./batchStudentRecordRequest";
|
||||
export * from "./batchStudentRecordRequestRecordsItem";
|
||||
export * from "./bindStudentParams";
|
||||
export * from "./changePasswordParams";
|
||||
export * from "./childDetailResponse";
|
||||
export * from "./childInfoResponse";
|
||||
export * from "./childStats";
|
||||
export * from "./classCreateRequest";
|
||||
export * from "./classInfo";
|
||||
export * from "./classInfoResponse";
|
||||
export * from "./classSimpleInfo";
|
||||
export * from "./classTeacher";
|
||||
export * from "./classTeacherRequest";
|
||||
export * from "./classUpdateRequest";
|
||||
export * from "./clazz";
|
||||
export * from "./commonPageResponseLesson";
|
||||
export * from "./commonPageResponseTaskCompletionInfoResponse";
|
||||
export * from "./completeTaskParams";
|
||||
export * from "./course";
|
||||
export * from "./courseCreateRequest";
|
||||
export * from "./courseDistributionResponse";
|
||||
export * from "./courseLesson";
|
||||
export * from "./coursePackage";
|
||||
export * from "./courseStatsResponse";
|
||||
export * from "./courseUpdateRequest";
|
||||
export * from "./courseUsageStatsResponse";
|
||||
export * from "./createTaskFromTemplateRequest";
|
||||
export * from "./deleteFileParams";
|
||||
export * from "./fileUploadResponse";
|
||||
export * from "./getActiveTeachersParams";
|
||||
export * from "./getActiveTenantsParams";
|
||||
export * from "./getActivitiesParams";
|
||||
export * from "./getChildLessonsParams";
|
||||
export * from "./getChildTasksParams";
|
||||
export * from "./getClassPageParams";
|
||||
export * from "./getClassStudents1Params";
|
||||
export * from "./getClassStudentsParams";
|
||||
export * from "./getCompletions1Params";
|
||||
export * from "./getCompletionsParams";
|
||||
export * from "./getCoursePage1Params";
|
||||
export * from "./getCoursePageParams";
|
||||
export * from "./getCourses1Params";
|
||||
export * from "./getCoursesParams";
|
||||
export * from "./getGrowthRecordPage1Params";
|
||||
export * from "./getGrowthRecordPageParams";
|
||||
export * from "./getGrowthRecordsByStudentParams";
|
||||
export * from "./getItemsParams";
|
||||
export * from "./getLessonTrendParams";
|
||||
export * from "./getLibrariesParams";
|
||||
export * from "./getLogs1Params";
|
||||
export * from "./getLogsParams";
|
||||
export * from "./getMonthlyStats1Params";
|
||||
export * from "./getMonthlyStatsParams";
|
||||
export * from "./getMyLessonsParams";
|
||||
export * from "./getMyNotifications1Params";
|
||||
export * from "./getMyNotifications2Params";
|
||||
export * from "./getMyNotificationsParams";
|
||||
export * from "./getPackages1Params";
|
||||
export * from "./getPackagesParams";
|
||||
export * from "./getParentPageParams";
|
||||
export * from "./getPopularCoursesParams";
|
||||
export * from "./getRecentActivitiesParams";
|
||||
export * from "./getRecentGrowthRecordsParams";
|
||||
export * from "./getReviewCoursePageParams";
|
||||
export * from "./getSchedulePlans1Params";
|
||||
export * from "./getSchedulePlansParams";
|
||||
export * from "./getScheduleTemplatesParams";
|
||||
export * from "./getStudentPageParams";
|
||||
export * from "./getTaskPage1Params";
|
||||
export * from "./getTaskPageParams";
|
||||
export * from "./getTasksByStudentParams";
|
||||
export * from "./getTeacherPageParams";
|
||||
export * from "./getTeacherStudentsParams";
|
||||
export * from "./getTemplates1Params";
|
||||
export * from "./getTemplatesParams";
|
||||
export * from "./getTenantPageParams";
|
||||
export * from "./getThemesParams";
|
||||
export * from "./getTimetable1Params";
|
||||
export * from "./getTimetableParams";
|
||||
export * from "./growthRecord";
|
||||
export * from "./growthRecordCreateRequest";
|
||||
export * from "./growthRecordUpdateRequest";
|
||||
export * from "./importTemplateResponse";
|
||||
export * from "./lesson";
|
||||
export * from "./lessonActivityResponse";
|
||||
export * from "./lessonCreateRequest";
|
||||
export * from "./lessonFeedback";
|
||||
export * from "./lessonFeedbackRequest";
|
||||
export * from "./lessonFeedbackRequestActivitiesDone";
|
||||
export * from "./lessonFeedbackRequestStepFeedbacks";
|
||||
export * from "./lessonFinishRequest";
|
||||
export * from "./lessonSimpleInfo";
|
||||
export * from "./lessonSimpleResponse";
|
||||
export * from "./lessonUpdateRequest";
|
||||
export * from "./localTime";
|
||||
export * from "./loginRequest";
|
||||
export * from "./loginResponse";
|
||||
export * from "./messageResponse";
|
||||
export * from "./monthlyTaskStatsResponse";
|
||||
export * from "./notification";
|
||||
export * from "./operationLog";
|
||||
export * from "./pageResultClazz";
|
||||
export * from "./pageResultCourse";
|
||||
export * from "./pageResultCoursePackage";
|
||||
export * from "./pageResultGrowthRecord";
|
||||
export * from "./pageResultLesson";
|
||||
export * from "./pageResultNotification";
|
||||
export * from "./pageResultOperationLog";
|
||||
export * from "./pageResultParent";
|
||||
export * from "./pageResultResourceItem";
|
||||
export * from "./pageResultSchedulePlan";
|
||||
export * from "./pageResultScheduleTemplate";
|
||||
export * from "./pageResultSchoolCourse";
|
||||
export * from "./pageResultStudent";
|
||||
export * from "./pageResultStudentInfoResponse";
|
||||
export * from "./pageResultTask";
|
||||
export * from "./pageResultTaskCompletion";
|
||||
export * from "./pageResultTaskTemplate";
|
||||
export * from "./pageResultTeacher";
|
||||
export * from "./pageResultTenant";
|
||||
export * from "./parent";
|
||||
export * from "./parentCreateRequest";
|
||||
export * from "./parentUpdateRequest";
|
||||
export * from "./recentActivityResponse";
|
||||
export * from "./rejectCourseParams";
|
||||
export * from "./resetPassword1Params";
|
||||
export * from "./resetPasswordParams";
|
||||
export * from "./resetPasswordResponse";
|
||||
export * from "./resourceItem";
|
||||
export * from "./resourceLibrary";
|
||||
export * from "./resultAdminStatsResponse";
|
||||
export * from "./resultBatchSaveStudentRecordResponse";
|
||||
export * from "./resultChildDetailResponse";
|
||||
export * from "./resultClassTeacher";
|
||||
export * from "./resultClazz";
|
||||
export * from "./resultCommonPageResponseLesson";
|
||||
export * from "./resultCommonPageResponseTaskCompletionInfoResponse";
|
||||
export * from "./resultCourse";
|
||||
export * from "./resultCourseLesson";
|
||||
export * from "./resultCoursePackage";
|
||||
export * from "./resultFileUploadResponse";
|
||||
export * from "./resultGrowthRecord";
|
||||
export * from "./resultImportTemplateResponse";
|
||||
export * from "./resultLesson";
|
||||
export * from "./resultLessonFeedback";
|
||||
export * from "./resultListActiveTeacherStatsResponse";
|
||||
export * from "./resultListChildInfoResponse";
|
||||
export * from "./resultListClassInfoResponse";
|
||||
export * from "./resultListClassTeacher";
|
||||
export * from "./resultListClazz";
|
||||
export * from "./resultListCourse";
|
||||
export * from "./resultListCourseDistributionResponse";
|
||||
export * from "./resultListCourseLesson";
|
||||
export * from "./resultListCourseStatsResponse";
|
||||
export * from "./resultListCourseUsageStatsResponse";
|
||||
export * from "./resultListGrowthRecord";
|
||||
export * from "./resultListLesson";
|
||||
export * from "./resultListLessonActivityResponse";
|
||||
export * from "./resultListLessonSimpleResponse";
|
||||
export * from "./resultListMapStringObject";
|
||||
export * from "./resultListMapStringObjectDataItem";
|
||||
export * from "./resultListMonthlyTaskStatsResponse";
|
||||
export * from "./resultListRecentActivityResponse";
|
||||
export * from "./resultListResourceLibrary";
|
||||
export * from "./resultListSchedulePlan";
|
||||
export * from "./resultListSchedulePlanResponse";
|
||||
export * from "./resultListStudent";
|
||||
export * from "./resultListStudentTransferHistoryResponse";
|
||||
export * from "./resultListTaskStatsByClassResponse";
|
||||
export * from "./resultListTaskStatsByTypeResponse";
|
||||
export * from "./resultListTeacherInfoResponse";
|
||||
export * from "./resultListTenantResponse";
|
||||
export * from "./resultListTenantStatsResponse";
|
||||
export * from "./resultListTheme";
|
||||
export * from "./resultListTrendDataPointResponse";
|
||||
export * from "./resultListTrendDataResponse";
|
||||
export * from "./resultLoginResponse";
|
||||
export * from "./resultLong";
|
||||
export * from "./resultMapStringObject";
|
||||
export * from "./resultMapStringObjectData";
|
||||
export * from "./resultMapStringString";
|
||||
export * from "./resultMapStringStringData";
|
||||
export * from "./resultMessageResponse";
|
||||
export * from "./resultNotification";
|
||||
export * from "./resultPageResultClazz";
|
||||
export * from "./resultPageResultCourse";
|
||||
export * from "./resultPageResultCoursePackage";
|
||||
export * from "./resultPageResultGrowthRecord";
|
||||
export * from "./resultPageResultLesson";
|
||||
export * from "./resultPageResultNotification";
|
||||
export * from "./resultPageResultOperationLog";
|
||||
export * from "./resultPageResultParent";
|
||||
export * from "./resultPageResultResourceItem";
|
||||
export * from "./resultPageResultSchedulePlan";
|
||||
export * from "./resultPageResultScheduleTemplate";
|
||||
export * from "./resultPageResultSchoolCourse";
|
||||
export * from "./resultPageResultStudent";
|
||||
export * from "./resultPageResultStudentInfoResponse";
|
||||
export * from "./resultPageResultTask";
|
||||
export * from "./resultPageResultTaskCompletion";
|
||||
export * from "./resultPageResultTaskTemplate";
|
||||
export * from "./resultPageResultTeacher";
|
||||
export * from "./resultPageResultTenant";
|
||||
export * from "./resultParent";
|
||||
export * from "./resultResetPasswordResponse";
|
||||
export * from "./resultResourceItem";
|
||||
export * from "./resultResourceLibrary";
|
||||
export * from "./resultSchedulePlan";
|
||||
export * from "./resultScheduleTemplate";
|
||||
export * from "./resultSchoolCourse";
|
||||
export * from "./resultStatsResponse";
|
||||
export * from "./resultStudent";
|
||||
export * from "./resultStudentRecord";
|
||||
export * from "./resultStudentRecordListResponse";
|
||||
export * from "./resultSystemSettingsResponse";
|
||||
export * from "./resultTask";
|
||||
export * from "./resultTaskCompletion";
|
||||
export * from "./resultTaskFeedbackResponse";
|
||||
export * from "./resultTaskStatsResponse";
|
||||
export * from "./resultTaskTemplate";
|
||||
export * from "./resultTeacher";
|
||||
export * from "./resultTeacherDashboardResponse";
|
||||
export * from "./resultTenant";
|
||||
export * from "./resultTenantStatusUpdateResponse";
|
||||
export * from "./resultTheme";
|
||||
export * from "./resultUserInfoResponse";
|
||||
export * from "./resultVoid";
|
||||
export * from "./resultVoidData";
|
||||
export * from "./reviewPackageBody";
|
||||
export * from "./schedulePlan";
|
||||
export * from "./schedulePlanCreateRequest";
|
||||
export * from "./schedulePlanResponse";
|
||||
export * from "./schedulePlanUpdateRequest";
|
||||
export * from "./scheduleTemplate";
|
||||
export * from "./scheduleTemplateApplyRequest";
|
||||
export * from "./schoolCourse";
|
||||
export * from "./schoolSettingsUpdateRequest";
|
||||
export * from "./statsResponse";
|
||||
export * from "./student";
|
||||
export * from "./studentCreateRequest";
|
||||
export * from "./studentInfoResponse";
|
||||
export * from "./studentRecord";
|
||||
export * from "./studentRecordListResponse";
|
||||
export * from "./studentRecordRequest";
|
||||
export * from "./studentRecordResponse";
|
||||
export * from "./studentTransferHistoryResponse";
|
||||
export * from "./studentUpdateRequest";
|
||||
export * from "./systemSettingsResponse";
|
||||
export * from "./task";
|
||||
export * from "./taskCompletion";
|
||||
export * from "./taskCompletionInfoResponse";
|
||||
export * from "./taskCreateRequest";
|
||||
export * from "./taskFeedbackResponse";
|
||||
export * from "./taskFeedbackUpdateRequest";
|
||||
export * from "./taskSimpleInfo";
|
||||
export * from "./taskStatsByClassResponse";
|
||||
export * from "./taskStatsByTypeResponse";
|
||||
export * from "./taskStatsResponse";
|
||||
export * from "./taskTemplate";
|
||||
export * from "./taskTemplateCreateRequest";
|
||||
export * from "./taskTemplateUpdateRequest";
|
||||
export * from "./taskUpdateRequest";
|
||||
export * from "./teacher";
|
||||
export * from "./teacherCreateRequest";
|
||||
export * from "./teacherDashboardResponse";
|
||||
export * from "./teacherInfoResponse";
|
||||
export * from "./teacherUpdateRequest";
|
||||
export * from "./tenant";
|
||||
export * from "./tenantCreateRequest";
|
||||
export * from "./tenantQuotaUpdateRequest";
|
||||
export * from "./tenantResponse";
|
||||
export * from "./tenantStatsResponse";
|
||||
export * from "./tenantStatusUpdateRequest";
|
||||
export * from "./tenantStatusUpdateResponse";
|
||||
export * from "./tenantUpdateRequest";
|
||||
export * from "./theme";
|
||||
export * from "./transferStudentRequest";
|
||||
export * from "./trendDataPointResponse";
|
||||
export * from "./trendDataResponse";
|
||||
export * from "./updateCompletion1Params";
|
||||
export * from "./updateCompletionParams";
|
||||
export * from "./updateSettings1Body";
|
||||
export * from "./updateSettingsBody";
|
||||
export * from "./updateTenantQuotaBody";
|
||||
export * from "./updateTenantStatusBody";
|
||||
export * from "./uploadFileBody";
|
||||
export * from "./userInfoResponse";
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时活动响应
|
||||
*/
|
||||
export interface LessonActivityResponse {
|
||||
/** 课时 ID */
|
||||
id?: string;
|
||||
/** 课时标题 */
|
||||
title?: string;
|
||||
/** 课时日期 */
|
||||
lessonDate?: string;
|
||||
/** 课时状态 */
|
||||
status?: string;
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时反馈
|
||||
*/
|
||||
export interface LessonFeedback {
|
||||
/** ID */
|
||||
readonly id?: string;
|
||||
/** 课时 ID */
|
||||
lessonId?: string;
|
||||
/** 教师 ID */
|
||||
teacherId?: string;
|
||||
/**
|
||||
* 设计质量评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
designQuality?: number;
|
||||
/**
|
||||
* 参与度评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
participation?: number;
|
||||
/**
|
||||
* 目标达成度评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
goalAchievement?: number;
|
||||
/** 环节反馈 JSON */
|
||||
stepFeedbacks?: string;
|
||||
/** 优点 */
|
||||
pros?: string;
|
||||
/** 建议 */
|
||||
suggestions?: string;
|
||||
/** 完成的活动 JSON */
|
||||
activitiesDone?: string;
|
||||
/** 创建人用户名 */
|
||||
readonly createdBy?: string;
|
||||
/** 创建时间 */
|
||||
readonly createdAt?: string;
|
||||
/** 更新时间 */
|
||||
readonly updatedAt?: string;
|
||||
/** 更新人用户名 */
|
||||
readonly updatedBy?: string;
|
||||
/** 是否删除 */
|
||||
readonly deleted?: number;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonFeedbackRequestStepFeedbacks } from './lessonFeedbackRequestStepFeedbacks';
|
||||
import type { LessonFeedbackRequestActivitiesDone } from './lessonFeedbackRequestActivitiesDone';
|
||||
|
||||
export interface LessonFeedbackRequest {
|
||||
designQuality?: number;
|
||||
participation?: number;
|
||||
goalAchievement?: number;
|
||||
stepFeedbacks?: LessonFeedbackRequestStepFeedbacks;
|
||||
pros?: string;
|
||||
suggestions?: string;
|
||||
activitiesDone?: LessonFeedbackRequestActivitiesDone;
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type LessonFeedbackRequestActivitiesDone = { [key: string]: unknown };
|
||||
@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export type LessonFeedbackRequestStepFeedbacks = { [key: string]: unknown };
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export interface LessonFinishRequest {
|
||||
actualDuration?: number;
|
||||
overallRating?: string;
|
||||
participationRating?: string;
|
||||
completionNote?: string;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课程简单信息
|
||||
*/
|
||||
export interface LessonSimpleInfo {
|
||||
/** 课程 ID */
|
||||
id?: string;
|
||||
/** 课程状态 */
|
||||
status?: string;
|
||||
/** 班级名称 */
|
||||
className?: string;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 课时简单信息响应
|
||||
*/
|
||||
export interface LessonSimpleResponse {
|
||||
/** 课时 ID */
|
||||
id?: string;
|
||||
/** 课时标题 */
|
||||
title?: string;
|
||||
/** 开始时间 */
|
||||
startTime?: string;
|
||||
/** 结束时间 */
|
||||
endTime?: string;
|
||||
/** 地点 */
|
||||
location?: string;
|
||||
/** 课时状态 */
|
||||
status?: string;
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 简单消息响应
|
||||
*/
|
||||
export interface MessageResponse {
|
||||
/** 消息内容 */
|
||||
message?: string;
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 月度任务统计响应
|
||||
*/
|
||||
export interface MonthlyTaskStatsResponse {
|
||||
/** 月份 */
|
||||
month?: string;
|
||||
/** 任务数 */
|
||||
tasks?: number;
|
||||
/** 完成次数 */
|
||||
completions?: number;
|
||||
/** 已完成数量 */
|
||||
completed?: number;
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentInfoResponse } from './studentInfoResponse';
|
||||
|
||||
export interface PageResultStudentInfoResponse {
|
||||
total?: number;
|
||||
pageSize?: number;
|
||||
items?: StudentInfoResponse[];
|
||||
page?: number;
|
||||
totalPages?: number;
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 近期活动响应
|
||||
*/
|
||||
export interface RecentActivityResponse {
|
||||
/** 活动 ID */
|
||||
id?: string;
|
||||
/** 活动类型/课时状态 */
|
||||
type?: string;
|
||||
/** 活动标题 */
|
||||
title?: string;
|
||||
/** 活动时间 */
|
||||
time?: string;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 重置密码响应
|
||||
*/
|
||||
export interface ResetPasswordResponse {
|
||||
/** 临时密码 */
|
||||
tempPassword?: string;
|
||||
/** 提示信息 */
|
||||
message?: string;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { AdminStatsResponse } from './adminStatsResponse';
|
||||
|
||||
export interface ResultAdminStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: AdminStatsResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { BatchSaveStudentRecordResponse } from './batchSaveStudentRecordResponse';
|
||||
|
||||
export interface ResultBatchSaveStudentRecordResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: BatchSaveStudentRecordResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildDetailResponse } from './childDetailResponse';
|
||||
|
||||
export interface ResultChildDetailResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ChildDetailResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassTeacher } from './classTeacher';
|
||||
|
||||
export interface ResultClassTeacher {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassTeacher;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CommonPageResponseLesson } from './commonPageResponseLesson';
|
||||
|
||||
export interface ResultCommonPageResponseLesson {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CommonPageResponseLesson;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CommonPageResponseTaskCompletionInfoResponse } from './commonPageResponseTaskCompletionInfoResponse';
|
||||
|
||||
export interface ResultCommonPageResponseTaskCompletionInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CommonPageResponseTaskCompletionInfoResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { FileUploadResponse } from './fileUploadResponse';
|
||||
|
||||
export interface ResultFileUploadResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: FileUploadResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ImportTemplateResponse } from './importTemplateResponse';
|
||||
|
||||
export interface ResultImportTemplateResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ImportTemplateResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonFeedback } from './lessonFeedback';
|
||||
|
||||
export interface ResultLessonFeedback {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: LessonFeedback;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ActiveTeacherStatsResponse } from './activeTeacherStatsResponse';
|
||||
|
||||
export interface ResultListActiveTeacherStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ActiveTeacherStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ChildInfoResponse } from './childInfoResponse';
|
||||
|
||||
export interface ResultListChildInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ChildInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassInfoResponse } from './classInfoResponse';
|
||||
|
||||
export interface ResultListClassInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassTeacher } from './classTeacher';
|
||||
|
||||
export interface ResultListClassTeacher {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ClassTeacher[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { Clazz } from './clazz';
|
||||
|
||||
export interface ResultListClazz {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: Clazz[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseDistributionResponse } from './courseDistributionResponse';
|
||||
|
||||
export interface ResultListCourseDistributionResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseDistributionResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseStatsResponse } from './courseStatsResponse';
|
||||
|
||||
export interface ResultListCourseStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { CourseUsageStatsResponse } from './courseUsageStatsResponse';
|
||||
|
||||
export interface ResultListCourseUsageStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: CourseUsageStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonActivityResponse } from './lessonActivityResponse';
|
||||
|
||||
export interface ResultListLessonActivityResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: LessonActivityResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonSimpleResponse } from './lessonSimpleResponse';
|
||||
|
||||
export interface ResultListLessonSimpleResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: LessonSimpleResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { MonthlyTaskStatsResponse } from './monthlyTaskStatsResponse';
|
||||
|
||||
export interface ResultListMonthlyTaskStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: MonthlyTaskStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { RecentActivityResponse } from './recentActivityResponse';
|
||||
|
||||
export interface ResultListRecentActivityResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: RecentActivityResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { SchedulePlanResponse } from './schedulePlanResponse';
|
||||
|
||||
export interface ResultListSchedulePlanResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: SchedulePlanResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentTransferHistoryResponse } from './studentTransferHistoryResponse';
|
||||
|
||||
export interface ResultListStudentTransferHistoryResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: StudentTransferHistoryResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskStatsByClassResponse } from './taskStatsByClassResponse';
|
||||
|
||||
export interface ResultListTaskStatsByClassResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskStatsByClassResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskStatsByTypeResponse } from './taskStatsByTypeResponse';
|
||||
|
||||
export interface ResultListTaskStatsByTypeResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskStatsByTypeResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TeacherInfoResponse } from './teacherInfoResponse';
|
||||
|
||||
export interface ResultListTeacherInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TeacherInfoResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TenantStatsResponse } from './tenantStatsResponse';
|
||||
|
||||
export interface ResultListTenantStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TenantStatsResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TrendDataPointResponse } from './trendDataPointResponse';
|
||||
|
||||
export interface ResultListTrendDataPointResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TrendDataPointResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TrendDataResponse } from './trendDataResponse';
|
||||
|
||||
export interface ResultListTrendDataResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TrendDataResponse[];
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { MessageResponse } from './messageResponse';
|
||||
|
||||
export interface ResultMessageResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: MessageResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { PageResultStudentInfoResponse } from './pageResultStudentInfoResponse';
|
||||
|
||||
export interface ResultPageResultStudentInfoResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: PageResultStudentInfoResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ResetPasswordResponse } from './resetPasswordResponse';
|
||||
|
||||
export interface ResultResetPasswordResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: ResetPasswordResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StatsResponse } from './statsResponse';
|
||||
|
||||
export interface ResultStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: StatsResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentRecord } from './studentRecord';
|
||||
|
||||
export interface ResultStudentRecord {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: StudentRecord;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { StudentRecordListResponse } from './studentRecordListResponse';
|
||||
|
||||
export interface ResultStudentRecordListResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: StudentRecordListResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { SystemSettingsResponse } from './systemSettingsResponse';
|
||||
|
||||
export interface ResultSystemSettingsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: SystemSettingsResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskFeedbackResponse } from './taskFeedbackResponse';
|
||||
|
||||
export interface ResultTaskFeedbackResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskFeedbackResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskStatsResponse } from './taskStatsResponse';
|
||||
|
||||
export interface ResultTaskStatsResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TaskStatsResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TeacherDashboardResponse } from './teacherDashboardResponse';
|
||||
|
||||
export interface ResultTeacherDashboardResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TeacherDashboardResponse;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TenantStatusUpdateResponse } from './tenantStatusUpdateResponse';
|
||||
|
||||
export interface ResultTenantStatusUpdateResponse {
|
||||
code?: number;
|
||||
message?: string;
|
||||
data?: TenantStatusUpdateResponse;
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LocalTime } from './localTime';
|
||||
|
||||
/**
|
||||
* 课表计划响应
|
||||
*/
|
||||
export interface SchedulePlanResponse {
|
||||
/** 课表 ID */
|
||||
id?: string;
|
||||
/** 课表名称 */
|
||||
name?: string;
|
||||
/** 班级 ID */
|
||||
classId?: string;
|
||||
/** 班级名称 */
|
||||
className?: string;
|
||||
/** 课程 ID */
|
||||
courseId?: string;
|
||||
/** 课程名称 */
|
||||
courseName?: string;
|
||||
/** 教师 ID */
|
||||
teacherId?: string;
|
||||
/** 教师姓名 */
|
||||
teacherName?: string;
|
||||
/** 星期几 (1-7) */
|
||||
dayOfWeek?: number;
|
||||
/** 节次 */
|
||||
period?: number;
|
||||
startTime?: LocalTime;
|
||||
endTime?: LocalTime;
|
||||
/** 开始日期 */
|
||||
startDate?: string;
|
||||
/** 结束日期 */
|
||||
endDate?: string;
|
||||
/** 地点 */
|
||||
location?: string;
|
||||
/** 备注 */
|
||||
note?: string;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LocalTime } from './localTime';
|
||||
|
||||
/**
|
||||
* 课表计划更新请求
|
||||
*/
|
||||
export interface SchedulePlanUpdateRequest {
|
||||
/** 授课教师 ID */
|
||||
teacherId?: string;
|
||||
/** 开始日期 */
|
||||
startDate?: string;
|
||||
/** 结束日期 */
|
||||
endDate?: string;
|
||||
startTime?: LocalTime;
|
||||
endTime?: LocalTime;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
/** 备注 */
|
||||
note?: string;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 学校设置更新请求
|
||||
*/
|
||||
export interface SchoolSettingsUpdateRequest {
|
||||
/** 学校名称 */
|
||||
schoolName?: string;
|
||||
/** 学校 Logo */
|
||||
schoolLogo?: string;
|
||||
/** 地址 */
|
||||
address?: string;
|
||||
/** 课时通知启用 */
|
||||
notifyOnLesson?: boolean;
|
||||
/** 任务通知启用 */
|
||||
notifyOnTask?: boolean;
|
||||
/** 成长记录通知启用 */
|
||||
notifyOnGrowth?: boolean;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 统计数据响应
|
||||
*/
|
||||
export interface StatsResponse {
|
||||
/** 学生总数 */
|
||||
totalStudents?: number;
|
||||
/** 教师总数 */
|
||||
totalTeachers?: number;
|
||||
/** 班级总数 */
|
||||
totalClasses?: number;
|
||||
/** 课程总数 */
|
||||
totalCourses?: number;
|
||||
/** 今日课时数 */
|
||||
todayLessons?: number;
|
||||
/** 本月任务数 */
|
||||
monthTasks?: number;
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { ClassSimpleInfo } from './classSimpleInfo';
|
||||
|
||||
/**
|
||||
* 学生信息响应
|
||||
*/
|
||||
export interface StudentInfoResponse {
|
||||
/** 学生 ID */
|
||||
id?: string;
|
||||
/** 学生姓名 */
|
||||
name?: string;
|
||||
/** 性别 */
|
||||
gender?: string;
|
||||
/** 出生日期 */
|
||||
birthDate?: string;
|
||||
/** 班级 ID */
|
||||
classId?: string;
|
||||
classInfo?: ClassSimpleInfo;
|
||||
/** 家长姓名 */
|
||||
parentName?: string;
|
||||
/** 家长手机号 */
|
||||
parentPhone?: string;
|
||||
/** 课时数 */
|
||||
lessonCount?: number;
|
||||
/** 阅读次数 */
|
||||
readingCount?: number;
|
||||
/** 创建时间 */
|
||||
createdAt?: string;
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 学生记录
|
||||
*/
|
||||
export interface StudentRecord {
|
||||
/** 记录 ID */
|
||||
readonly id?: string;
|
||||
/** 课时 ID */
|
||||
lessonId: string;
|
||||
/** 学生 ID */
|
||||
studentId: string;
|
||||
/** 出勤状态 present/absent/late */
|
||||
attendance?: string;
|
||||
/** 课堂表现评价 */
|
||||
performance?: string;
|
||||
/** 备注说明 */
|
||||
notes?: string;
|
||||
/**
|
||||
* 专注力评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
focus?: number;
|
||||
/**
|
||||
* 参与度评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
participation?: number;
|
||||
/**
|
||||
* 兴趣评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
interest?: number;
|
||||
/**
|
||||
* 理解度评分 (1-5)
|
||||
* @minimum 1
|
||||
* @maximum 5
|
||||
*/
|
||||
understanding?: number;
|
||||
/** 创建人用户名 */
|
||||
readonly createdBy?: string;
|
||||
/** 更新人用户名 */
|
||||
readonly updatedBy?: string;
|
||||
/** 创建时间 */
|
||||
readonly createdAt?: string;
|
||||
/** 更新时间 */
|
||||
readonly updatedAt?: string;
|
||||
/** 是否删除 0-未删除 1-已删除 */
|
||||
readonly deleted?: number;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { LessonSimpleInfo } from './lessonSimpleInfo';
|
||||
import type { StudentRecordResponse } from './studentRecordResponse';
|
||||
|
||||
/**
|
||||
* 学生记录列表响应
|
||||
*/
|
||||
export interface StudentRecordListResponse {
|
||||
lesson?: LessonSimpleInfo;
|
||||
/** 学生记录列表 */
|
||||
students?: StudentRecordResponse[];
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
export interface StudentRecordRequest {
|
||||
focus?: number;
|
||||
participation?: number;
|
||||
interest?: number;
|
||||
understanding?: number;
|
||||
notes?: string;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 学生记录响应
|
||||
*/
|
||||
export interface StudentRecordResponse {
|
||||
/** 记录 ID */
|
||||
id?: string;
|
||||
/** 学生 ID */
|
||||
studentId?: string;
|
||||
/** 专注力评分 (1-5) */
|
||||
focus?: number;
|
||||
/** 参与度评分 (1-5) */
|
||||
participation?: number;
|
||||
/** 兴趣评分 (1-5) */
|
||||
interest?: number;
|
||||
/** 理解度评分 (1-5) */
|
||||
understanding?: number;
|
||||
/** 备注 */
|
||||
notes?: string;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 学生调班历史响应
|
||||
*/
|
||||
export interface StudentTransferHistoryResponse {
|
||||
/** 记录 ID */
|
||||
id?: string;
|
||||
/** 班级 ID */
|
||||
classId?: string;
|
||||
/** 班级名称 */
|
||||
className?: string;
|
||||
/** 开始日期 */
|
||||
startDate?: string;
|
||||
/** 结束日期 */
|
||||
endDate?: string;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
/** 调班原因 */
|
||||
reason?: string;
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* 系统设置响应
|
||||
*/
|
||||
export interface SystemSettingsResponse {
|
||||
/** 系统名称 */
|
||||
systemName?: string;
|
||||
/** 系统 Logo URL */
|
||||
systemLogo?: string;
|
||||
/** 登录页背景图 URL */
|
||||
loginBackground?: string;
|
||||
/** 系统公告 */
|
||||
announcement?: string;
|
||||
/** 联系方式 */
|
||||
contactInfo?: string;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Generated by orval v7.13.2 🍺
|
||||
* Do not edit manually.
|
||||
* Reading Platform API
|
||||
* Reading Platform Backend Service API Documentation
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*/
|
||||
import type { TaskSimpleInfo } from './taskSimpleInfo';
|
||||
|
||||
/**
|
||||
* 任务完成信息响应
|
||||
*/
|
||||
export interface TaskCompletionInfoResponse {
|
||||
/** 完成记录 ID */
|
||||
id?: string;
|
||||
/** 任务 ID */
|
||||
taskId?: string;
|
||||
/** 学生 ID */
|
||||
studentId?: string;
|
||||
/** 状态 */
|
||||
status?: string;
|
||||
/** 完成时间 */
|
||||
completedAt?: string;
|
||||
/** 反馈 */
|
||||
feedback?: string;
|
||||
/** 家长反馈 */
|
||||
parentFeedback?: string;
|
||||
task?: TaskSimpleInfo;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user