Skip to content

后端技术开发文档v1

模多多教育版 后端技术开发文档 版本:V1.0 日期:2025‑07‑25

文档大纲

  1. 技术栈与工程结构
  2. 环境与依赖配置
  3. 通用接口规范
  4. API 映射总览(前端按钮 ↔ 后端接口 ↔ 数据库字段)
  5. API 详细说明(含示例请求/响应)
  6. 数据库 Schema 说明
  7. 日志与监控
  8. 部署与持续集成

1. 技术栈与工程结构

• 语言:Python 3.11 • 框架:FastAPI(异步),使用 Uvicorn + Gunicorn 运行 • ORM:SQLAlchemy 2.0 + Alembic 迁移 • 数据库:PostgreSQL 15 • 缓存 / 队列:Redis 7(同步令牌扣费、AI 作业队列) • 消息通知:WebSocket(Starlette)、RabbitMQ(可选异步任务) • 第三方:腾讯 TRTC SDK(WebRTC 直播)、OpenAI / Baidu AI API(AI 绘画 / 对话)

工程目录示例: app/ ├── api/ # 路由定义 │ │ ├── auth.py │ │ ├── courses.py │ │ ├── tasks.py │ │ ├── ai.py │ │ └── billing.py ├── core/ # 配置、JWT、依赖 ├── models/ # SQLAlchemy Models ├── schemas/ # Pydantic Schemas ├── services/ # 业务逻辑(AI、直播、计费) ├── db.py └── main.py

2. 环境与依赖配置

• Python 环境:使用 Poetry 或 pipenv 管理依赖。 • 核心依赖:fastapi、uvicorn[standard]、sqlalchemy、psycopg2‑binary、redis, python‑jwt、pydantic。 • AI 依赖:openai、qcloud‑trtc、httpx。

3. 通用接口规范

• RESTful 设计,路径使用复数资源名;所有 JSON 字段采用 snake_case。 • 鉴权:HTTP Header Authorization: Bearer <JWT>。 • 错误响应:统一格式 {"code": <int>, "message": <str>, "detail": <obj>}。 • 分页:查询参数 ?page=1&size=20,响应包含 meta 字段。

4. API 映射总览

#前端页面 / 按钮HTTP后端 EndpointDB 表 / 字段说明
1学生仪表盘加载GET/courses?student_idcourses(id,title,teacher_id)获取学生课程列表
2学生仪表盘加载GET/tasks/todo?student_idtasks(id,title,course_id,due_date)待办任务
3课程卡片点击GET/courses/courses, lessons进入课程学习页面
4任务提交按钮POST/tasks/submitassignment_submissions(score,content_json)保存任务完成状态
5AI 绘画“生成”POST/ai/drawai_sessions(prompt,output_image_url)生成绘画内容并扣费
6AI 绘画“提交”POST/ai/submitai_sessions(is_submitted)标记作品完成
7作品查看页加载GET/works?student_idai_sessions(output_image_url)获取学生作品
8教师仪表盘加载GET/courses?teacher_idcourses获取教师课程
9“创建新课程”按钮POST/coursescourses(title,teacher_id)创建课程
10“保存课程”按钮PUT/courses/{id}/structurecourses.structure_json保存章节任务结构
11“发布课程”按钮POST/courses/{id}/publishcourses.is_published课程发布
12“发布作业”按钮POST/assignmentsassignments(course_id,task_id,class_id)布置作业
13作业批改“发布”POST/submissions/{id}/gradeassignment_submissions(score,teacher_comment)保存评分
14学生“加入课程”POST/enrollmentscourse_enrollments(course_id,user_id)加入课程/班级
15学生“查看进度”GET/progress?course_idcourse_enrollments(progress)查询学习进度
16学生“AI 对话发送”POST/ai/chatai_sessions(input_prompt,output_text)AI 对话
17学生“查看 AI 历史”GET/ai/history?task_idai_sessions查看历史记录
18教师“创建班级”POST/classesclasses(name,teacher_id)创建班级
19教师“导入学生”POST/classes/{id}/students/bulkclass_members(class_id,user_id)批量导入学生
20教师“开始直播”POST/live/start-开始直播课堂
21教师“触发 AI 任务”POST/live/ai/triggertasks(id)同步学生端
22教师“结束直播”POST/live/end-结束直播并归档
23教师“下载作业ZIP”GET/assignments/{id}/downloadassignment_submissions批量下载作业
24教师“评分提交”POST/submissions/{id}/gradeassignment_submissions(score,teacher_comment)批改并评分
25管理员“充值 Tokens”POST/billing/topuptokens(balance)充值余额
26系统“扣费记录”POST/billing/deducttoken_logs后台扣费记录
27用户“查询余额”GET/billing/balancetokens(balance)查询个人余额
28学生“重置密码”POST/auth/reset_passwordusers邮件验证码重置
29教师“上传课件”POST/lessons/{id}/resourceslessons(resource_url)上传 PPT/视频
30平台“内容审查回调”POST/callback/content_check-内容安全结果回调

5. API 详细说明

5.1 获取学生课程列表 (GET /courses)

前端学生仪表盘初始化时调用,返回学生已加入的课程卡片数据。

请求示例

GET /courses?student_id=123 Authorization: Bearer <token>

响应示例

{ "data": [ { "id": 1, "title": "AI 科学趣味课", "progress": 0.45 } ], "meta": { "count": 1} }

数据库映射

SELECT id, title FROM courses JOIN enrollments ON courses.id = enrollments.course_id WHERE enrollments.student_id = :student_id

处理流程

  1. 验证 JWT → 查询 enrollments → 聚合 progress → 返回 JSON

5.2 AI 绘画生成 (POST /ai/draw)

学生在 AI 绘画任务中点击“生成”触发,系统扣除 tokens 并调用第三方 AI 服务。

请求示例

POST /ai/draw { "task_id": 321, "prompt": "组合素材: 狮子+树" }

响应示例

{ "image_url": "https://cdn.example.com/ai/abcdef.png", "tokens_used": 5 }

数据库映射

INSERT INTO ai_sessions (user_id, task_id, input_prompt, output_image_url, tokens_used) UPDATE tokens SET balance = balance - 5 WHERE user_id = :uid

处理流程

  1. 校验 task_id 与权限
  2. 计算 tokens 消耗 → 检查余额
  3. 调用 AI 服务 → 获取图像 URL
  4. 事务插入 ai_sessions 与扣费
  5. 返回图像 URL

6. 数据库 Schema 说明

主要表及字段:users, schools, classes, courses, lessons, tasks, assignments, assignment_submissions, ai_sessions, tokens, token_logs。详细字段见附录 SQL 建表文件。 完整建表脚本文件:moduoduo_schema_v1.sql。 执行方式示例: psql -U \<user\> -d moduoduo -f moduoduo_schema_v1.sql

7. 日志与监控

• 访问日志:Nginx + Loki; • 应用日志:结构化 JSON,推送至 Grafana; • 指标:Prometheus FastAPI Instrumentator,重点监控 AI 调用时延、错误率。

8. 部署与持续集成

• Dockerfile 基于 python:3.11-slim,采用多阶段构建; • CI:GitHub Actions 进行单元测试、黑盒 API 测试; • CD:ArgoCD 部署至 Kubernetes,使用 rollingUpdate 策略。