删除课程前后端实现

161 篇文章 16 订阅

一 后端实现

1 控制器

/**
* 功能描述:根据ID删除课程
*
* @author cakin
* @date 2020/12/6
* @param id 课程id
* @return R 返回给前端的数据
*/
@ApiOperation("根据ID删除课程")
@DeleteMapping("remove/{id}")
public R removeById(@ApiParam(value = "课程id", required = true) @PathVariable String id) {
    // TODO: 删除课程视频
    // 此处调用vod中的删除视频文件的接口
    //删除课程封面
    courseService.removeCoverById(id);
    // 删除课程
    boolean result = courseService.removeCourseById(id);
    if (result) {
        return R.ok().message("删除成功");
    } else {
        return R.error().message("数据不存在");
    }
}

2 service层

接口

/**
* 功能描述:删除课程封面
*
* @author cakin
* @date 2020/12/6
* @param id 课程id
* @return boolean 是否删除成功
*/
boolean removeCoverById(String id);


/**
* 功能描述:删除课程
*
* @author cakin
* @date 2020/12/6
* @param id 课程id
* @return boolean 是否删除成功
*/
boolean removeCourseById(String id);

实现

/**
* 功能描述:删除课程封面
*
* @param id 课程id
* @return boolean 是否删除成功
* @author cakin
* @date 2020/12/6
*/
@Override
public boolean removeCoverById(String id) {
    // 根据id获取课程 Cover 的 url
    Course course = baseMapper.selectById(id);
    if (course != null) {
        String cover = course.getCover();
        if (!StringUtils.isEmpty(cover)) {
            R r = ossFileService.removeFile(cover);
            return r.getSuccess();
        }
    }
    return false;
}


/**
* 功能描述:删除课程
*
* @param id 课程id
* @return boolean 是否删除成功
* 数据库中外键约束的设置:
* 互联网分布式项目中不允许使用外键与级联更新,一切涉及级联的操作不要依赖数据库层,要在业务层解决
* 如果业务层解决级联删除功能
* 那么先删除子表数据,再删除父表数据
* @author cakin
* @date 2020/12/6
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeCourseById(String id) {
    // 根据 courseId 删除 Video(课时)
    QueryWrapper<Video> videoQueryWrapper = new QueryWrapper<>();
    videoQueryWrapper.eq("course_id", id);
    videoMapper.delete(videoQueryWrapper);
    // 根据 courseId 删除 Chapter(章节)
    QueryWrapper<Chapter> chapterQueryWrapper = new QueryWrapper<>();
    chapterQueryWrapper.eq("course_id", id);
    chapterMapper.delete(chapterQueryWrapper);
    // 根据 courseId 删除 Comment(评论)
    QueryWrapper<Comment> commentQueryWrapper = new QueryWrapper<>();
    commentQueryWrapper.eq("course_id", id);
    commentMapper.delete(commentQueryWrapper);
    // 根据 courseId 删除 CourseCollect(课程收藏)
    QueryWrapper<CourseCollect> courseCollectQueryWrapper = new QueryWrapper<>();
    courseCollectQueryWrapper.eq("course_id", id);
    courseCollectMapper.delete(courseCollectQueryWrapper);
    // 根据 courseId 删除 CourseDescription(课程详情)
    courseDescriptionMapper.deleteById(id);
    // 删除课程
    return this.removeById(id);
}

二 前端实现

1 定义API

  // 根据id删除课程
  removeById(id) {
    return request({
      url: `/admin/edu/course/remove/${id}`,
      method: 'delete'
    })
  },

2 修改删除按钮

<el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(scope.row.id)">删除</el-button>

3 编写删除方法

    // 根据id删除数据
    removeById(id) {
      this.$confirm('此操作将永久删除该课程,以及该课程下的章节和视频,是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        return courseApi.removeById(id)
      }).then(response => {
        this.fetchData()
        this.$message.success(response.message)
      }).catch((response) => { // 失败
        if (response === 'cancel') {
          this.$message.info('取消删除')
        }
      })
    }

三 测试

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值