949 lines
31 KiB
Markdown
949 lines
31 KiB
Markdown
|
|
# 数据模型与API设计
|
|||
|
|
|
|||
|
|
> ⚠️ **本文档已过时**
|
|||
|
|
>
|
|||
|
|
> 本文档需要按新结构重构。请参考 **[17-课程包套餐重构需求.md](./17-课程包套餐重构需求.md)** 中的数据模型部分。
|
|||
|
|
>
|
|||
|
|
> 主要变更:
|
|||
|
|
> - 新增:课程套餐表、套餐-课程包关联表
|
|||
|
|
> - 新增:课程表(导入课/集体课/领域课)、教学环节表
|
|||
|
|
> - 新增:校本课程包表、主题字典表
|
|||
|
|
> - 重构:课程包表结构大幅调整
|
|||
|
|
> - 废弃:课程脚本表、逐页配置表(改为课程-环节结构)
|
|||
|
|
>
|
|||
|
|
> 本文档仅供参考,待重构更新。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
> 创建时间:2025-02-04
|
|||
|
|
> 最后更新:2025-02-13
|
|||
|
|
> **状态:已过时,待重构**
|
|||
|
|
> 版本:MVP v1.1
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、数据模型设计
|
|||
|
|
|
|||
|
|
### 1.1 核心实体关系图
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ 核心实体关系 │
|
|||
|
|
├─────────────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|||
|
|
│ │ 租户 │────│ 教师 │────│ 班级 │ │
|
|||
|
|
│ │ (Tenant) │ 1 │(Teacher) │ M │ (Class) │ │
|
|||
|
|
│ └──────────┘ └──────────┘ └──────────┘ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ M │ M │
|
|||
|
|
│ ▼ ▼ │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ │
|
|||
|
|
│ │ 学生 │ │ 授课记录 │ │
|
|||
|
|
│ │(Student) │ │(Lesson) │ │
|
|||
|
|
│ └──────────┘ └──────────┘ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ M │ │
|
|||
|
|
│ └────────────────────────────────┘ │
|
|||
|
|
│ │ │
|
|||
|
|
│ │ M │
|
|||
|
|
│ ▼ │
|
|||
|
|
│ ┌──────────┐ │
|
|||
|
|
│ │ 课程包 │ │
|
|||
|
|
│ │(Course) │ │
|
|||
|
|
│ └──────────┘ │
|
|||
|
|
│ │
|
|||
|
|
└─────────────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 1.2 数据表清单
|
|||
|
|
|
|||
|
|
| 表名 | 说明 | 核心字段 |
|
|||
|
|
|-----|------|---------|
|
|||
|
|
| tenants | 租户(幼儿园) | id, name, package_type, status |
|
|||
|
|
| teachers | 教师 | id, tenant_id, name, phone, classes[], status |
|
|||
|
|
| students | 学生 | id, tenant_id, class_id, name, gender, parent_phone |
|
|||
|
|
| classes | 班级 | id, tenant_id, name, grade, teacher_id |
|
|||
|
|
| courses | 课程包 | id, name, grade_tags[], domain_tags[], status, version |
|
|||
|
|
| course_resources | 课程包资源 | id, course_id, resource_type, file_url |
|
|||
|
|
| course_scripts | 课程脚本 | id, course_id, step_index, content, interactions[] |
|
|||
|
|
| course_activities | 延伸活动 | id, course_id, name, domain, materials[], guide |
|
|||
|
|
| lessons | 授课记录 | id, tenant_id, teacher_id, class_id, course_id, datetime |
|
|||
|
|
| lesson_feedbacks | 课程反馈 | id, lesson_id, teacher_id, rating, comments |
|
|||
|
|
| student_records | 学生测评记录 | id, lesson_id, student_id, participation, understanding |
|
|||
|
|
| tags | 标签体系 | id, level, code, name, parent_id |
|
|||
|
|
| tenant_courses | 租户课程授权 | id, tenant_id, course_id, authorized |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1.3 详细表结构
|
|||
|
|
|
|||
|
|
#### tenants(租户表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE tenants (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
name VARCHAR(100) NOT NULL COMMENT '幼儿园名称',
|
|||
|
|
address VARCHAR(255) COMMENT '地址',
|
|||
|
|
contact_person VARCHAR(50) COMMENT '联系人',
|
|||
|
|
contact_phone VARCHAR(20) COMMENT '联系电话',
|
|||
|
|
logo_url VARCHAR(255) COMMENT 'Logo URL',
|
|||
|
|
|
|||
|
|
-- 套餐信息
|
|||
|
|
package_type ENUM('basic', 'standard', 'advanced') NOT NULL COMMENT '套餐类型',
|
|||
|
|
teacher_quota INT DEFAULT 20 COMMENT '教师账号配额',
|
|||
|
|
student_quota INT DEFAULT 200 COMMENT '学生档案配额',
|
|||
|
|
storage_quota BIGINT DEFAULT 5368709120 COMMENT '存储配额(字节)',
|
|||
|
|
|
|||
|
|
-- 时间信息
|
|||
|
|
start_date DATE NOT NULL COMMENT '套餐开始日期',
|
|||
|
|
expire_date DATE NOT NULL COMMENT '套餐到期日期',
|
|||
|
|
|
|||
|
|
-- 使用统计
|
|||
|
|
teacher_count INT DEFAULT 0 COMMENT '已使用教师数',
|
|||
|
|
student_count INT DEFAULT 0 COMMENT '已使用学生数',
|
|||
|
|
storage_used BIGINT DEFAULT 0 COMMENT '已使用存储',
|
|||
|
|
|
|||
|
|
-- 状态
|
|||
|
|
status ENUM('active', 'suspended', 'expired') DEFAULT 'active',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_package_type (package_type),
|
|||
|
|
INDEX idx_status (status),
|
|||
|
|
INDEX idx_expire_date (expire_date)
|
|||
|
|
) COMMENT='租户(幼儿园)表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### teachers(教师表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE teachers (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
tenant_id BIGINT NOT NULL COMMENT '所属租户ID',
|
|||
|
|
name VARCHAR(50) NOT NULL COMMENT '姓名',
|
|||
|
|
phone VARCHAR(20) NOT NULL COMMENT '手机号',
|
|||
|
|
email VARCHAR(100) COMMENT '邮箱',
|
|||
|
|
|
|||
|
|
-- 账号信息
|
|||
|
|
login_account VARCHAR(100) NOT NULL COMMENT '登录账号',
|
|||
|
|
password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希',
|
|||
|
|
|
|||
|
|
-- 班级信息(JSON数组)
|
|||
|
|
class_ids JSON COMMENT '负责的班级ID列表',
|
|||
|
|
|
|||
|
|
-- 状态
|
|||
|
|
status ENUM('active', 'suspended') DEFAULT 'active',
|
|||
|
|
|
|||
|
|
-- 统计字段
|
|||
|
|
lesson_count INT DEFAULT 0 COMMENT '授课次数',
|
|||
|
|
feedback_count INT DEFAULT 0 COMMENT '反馈提交数',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
last_login_at DATETIME COMMENT '最后登录时间',
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_login_account (login_account),
|
|||
|
|
INDEX idx_tenant_id (tenant_id),
|
|||
|
|
INDEX idx_status (status),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
|||
|
|
) COMMENT='教师表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### students(学生表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE students (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
tenant_id BIGINT NOT NULL COMMENT '所属租户ID',
|
|||
|
|
class_id BIGINT NOT NULL COMMENT '所属班级ID',
|
|||
|
|
name VARCHAR(50) NOT NULL COMMENT '姓名',
|
|||
|
|
gender ENUM('male', 'female') COMMENT '性别',
|
|||
|
|
birth_date DATE COMMENT '出生日期',
|
|||
|
|
parent_phone VARCHAR(20) COMMENT '家长手机号',
|
|||
|
|
parent_name VARCHAR(50) COMMENT '家长姓名',
|
|||
|
|
|
|||
|
|
-- 统计字段
|
|||
|
|
reading_count INT DEFAULT 0 COMMENT '阅读数量',
|
|||
|
|
lesson_count INT DEFAULT 0 COMMENT '参与课程次数',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_tenant_class (tenant_id, class_id),
|
|||
|
|
INDEX idx_parent_phone (parent_phone),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|||
|
|
FOREIGN KEY (class_id) REFERENCES classes(id)
|
|||
|
|
) COMMENT='学生表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### classes(班级表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE classes (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
tenant_id BIGINT NOT NULL COMMENT '所属租户ID',
|
|||
|
|
name VARCHAR(50) NOT NULL COMMENT '班级名称',
|
|||
|
|
grade ENUM('small', 'middle', 'big') NOT NULL COMMENT '年级',
|
|||
|
|
teacher_id BIGINT COMMENT '负责教师ID',
|
|||
|
|
|
|||
|
|
-- 统计字段
|
|||
|
|
student_count INT DEFAULT 0 COMMENT '学生人数',
|
|||
|
|
lesson_count INT DEFAULT 0 COMMENT '本月授课次数',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_tenant_id (tenant_id),
|
|||
|
|
INDEX idx_grade (grade),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|||
|
|
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
|
|||
|
|
) COMMENT='班级表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### courses(课程包表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE courses (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
name VARCHAR(200) NOT NULL COMMENT '课程包名称',
|
|||
|
|
description TEXT COMMENT '课程简介',
|
|||
|
|
|
|||
|
|
-- 绘本关联
|
|||
|
|
picture_book_id BIGINT COMMENT '关联绘本ID',
|
|||
|
|
picture_book_name VARCHAR(200) COMMENT '绘本名称',
|
|||
|
|
|
|||
|
|
-- 封面图片
|
|||
|
|
cover_image_path VARCHAR(500) COMMENT '封面图片路径',
|
|||
|
|
|
|||
|
|
-- 标签
|
|||
|
|
grade_tags JSON COMMENT '适切年级标签 ["small", "middle"]',
|
|||
|
|
domain_tags JSON COMMENT '领域标签 [{"level1":"语言", "level2":"阅读与书写准备"}]',
|
|||
|
|
|
|||
|
|
-- 时长
|
|||
|
|
duration INT DEFAULT 25 COMMENT '教学时长(分钟)',
|
|||
|
|
|
|||
|
|
-- 数字资源(JSON数组存储多文件路径)
|
|||
|
|
ebook_paths JSON COMMENT '电子绘本路径 [{"name":"xxx.pdf", "path":"/uploads/..."}]',
|
|||
|
|
audio_paths JSON COMMENT '音频路径',
|
|||
|
|
video_paths JSON COMMENT '视频路径',
|
|||
|
|
other_resources JSON COMMENT '其他资源路径',
|
|||
|
|
|
|||
|
|
-- 教学材料
|
|||
|
|
ppt_path VARCHAR(500) COMMENT 'PPT文件路径',
|
|||
|
|
ppt_name VARCHAR(200) COMMENT 'PPT文件名',
|
|||
|
|
poster_paths JSON COMMENT '挂图路径',
|
|||
|
|
tools JSON COMMENT '教具列表 [{"name":"剪刀", "quantity":10}]',
|
|||
|
|
student_materials TEXT COMMENT '学生材料',
|
|||
|
|
|
|||
|
|
-- 复杂数据(JSON存储)- 2025-02-13 新增
|
|||
|
|
lesson_plan_data JSON COMMENT '课堂计划数据 {phases:[], scriptPages:[]}',
|
|||
|
|
activities_data JSON COMMENT '延伸活动数据 [{name, type, content, materials, duration}]',
|
|||
|
|
assessment_data JSON COMMENT '测评工具数据 {enabled, types[], indicators[], ...}',
|
|||
|
|
|
|||
|
|
-- 状态
|
|||
|
|
status ENUM('draft', 'pending', 'rejected', 'published', 'archived') DEFAULT 'draft',
|
|||
|
|
version VARCHAR(20) DEFAULT '1.0' COMMENT '版本号',
|
|||
|
|
|
|||
|
|
-- 审核相关
|
|||
|
|
submitted_at DATETIME COMMENT '提交审核时间',
|
|||
|
|
submitted_by BIGINT COMMENT '提交人ID',
|
|||
|
|
reviewed_at DATETIME COMMENT '审核时间',
|
|||
|
|
reviewed_by BIGINT COMMENT '审核人ID',
|
|||
|
|
review_comment TEXT COMMENT '审核意见',
|
|||
|
|
review_checklist JSON COMMENT '审核检查项',
|
|||
|
|
|
|||
|
|
-- 版本管理
|
|||
|
|
parent_id BIGINT COMMENT '父版本ID(迭代时指向原版本)',
|
|||
|
|
is_latest BOOLEAN DEFAULT TRUE COMMENT '是否最新版本',
|
|||
|
|
|
|||
|
|
-- 统计字段
|
|||
|
|
usage_count INT DEFAULT 0 COMMENT '使用次数',
|
|||
|
|
teacher_count INT DEFAULT 0 COMMENT '使用教师数',
|
|||
|
|
avg_rating DECIMAL(3,2) DEFAULT 0 COMMENT '平均评分',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_by BIGINT COMMENT '创建者ID(超管端用户)',
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
published_at DATETIME COMMENT '发布时间',
|
|||
|
|
|
|||
|
|
INDEX idx_status (status),
|
|||
|
|
INDEX idx_grade_tags (grade_tags(100)),
|
|||
|
|
INDEX idx_published_at (published_at)
|
|||
|
|
) COMMENT='课程包表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### course_resources(课程包资源表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE course_resources (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
course_id BIGINT NOT NULL COMMENT '课程包ID',
|
|||
|
|
resource_type ENUM('ebook', 'audio', 'video', 'ppt', 'animation', 'interactive') NOT NULL,
|
|||
|
|
resource_name VARCHAR(255) NOT NULL COMMENT '资源名称',
|
|||
|
|
file_url VARCHAR(500) NOT NULL COMMENT '文件URL',
|
|||
|
|
file_size BIGINT COMMENT '文件大小(字节)',
|
|||
|
|
mime_type VARCHAR(100) COMMENT 'MIME类型',
|
|||
|
|
metadata JSON COMMENT '其他元数据(时长、分辨率等)',
|
|||
|
|
|
|||
|
|
-- 排序
|
|||
|
|
sort_order INT DEFAULT 0,
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_course_id (course_id),
|
|||
|
|
INDEX idx_resource_type (resource_type),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
|
|||
|
|
) COMMENT='课程包资源表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### course_scripts(课程脚本表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE course_scripts (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
course_id BIGINT NOT NULL COMMENT '课程包ID',
|
|||
|
|
step_index INT NOT NULL COMMENT '环节序号',
|
|||
|
|
step_name VARCHAR(100) NOT NULL COMMENT '环节名称',
|
|||
|
|
step_type ENUM('intro', 'guide', 'reading', 'activity', 'ending') NOT NULL,
|
|||
|
|
|
|||
|
|
-- 环节内容
|
|||
|
|
duration INT NOT NULL COMMENT '预计时长(分钟)',
|
|||
|
|
objective TEXT COMMENT '环节目标',
|
|||
|
|
teacher_script TEXT COMMENT '教师话术脚本',
|
|||
|
|
interaction_points JSON COMMENT '互动要点',
|
|||
|
|
|
|||
|
|
-- 关联资源
|
|||
|
|
resource_ids JSON COMMENT '关联的资源ID列表',
|
|||
|
|
|
|||
|
|
-- 排序
|
|||
|
|
sort_order INT DEFAULT 0,
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_course_step (course_id, step_index),
|
|||
|
|
INDEX idx_course_id (course_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
|
|||
|
|
) COMMENT='课程脚本表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### course_script_pages(逐页配置表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE course_script_pages (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
script_id BIGINT NOT NULL COMMENT '脚本ID',
|
|||
|
|
page_number INT NOT NULL COMMENT '页码',
|
|||
|
|
questions JSON COMMENT '提问列表',
|
|||
|
|
interaction_component JSON COMMENT '互动组件配置',
|
|||
|
|
teacher_notes TEXT COMMENT '教师提示',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_script_page (script_id, page_number),
|
|||
|
|
INDEX idx_script_id (script_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (script_id) REFERENCES course_scripts(id) ON DELETE CASCADE
|
|||
|
|
) COMMENT='课程脚本逐页配置表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### course_activities(延伸活动表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE course_activities (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
course_id BIGINT NOT NULL COMMENT '课程包ID',
|
|||
|
|
name VARCHAR(200) NOT NULL COMMENT '活动名称',
|
|||
|
|
|
|||
|
|
-- 分类
|
|||
|
|
domain VARCHAR(100) COMMENT '所属领域',
|
|||
|
|
domain_tag_id BIGINT COMMENT '关联领域标签ID',
|
|||
|
|
activity_type ENUM('hands_on', 'communication', 'game', 'other') NOT NULL,
|
|||
|
|
duration INT COMMENT '预计时长(分钟)',
|
|||
|
|
|
|||
|
|
-- 素材
|
|||
|
|
online_materials JSON COMMENT '线上素材 [{"name":"xxx", "url":"xxx"}]',
|
|||
|
|
offline_materials TEXT COMMENT '线下素材说明',
|
|||
|
|
|
|||
|
|
-- 活动指引
|
|||
|
|
activity_guide TEXT COMMENT '详细活动指引',
|
|||
|
|
objectives TEXT COMMENT '活动目标',
|
|||
|
|
|
|||
|
|
-- 排序
|
|||
|
|
sort_order INT DEFAULT 0,
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_course_id (course_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
|
|||
|
|
) COMMENT='延伸活动表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### lessons(授课记录表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE lessons (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
tenant_id BIGINT NOT NULL COMMENT '租户ID',
|
|||
|
|
teacher_id BIGINT NOT NULL COMMENT '教师ID',
|
|||
|
|
class_id BIGINT NOT NULL COMMENT '班级ID',
|
|||
|
|
course_id BIGINT NOT NULL COMMENT '课程包ID',
|
|||
|
|
|
|||
|
|
-- 时间
|
|||
|
|
planned_datetime DATETIME COMMENT '计划上课时间',
|
|||
|
|
start_datetime DATETIME COMMENT '实际开始时间',
|
|||
|
|
end_datetime DATETIME COMMENT '实际结束时间',
|
|||
|
|
actual_duration INT COMMENT '实际时长(分钟)',
|
|||
|
|
|
|||
|
|
-- 状态
|
|||
|
|
status ENUM('planned', 'in_progress', 'completed', 'cancelled') DEFAULT 'planned',
|
|||
|
|
|
|||
|
|
-- 快速记录
|
|||
|
|
overall_rating ENUM('excellent', 'good', 'average', 'needs_improvement') COMMENT '整体效果',
|
|||
|
|
participation_rating ENUM('very_high', 'high', 'medium', 'low') COMMENT '参与度',
|
|||
|
|
completion_note ENUM('all_completed', 'adjusted', 'partial') COMMENT '完成情况',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
INDEX idx_tenant_teacher (tenant_id, teacher_id),
|
|||
|
|
INDEX idx_class_id (class_id),
|
|||
|
|
INDEX idx_course_id (course_id),
|
|||
|
|
INDEX idx_status (status),
|
|||
|
|
INDEX idx_start_datetime (start_datetime),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|||
|
|
FOREIGN KEY (teacher_id) REFERENCES teachers(id),
|
|||
|
|
FOREIGN KEY (class_id) REFERENCES classes(id),
|
|||
|
|
FOREIGN KEY (course_id) REFERENCES courses(id)
|
|||
|
|
) COMMENT='授课记录表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### lesson_feedbacks(课程反馈表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE lesson_feedbacks (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
lesson_id BIGINT NOT NULL COMMENT '授课记录ID',
|
|||
|
|
teacher_id BIGINT NOT NULL COMMENT '教师ID',
|
|||
|
|
|
|||
|
|
-- 整体评价
|
|||
|
|
design_quality TINYINT COMMENT '课程设计质量 1-5',
|
|||
|
|
participation TINYINT COMMENT '孩子参与度 1-5',
|
|||
|
|
goal_achievement TINYINT COMMENT '教学目标达成度 1-5',
|
|||
|
|
|
|||
|
|
-- 环节反馈(JSON)
|
|||
|
|
step_feedbacks JSON COMMENT '各环节反馈和评分',
|
|||
|
|
|
|||
|
|
-- 优点与建议
|
|||
|
|
pros TEXT COMMENT '优点',
|
|||
|
|
suggestions TEXT COMMENT '改进建议',
|
|||
|
|
|
|||
|
|
-- 延伸活动开展
|
|||
|
|
activities_done JSON COMMENT '开展的延伸活动列表',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_lesson_teacher (lesson_id, teacher_id),
|
|||
|
|
INDEX idx_lesson_id (lesson_id),
|
|||
|
|
INDEX idx_teacher_id (teacher_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (lesson_id) REFERENCES lessons(id) ON DELETE CASCADE,
|
|||
|
|
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
|
|||
|
|
) COMMENT='课程反馈表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### student_records(学生测评记录表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE student_records (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
lesson_id BIGINT NOT NULL COMMENT '授课记录ID',
|
|||
|
|
student_id BIGINT NOT NULL COMMENT '学生ID',
|
|||
|
|
|
|||
|
|
-- 参与度评分(1-5)
|
|||
|
|
focus TINYINT COMMENT '专注度',
|
|||
|
|
participation TINYINT COMMENT '参与度',
|
|||
|
|
interest TINYINT COMMENT '兴趣度',
|
|||
|
|
understanding TINYINT COMMENT '理解度',
|
|||
|
|
|
|||
|
|
-- 领域目标达成(JSON)
|
|||
|
|
domain_achievements JSON COMMENT '各领域目标达成情况',
|
|||
|
|
|
|||
|
|
-- 备注
|
|||
|
|
notes TEXT COMMENT '备注',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_lesson_student (lesson_id, student_id),
|
|||
|
|
INDEX idx_lesson_id (lesson_id),
|
|||
|
|
INDEX idx_student_id (student_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (lesson_id) REFERENCES lessons(id) ON DELETE CASCADE,
|
|||
|
|
FOREIGN KEY (student_id) REFERENCES students(id)
|
|||
|
|
) COMMENT='学生测评记录表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### tags(标签体系表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE tags (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
level TINYINT NOT NULL COMMENT '层级 1-4',
|
|||
|
|
code VARCHAR(50) NOT NULL COMMENT '标签编码',
|
|||
|
|
name VARCHAR(100) NOT NULL COMMENT '标签名称',
|
|||
|
|
parent_id BIGINT COMMENT '父标签ID',
|
|||
|
|
|
|||
|
|
-- 额外信息
|
|||
|
|
description TEXT COMMENT '说明',
|
|||
|
|
metadata JSON COMMENT '其他元数据',
|
|||
|
|
|
|||
|
|
-- 排序
|
|||
|
|
sort_order INT DEFAULT 0,
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_code (code),
|
|||
|
|
INDEX idx_parent_id (parent_id),
|
|||
|
|
INDEX idx_level (level)
|
|||
|
|
) COMMENT='标签体系表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### tenant_courses(租户课程授权表)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE tenant_courses (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
tenant_id BIGINT NOT NULL COMMENT '租户ID',
|
|||
|
|
course_id BIGINT NOT NULL COMMENT '课程包ID',
|
|||
|
|
|
|||
|
|
-- 授权信息
|
|||
|
|
authorized BOOLEAN DEFAULT TRUE COMMENT '是否授权',
|
|||
|
|
authorized_at DATETIME COMMENT '授权时间',
|
|||
|
|
|
|||
|
|
-- 审计字段
|
|||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
|
|||
|
|
UNIQUE KEY uk_tenant_course (tenant_id, course_id),
|
|||
|
|
INDEX idx_tenant_id (tenant_id),
|
|||
|
|
INDEX idx_course_id (course_id),
|
|||
|
|
|
|||
|
|
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
|
|||
|
|
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
|
|||
|
|
) COMMENT='租户课程授权表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、API接口设计
|
|||
|
|
|
|||
|
|
### 2.1 接口规范
|
|||
|
|
|
|||
|
|
| 项目 | 说明 |
|
|||
|
|
|-----|------|
|
|||
|
|
| 协议 | HTTPS |
|
|||
|
|
| 数据格式 | JSON |
|
|||
|
|
| 认证方式 | JWT Token |
|
|||
|
|
| 基础路径 | `/api/v1` |
|
|||
|
|
| 错误码 | 标准HTTP状态码 + 业务错误码 |
|
|||
|
|
|
|||
|
|
### 2.2 通用响应格式
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
// 成功响应
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "success",
|
|||
|
|
"data": {}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 错误响应
|
|||
|
|
{
|
|||
|
|
"code": 1001,
|
|||
|
|
"message": "参数错误",
|
|||
|
|
"data": null
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 认证接口
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/auth/login` | 登录 |
|
|||
|
|
| POST | `/auth/logout` | 登出 |
|
|||
|
|
| POST | `/auth/refresh` | 刷新Token |
|
|||
|
|
| GET | `/auth/profile` | 获取当前用户信息 |
|
|||
|
|
|
|||
|
|
**登录请求示例:**
|
|||
|
|
```json
|
|||
|
|
POST /api/v1/auth/login
|
|||
|
|
{
|
|||
|
|
"account": "teacher@school.com",
|
|||
|
|
"password": "123456",
|
|||
|
|
"role": "teacher"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**登录响应示例:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "success",
|
|||
|
|
"data": {
|
|||
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|||
|
|
"user": {
|
|||
|
|
"id": 1,
|
|||
|
|
"name": "李老师",
|
|||
|
|
"role": "teacher",
|
|||
|
|
"tenant_id": 1
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.4 超管端API
|
|||
|
|
|
|||
|
|
#### 课程包管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/admin/courses` | 创建课程包 |
|
|||
|
|
| GET | `/admin/courses` | 获取课程包列表 |
|
|||
|
|
| GET | `/admin/courses/:id` | 获取课程包详情 |
|
|||
|
|
| PUT | `/admin/courses/:id` | 更新课程包 |
|
|||
|
|
| DELETE | `/admin/courses/:id` | 删除课程包 |
|
|||
|
|
| POST | `/admin/courses/:id/publish` | 发布课程包 |
|
|||
|
|
| POST | `/admin/courses/:id/unpublish` | 下架课程包 |
|
|||
|
|
| GET | `/admin/courses/:id/stats` | 获取课程包统计数据 |
|
|||
|
|
|
|||
|
|
**创建课程包请求示例:**
|
|||
|
|
```json
|
|||
|
|
POST /api/v1/admin/courses
|
|||
|
|
{
|
|||
|
|
"name": "好饿的毛毛虫完整阅读活动",
|
|||
|
|
"picture_book_id": 1,
|
|||
|
|
"grade_tags": ["middle", "big"],
|
|||
|
|
"domain_tags": [
|
|||
|
|
{"level1": "语言", "level2": "阅读与书写准备"},
|
|||
|
|
{"level1": "科学", "level2": "科学探究"}
|
|||
|
|
],
|
|||
|
|
"duration": 25,
|
|||
|
|
"description": "通过绘本..."
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 课程包资源管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/admin/courses/:id/resources` | 上传资源 |
|
|||
|
|
| GET | `/admin/courses/:id/resources` | 获取资源列表 |
|
|||
|
|
| DELETE | `/admin/resources/:id` | 删除资源 |
|
|||
|
|
|
|||
|
|
#### 课程包脚本管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/admin/courses/:id/scripts` | 创建教学环节 |
|
|||
|
|
| GET | `/admin/courses/:id/scripts` | 获取教学环节列表 |
|
|||
|
|
| PUT | `/admin/scripts/:id` | 更新教学环节 |
|
|||
|
|
| DELETE | `/admin/scripts/:id` | 删除教学环节 |
|
|||
|
|
| POST | `/admin/scripts/:id/pages` | 添加逐页配置 |
|
|||
|
|
| PUT | `/admin/script-pages/:id` | 更新逐页配置 |
|
|||
|
|
|
|||
|
|
#### 租户管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/admin/tenants` | 创建租户 |
|
|||
|
|
| GET | `/admin/tenants` | 获取租户列表 |
|
|||
|
|
| GET | `/admin/tenants/:id` | 获取租户详情 |
|
|||
|
|
| PUT | `/admin/tenants/:id` | 更新租户 |
|
|||
|
|
| DELETE | `/admin/tenants/:id` | 删除租户 |
|
|||
|
|
| POST | `/admin/tenants/:id/suspend` | 停用租户 |
|
|||
|
|
| POST | `/admin/tenants/:id/activate` | 启用租户 |
|
|||
|
|
| PUT | `/admin/tenants/:id/package` | 更改套餐 |
|
|||
|
|
| POST | `/admin/tenants/:id/courses` | 授权课程包 |
|
|||
|
|
|
|||
|
|
**创建租户请求示例:**
|
|||
|
|
```json
|
|||
|
|
POST /api/v1/admin/tenants
|
|||
|
|
{
|
|||
|
|
"name": "阳光幼儿园",
|
|||
|
|
"address": "北京市朝阳区xx路xx号",
|
|||
|
|
"contact_person": "张园长",
|
|||
|
|
"contact_phone": "010-12345678",
|
|||
|
|
"package_type": "advanced",
|
|||
|
|
"start_date": "2024-09-01",
|
|||
|
|
"expire_date": "2025-09-01"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.5 学校端API
|
|||
|
|
|
|||
|
|
#### 教师管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/school/teachers` | 新增教师 |
|
|||
|
|
| GET | `/school/teachers` | 获取教师列表 |
|
|||
|
|
| GET | `/school/teachers/:id` | 获取教师详情 |
|
|||
|
|
| PUT | `/school/teachers/:id` | 更新教师信息 |
|
|||
|
|
| POST | `/school/teachers/:id/suspend` | 停用教师 |
|
|||
|
|
| POST | `/school/teachers/:id/activate` | 启用教师 |
|
|||
|
|
| POST | `/school/teachers/:id/reset-password` | 重置密码 |
|
|||
|
|
|
|||
|
|
#### 学生管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/school/students` | 新增学生 |
|
|||
|
|
| GET | `/school/students` | 获取学生列表 |
|
|||
|
|
| GET | `/school/students/:id` | 获取学生详情 |
|
|||
|
|
| PUT | `/school/students/:id` | 更新学生信息 |
|
|||
|
|
| DELETE | `/school/students/:id` | 删除学生 |
|
|||
|
|
| POST | `/school/students/import` | 批量导入学生 |
|
|||
|
|
| GET | `/school/students/:id/growth` | 获取学生成长档案 |
|
|||
|
|
|
|||
|
|
#### 班级管理
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/school/classes` | 新增班级 |
|
|||
|
|
| GET | `/school/classes` | 获取班级列表 |
|
|||
|
|
| PUT | `/school/classes/:id` | 更新班级信息 |
|
|||
|
|
|
|||
|
|
#### 数据统计
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| GET | `/school/stats/overview` | 获取概览数据 |
|
|||
|
|
| GET | `/school/stats/teachers` | 获取教师统计 |
|
|||
|
|
| GET | `/school/stats/courses` | 获取课程统计 |
|
|||
|
|
| GET | `/school/stats/report` | 导出数据报表 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.6 教师端API
|
|||
|
|
|
|||
|
|
#### 课程包
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| GET | `/teacher/courses` | 获取课程包列表(已授权) |
|
|||
|
|
| GET | `/teacher/courses/:id` | 获取课程包详情 |
|
|||
|
|
| GET | `/teacher/courses/:id/preview` | 预览课程包(备课模式) |
|
|||
|
|
| POST | `/teacher/courses/:id/favorite` | 收藏课程包 |
|
|||
|
|
| DELETE | `/teacher/courses/:id/favorite` | 取消收藏 |
|
|||
|
|
| POST | `/teacher/planned-lessons` | 添加到待上清单 |
|
|||
|
|
|
|||
|
|
#### 授课
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/teacher/lessons` | 创建授课计划 |
|
|||
|
|
| GET | `/teacher/lessons` | 获取授课记录列表 |
|
|||
|
|
| GET | `/teacher/lessons/:id` | 获取授课详情 |
|
|||
|
|
| POST | `/teacher/lessons/:id/start` | 开始上课 |
|
|||
|
|
| POST | `/teacher/lessons/:id/complete` | 结束上课 |
|
|||
|
|
|
|||
|
|
#### 反馈
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/teacher/lessons/:id/quick-feedback` | 快速反馈 |
|
|||
|
|
| POST | `/teacher/lessons/:id/detailed-feedback` | 详细反馈 |
|
|||
|
|
| GET | `/teacher/lessons/:id/feedback` | 获取反馈记录 |
|
|||
|
|
|
|||
|
|
#### 学生测评
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| POST | `/teacher/lessons/:id/student-records` | 批量创建学生测评 |
|
|||
|
|
| PUT | `/teacher/student-records/:id` | 更新学生测评 |
|
|||
|
|
|
|||
|
|
#### 班级与学生
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| GET | `/teacher/classes` | 获取我的班级列表 |
|
|||
|
|
| GET | `/teacher/classes/:id/students` | 获取班级学生 |
|
|||
|
|
| GET | `/teacher/students/:id/growth` | 查看学生成长档案 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.7 公共API
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 说明 |
|
|||
|
|
|-----|------|-----|
|
|||
|
|
| GET | `/common/tags` | 获取标签体系 |
|
|||
|
|
| GET | `/common/grades` | 获取年级配置 |
|
|||
|
|
| GET | `/common/upload-url` | 获取文件上传URL |
|
|||
|
|
| GET | `/common/resources/:id/download` | 下载资源 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、接口调用示例
|
|||
|
|
|
|||
|
|
### 3.1 教师端完整流程
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 1. 登录
|
|||
|
|
const loginResponse = await fetch('/api/v1/auth/login', {
|
|||
|
|
method: 'POST',
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
account: 'teacher@school.com',
|
|||
|
|
password: '123456',
|
|||
|
|
role: 'teacher'
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
const { token } = loginResponse.data;
|
|||
|
|
|
|||
|
|
// 2. 获取课程包列表
|
|||
|
|
const coursesResponse = await fetch('/api/v1/teacher/courses?grade=middle', {
|
|||
|
|
headers: { 'Authorization': `Bearer ${token}` }
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 3. 获取课程包详情(备课模式)
|
|||
|
|
const courseDetailResponse = await fetch(`/api/v1/teacher/courses/${courseId}/preview`, {
|
|||
|
|
headers: { 'Authorization': `Bearer ${token}` }
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 4. 创建授课计划
|
|||
|
|
const lessonResponse = await fetch('/api/v1/teacher/lessons', {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: {
|
|||
|
|
'Authorization': `Bearer ${token}`,
|
|||
|
|
'Content-Type': 'application/json'
|
|||
|
|
},
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
course_id: courseId,
|
|||
|
|
class_id: classId,
|
|||
|
|
planned_datetime: '2025-02-05 10:00:00'
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
const lessonId = lessonResponse.data.id;
|
|||
|
|
|
|||
|
|
// 5. 开始上课
|
|||
|
|
await fetch(`/api/v1/teacher/lessons/${lessonId}/start`, {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: { 'Authorization': `Bearer ${token}` }
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 6. 结束上课并快速反馈
|
|||
|
|
await fetch(`/api/v1/teacher/lessons/${lessonId}/complete`, {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: {
|
|||
|
|
'Authorization': `Bearer ${token}`,
|
|||
|
|
'Content-Type': 'application/json'
|
|||
|
|
},
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
overall_rating: 'good',
|
|||
|
|
participation_rating: 'high',
|
|||
|
|
completion_note: 'all_completed'
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 7. 提交详细反馈
|
|||
|
|
await fetch(`/api/v1/teacher/lessons/${lessonId}/detailed-feedback`, {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: {
|
|||
|
|
'Authorization': `Bearer ${token}`,
|
|||
|
|
'Content-Type': 'application/json'
|
|||
|
|
},
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
design_quality: 5,
|
|||
|
|
participation: 5,
|
|||
|
|
goal_achievement: 4,
|
|||
|
|
pros: '课件精美,互动丰富',
|
|||
|
|
suggestions: '共读环节可以延长'
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 8. 提交学生测评记录
|
|||
|
|
await fetch(`/api/v1/teacher/lessons/${lessonId}/student-records`, {
|
|||
|
|
method: 'POST',
|
|||
|
|
headers: {
|
|||
|
|
'Authorization': `Bearer ${token}`,
|
|||
|
|
'Content-Type': 'application/json'
|
|||
|
|
},
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
records: [
|
|||
|
|
{
|
|||
|
|
student_id: 1,
|
|||
|
|
focus: 4,
|
|||
|
|
participation: 5,
|
|||
|
|
interest: 5,
|
|||
|
|
understanding: 4
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
student_id: 2,
|
|||
|
|
focus: 3,
|
|||
|
|
participation: 4,
|
|||
|
|
interest: 4,
|
|||
|
|
understanding: 3
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
})
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、后续优化方向
|
|||
|
|
|
|||
|
|
### 4.1 性能优化
|
|||
|
|
|
|||
|
|
| 优化项 | 说明 |
|
|||
|
|
|-------|------|
|
|||
|
|
| 缓存 | Redis缓存热点数据(课程包、标签等) |
|
|||
|
|
| 分页 | 所有列表接口支持分页 |
|
|||
|
|
| 索引 | 优化查询索引,提升查询效率 |
|
|||
|
|
| CDN | 静态资源(音视频、图片)使用CDN |
|
|||
|
|
|
|||
|
|
### 4.2 安全加固
|
|||
|
|
|
|||
|
|
| 优化项 | 说明 |
|
|||
|
|
|-------|------|
|
|||
|
|
| 数据隔离 | 租户数据完全隔离,防止跨租户访问 |
|
|||
|
|
| 权限控制 | 基于角色的权限控制(RBAC) |
|
|||
|
|
| 审计日志 | 记录关键操作日志 |
|
|||
|
|
| 敏感数据 | 加密存储敏感信息 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、下一步
|
|||
|
|
|
|||
|
|
1. 前端技术栈确认(Vue/React)
|
|||
|
|
2. 后端技术栈确认(Node.js/Java/Go)
|
|||
|
|
3. 数据库选型确认
|
|||
|
|
4. 开发环境搭建
|