课程-章节-课时顺序调整完成
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user