学生端选课进课闭环

This commit is contained in:
CakeCN
2025-09-06 21:27:28 +08:00
parent a0d154b434
commit 6883a999e9
24 changed files with 634 additions and 217 deletions

View File

@@ -10,21 +10,43 @@ from ..services.cos_service import upload_file, delete_file
from ..models.material import Material
# 假设你已有这两个 loader
from db.course import load_course_from_json
def load_course(course_id: str):
return load_course_from_json(
course_id, course_data_dir=current_app.config["COURSE_DATA_DIR"]
)
def get_new_edit_materials(num: int)->List[Material]:
mongo = current_app.extensions["mongo"]
materials = mongo.db.materials.find().sort("updated_at", -1).limit(num)
returnCode = []
for material in materials:
returnCode.append(Material(**material))
returnCode[-1]._id = str(material['_id'])
return returnCode
def user_selected_course(user_obj):
briefs = []
for cid in getattr(user_obj, "select_course", []):
course_obj = load_material(cid)
brief={}
brief["_id"] = cid
brief["name"] = course_obj.name
brief["description"] = course_obj.description
brief["image_url"] = course_obj.image_url
brief["created_at"] = course_obj.created_at.strftime("%Y-%m-%d %H:%M:%S")
brief["updated_at"] = course_obj.updated_at.strftime("%Y-%m-%d %H:%M:%S")
brief["chapters"] = [chapter.model_dump() for chapter in course_obj.chapters]
briefs.append(brief)
return briefs
def user_selected_course_briefs(user_obj):
"""根据用户对象的选课列表,拼装课程简要信息数组"""
course_list = current_app.extensions["course_list"]
briefs = []
for cid in getattr(user_obj, "select_course", []):
course_obj = load_course(cid)
brief = course_list.get_course_brief_info(cid, course_obj)
course_obj = load_material(cid)
brief={}
brief["_id"] = cid
brief["name"] = course_obj.name
brief["description"] = course_obj.description
brief["image_url"] = course_obj.image_url
brief["created_at"] = course_obj.created_at.strftime("%Y-%m-%d %H:%M:%S")
brief["updated_at"] = course_obj.updated_at.strftime("%Y-%m-%d %H:%M:%S")
briefs.append(brief)
return briefs
@@ -45,6 +67,7 @@ def create_material(teacher_id, material_name, description, chapters, image_url)
def load_material(material_id):
mongo = current_app.extensions["mongo"]
material = mongo.db.materials.find_one({"_id": ObjectId(material_id)})
material['_id'] = material_id
return Material(**material)
def update_material(material_id, chapters):