课程-章节-课时顺序调整完成

This commit is contained in:
CakeCN
2025-09-03 20:33:23 +08:00
parent a0dd8cd234
commit 9de817d416
8 changed files with 443 additions and 8 deletions

View File

@@ -112,6 +112,49 @@ def delete_material_chapter_lesson(material_id, chapter_name, lesson_name, teach
# 如果删除操作成功res.modified_count 应为 1
return res.modified_count == 1
def reorder_material_structure(material_id, order):
mongo = current_app.extensions["mongo"]
material = mongo.db.materials.find_one({'_id': ObjectId(material_id)})
if not material:
return False
chapter_map = {ch["chapter_name"]: ch for ch in material["chapters"]}
new_chapters = []
for chapter_order in order:
ch_name = chapter_order['chapter_name']
if ch_name not in chapter_map:
continue # 如果前端传了不存在的章节名,可以选择跳过或报错
original_ch = chapter_map[ch_name]
# 建立 lesson_name -> lesson dict
lesson_map = {ls["lesson_name"]: ls for ls in original_ch["lessons"]}
# 按顺序重排 lessons
new_lessons = []
for ls_name in chapter_order['lessons']:
if ls_name in lesson_map:
new_lessons.append(lesson_map[ls_name])
# 如果还有遗漏(前端没传的),可以追加到最后,避免丢数据
for ls_name, ls in lesson_map.items():
if ls not in new_lessons:
new_lessons.append(ls)
# 构造新的 chapter
new_chapter = {**original_ch, "lessons": new_lessons}
new_chapters.append(new_chapter)
# 更新 material
mongo.db.materials.update_one(
{"_id": ObjectId(material_id)},
{
"$set": {
"chapters": new_chapters,
"updated_at": datetime.now()
}
}
)
return True
def save_materials_markdown_cos(
material_id: str,
chapter_name: str,