kindergarten_java/docs/design/13-数据模型与API设计.md
2026-02-28 16:41:39 +08:00

31 KiB
Raw Permalink Blame History

数据模型与API设计

⚠️ 本文档已过时

本文档需要按新结构重构。请参考 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租户表

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教师表

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学生表

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班级表

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课程包表

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课程包资源表

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课程脚本表

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逐页配置表

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延伸活动表

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授课记录表

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课程反馈表

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学生测评记录表

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标签体系表

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租户课程授权表

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 通用响应格式

// 成功响应
{
  "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 获取当前用户信息

登录请求示例:

POST /api/v1/auth/login
{
  "account": "teacher@school.com",
  "password": "123456",
  "role": "teacher"
}

登录响应示例:

{
  "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 获取课程包统计数据

创建课程包请求示例:

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 授权课程包

创建租户请求示例:

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 教师端完整流程

// 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. 开发环境搭建