谷粒学院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方法,这样章节确实被删除了,但是该章节的小节却处于很尴尬的位置:不再属于任何小节(如下图)。这可不行哦。

image-20220102191700520

实际上,在实际开发中,对于类似删除一二级分类中的一级分类的问题,我们需要自己在service层实现删除的业务逻辑。通常我们会有两种实现逻辑:

  • 删除章节时下面的小节会一起被删除了
  • 如果存在小节,则不允许删除章节,必须等小节被删除后再删除章节

下面实现第二种逻辑。

再controller改改调用的service方法名。

image-20220102194639649

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全栈每日必学,不要高估自己一年能做的事,不要低估自己十年能做的事

全部评论

相关推荐

点赞 评论 收藏
分享
神哥不得了:神哥来啦~1.建议不要包装,很容易问穿2.没日常也能找到暑期3.简历模板换一下,字体和版式看着好难受,而且最好压缩到一页,技术的倒数第2和3重复啦,项目建议换两个高质量的上去,如果时间够的话,八股就把高频top50的题目多巩固几遍,吃透,注意不要找假高频,这样绝对能找到暑期
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务