# 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//chapters//lessons/', 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////', 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////', 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