101 lines
4.3 KiB
Python
101 lines
4.3 KiB
Python
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
|
|
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/<material_id>', 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/<material_id>', 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/<material_id>', 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/<material_id>', 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('/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
|
|
|