Files
hsa/Html/apps/views/lessons.py
2025-08-31 00:30:53 +08:00

42 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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