教师教材编辑页面

This commit is contained in:
CakeCN
2025-08-31 00:30:53 +08:00
parent 06e2e69b44
commit b18c981367
10 changed files with 573 additions and 38 deletions

View File

@@ -0,0 +1,41 @@
# views/lesson.py
from flask import Blueprint, jsonify, request, render_template, session, current_app
from bson import ObjectId
from datetime import datetime
from ..auth.decorators import require_role
from ..services.course_service import load_material
bp = Blueprint('lesson', __name__)
# 返回课时元信息(含三份 markdown 的可访问链接或直接内容)
@bp.route('/api/materials/<material_id>/chapters/<chapter_name>/lessons/<lesson_name>', methods=['GET'])
@require_role(roles="teacher")
def edit_lesson_detail(material_id, chapter_name, lesson_name):
teacher_uuid = session.get("user_uuid")
teacher_id = current_app.extensions["uuid2username"][teacher_uuid]
material = load_material(material_id)
for chapter in material.chapters:
if chapter.chapter_name == chapter_name:
for lesson in chapter.lessons:
if lesson.lesson_name == lesson_name:
return render_template('lesson.html', lesson=lesson.model_dump(), role="teacher", material=material.model_dump())
return jsonify({"message": "课时不存在"}), 404
# 返回某份 markdown 文件内容(你也可以直接返回 S3/OSS 的直链)
@bp.route('/api/lesson_file/<material_id>/<chapter_name>/<lesson_name>/<filename>', methods=['GET'])
def get_markdown_file(material_id, chapter_name, lesson_name, filename):
# TODO: 真实环境从存储读取
demo_map = {
"lesson.md": "# 主题\n## 阶段一\n### 步骤A\n内容A...\n### 步骤B\n内容B...\n",
"prompt.md": "# 主题\n## 阶段一\n### 步骤A\n提示A...\n### 步骤B\n提示B...\n",
"score_prompt.md": "# 主题\n## 阶段一\n### 步骤A\n评分A...\n### 步骤B\n评分B...\n"
}
return demo_map.get(filename, ""), 200
# 保存(更新)某一份 markdown前端会把编辑后的文本整体传回
@bp.route('/api/lesson_file/<material_id>/<chapter_name>/<lesson_name>/<filename>', methods=['PUT'])
def save_markdown_file(material_id, chapter_name, lesson_name, filename):
text = request.get_data(as_text=True)
# TODO: 写入存储,并做版本/审计
# 返回更新时间等
return jsonify({"saved": True, "updated_at": datetime.utcnow().isoformat()}), 200