from flask import Blueprint, request, jsonify, current_app, session, render_template, session from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson, delete_material_chapter_lesson, reorder_material_structure from ..auth.decorators import require_role from ..services.cos_service import upload_file bp = Blueprint('material', __name__) @bp.get("/teacherboard") @require_role(roles="teacher") def teacherboard(): teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] return render_template("teacherboard.html",role="teacher", materials=get_materials_by_teacher_dict(teacher_id)) @bp.route('/teacher/upload_image', methods=['POST']) @require_role(roles="teacher") def upload_image(): teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] file = request.files.get('file') if not file: return jsonify({"message": "未上传文件"}), 400 image_url = upload_file(file, teacher_id + '_' + file.filename) return jsonify({"message": "图片上传成功", "image_url": image_url}), 200 @bp.route('/create_material', methods=['POST']) @require_role(roles="teacher") def create_new_material(): data = request.get_json() teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] image_url = data.get('image_url',None) material_name = data.get('material_name',None) description = data.get('description','') chapters = data.get('chapters',[]) # 如果从其他课程为例进一步修改,则非空 if material_name is None: return jsonify({"message": "教材名称不能为空"}), 400 material_id = create_material(teacher_id, material_name, description, chapters, image_url) return jsonify({"message": "教材创建成功", "material_id": material_id}), 201 @bp.route('/materials/', methods=['GET']) @require_role(roles="teacher") def get_material(material_id): if material_id is None: return jsonify({"message": "教材名称不能为空"}), 400 material = load_material(material_id) print(material) return jsonify( material.model_dump()), 200 @bp.route('/materials/', methods=['PUT']) @require_role(roles="teacher") def update_existing_material(material_id): data = request.get_json() chapters = data.get('chapters') if update_material(material_id, chapters): return jsonify({"message": "教材更新成功"}), 200 return jsonify({"message": "教材未找到"}), 404 @bp.route('/materials/addchapter/', methods=['POST']) @require_role(roles="teacher") def add_chapter(material_id): data = request.get_json() chapter_name = data.get('chapter_name') teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] if add_material_chapter(material_id, chapter_name, teacher_id): return jsonify({"message": "章节添加成功"}), 200 return jsonify({"message": "章节添加失败"}), 404 @bp.route('/materials/addlesson/', methods=['POST']) @require_role(roles="teacher") def add_lesson(material_id): data = request.get_json() chapter_name = data.get('chapter_name') lesson_name = data.get('lesson_name') teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] if add_material_chapter_lesson(material_id, chapter_name, lesson_name, teacher_id): return jsonify({"message": "课时添加成功"}), 200 return jsonify({"message": "课时添加失败"}), 404 @bp.route('/materials/deletelesson/', methods=['DELETE']) @require_role(roles="teacher") def delete_lesson(material_id): data = request.get_json() chapter_name = data.get('chapter_name') lesson_name = data.get('lesson_name') teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] if delete_material_chapter_lesson(material_id, chapter_name, lesson_name, teacher_id): return jsonify({"message": "课时删除成功"}), 200 return jsonify({"message": "课时删除失败"}), 404 @bp.route('/materials/structure/reorder/', methods=['POST']) @require_role(roles="teacher") def reorder_material(material_id): data = request.get_json() order = data.get('order') if reorder_material_structure(material_id, order): return jsonify({"message": "教材顺序更新成功"}), 200 return jsonify({"message": "教材顺序更新失败"}), 404 @bp.route('/teacher/materials', methods=['GET']) @require_role(roles="teacher") def get_materials_by_teacher_view(): teacher_uuid = session.get("user_uuid") teacher_id = current_app.extensions["uuid2username"][teacher_uuid] materials = get_materials_by_teacher(teacher_id) result = [] for material in materials: result.append({ '_id': str(material._id), 'name': material.name, 'description': material.description, 'created_at': material.created_at, 'updated_at': material.updated_at, #'chapters': material.chapters, 'image_url': material.image_url }) return jsonify(result), 200