谷粒学院84——课程章节的后端实现
这里顺便把课程章节增删改查的接口一次写完。EduChapterController.
@PostMapping("/addChapter")
public R addChapter(@RequestBody EduChapter chapter) {
eduChapterService.save(chapter);
return R.ok();
}
@GetMapping("/getChapter")
public R getChapterById(@PathVariable String courseId) {
EduChapter eduChapter= eduChapterService.getById(courseId);
return R.ok().data("chapter", eduChapter);
}
@PostMapping("/updateChapter")
public R updateChapter(@RequestBody EduChapter chapter) {
eduChapterService.updateById(chapter);
return R.ok();
}
@DeleteMapping("/deleteChapter")
public R deleteChapter(@PathVariable String courseId) {
Boolean flag = eduChapterService.removeById(courseId);
if(flag) {
return R.ok();
} else {
return R.error();
}
}
上面的接口看似很好,不过却又一个小小的问题,我们在删除章节的时候,直接调用removeById
方法,这样章节确实被删除了,但是该章节的小节却处于很尴尬的位置:不再属于任何小节(如下图)。这可不行哦。
实际上,在实际开发中,对于类似删除一二级分类中的一级分类的问题,我们需要自己在service层实现删除的业务逻辑。通常我们会有两种实现逻辑:
- 删除章节时下面的小节会一起被删除了
- 如果存在小节,则不允许删除章节,必须等小节被删除后再删除章节
下面实现第二种逻辑。
再controller改改调用的service方法名。
EduChapterServiceImpl实现方法
@Override
public Boolean deleteChapter(String courseId) {
QueryWrapper<EduVideo> wrapper = new QueryWrapper<>();
wrapper.eq("course_id", courseId);
// 只需要判断是不是有video,而不需要真的要获取video
int count = eduVideoService.count(wrapper);
if(count > 1) {
throw new GuliException(20001, "不能删除");
} else {
int delete = baseMapper.deleteById(courseId);
return delete > 0;
}
}
java全栈日日学 文章被收录于专栏
java全栈每日必学,不要高估自己一年能做的事,不要低估自己十年能做的事