我的收藏後端實現

一 展示頁面

二 判斷是否收藏

1 web層

@CrossOrigin
@RestController
@RequestMapping("/api/edu/course-collect")
@Slf4j
public class ApiCourseCollectController {
    @Autowired
    private CourseCollectService courseCollectService;

    @ApiOperation(value = "判斷是否收藏")
    @GetMapping("auth/is-collect/{courseId}")
    public R isCollect(
            @ApiParam(name = "courseId", value = "課程id", required = true)
            @PathVariable String courseId,
            HttpServletRequest request) {
        JwtInfo jwtInfo = JwtUtils.getMemberIdByJwtToken(request);
        boolean isCollect = courseCollectService.isCollect(courseId, jwtInfo.getId());
        return R.ok().data("isCollect", isCollect);
    }
}

2 Service層

接口

boolean isCollect(String courseId, String memberId);

實現

/**
* 判斷用戶是否收藏
*/
@Override
public boolean isCollect(String courseId, String memberId) {
    QueryWrapper<CourseCollect> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("course_id", courseId).eq("member_id", memberId);
    Integer count = baseMapper.selectCount(queryWrapper);
    return count > 0;
}

三 收藏課程

1 web 層

@ApiOperation(value = "收藏課程")
@PostMapping("auth/save/{courseId}")
public R save(
        @ApiParam(name = "courseId", value = "課程id", required = true)
        @PathVariable String courseId,
        HttpServletRequest request) {
    JwtInfo jwtInfo = JwtUtils.getMemberIdByJwtToken(request);
    courseCollectService.saveCourseCollect(courseId, jwtInfo.getId());
    return R.ok();
}

2 service層

接口

void saveCourseCollect(String courseId, String memberId);

實現

@Override
public void saveCourseCollect(String courseId, String memberId) {
    // 未收藏則收藏
    if (!this.isCollect(courseId, memberId)) {
        CourseCollect courseCollect = new CourseCollect();
        courseCollect.setCourseId(courseId);
        courseCollect.setMemberId(memberId);
        this.save(courseCollect);
    }
}

四 獲取課程收藏列表

1 定義vo

@Data
public class CourseCollectVo implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String courseId; // 課程id
    private String title; // 標題
    private BigDecimal price; // 價格
    private Integer lessonNum; // 課時數
    private String cover; // 封面
    private String gmtCreate; // 收藏時間
    private String teacherName; // 講師
}

2 web層

@ApiOperation(value = "獲取課程收藏列表")
@GetMapping("auth/list")
public R collectList(HttpServletRequest request) {
    JwtInfo jwtInfo = JwtUtils.getMemberIdByJwtToken(request);
    List<CourseCollectVo> list = courseCollectService.selectListByMemberId(jwtInfo.getId());
    return R.ok().data("items", list);
}

3 service層

接口

List<CourseCollectVo> selectListByMemberId(String memberId);

實現

@Override
public List<CourseCollectVo> selectListByMemberId(String memberId) {
    return baseMapper.selectPageByMemberId(memberId);
}

4 mapper層

接口

List<CourseCollectVo> selectPageByMemberId(String memberId);

實現

<mapper namespace="com.atguigu.guli.service.edu.mapper.CourseCollectMapper">
    <select id="selectPageByMemberId" resultType="com.atguigu.guli.service.edu.entity.vo.CourseCollectVo">
        select
        cl.id,
        cl.gmt_create as gmtCreate,
        c.id as courseId,
        c.title,
        c.cover,
        CONVERT(c.price, DECIMAL(8,2)) AS price,
        c.lesson_num as lessonNum,
        t.name as teacherName
        from edu_course_collect cl
        left join edu_course c on c.id = cl.course_id
        left join edu_teacher t on t.id = c.teacher_id
        where member_id = #{memberId}
        order by cl.gmt_create desc
    </select>
</mapper>

五 取消收藏

1 web層

@ApiOperation(value = "取消收藏課程")
@DeleteMapping("auth/remove/{courseId}")
public R remove(
        @ApiParam(name = "courseId", value = "課程id", required = true)
        @PathVariable String courseId,
        HttpServletRequest request) {
    JwtInfo jwtInfo = JwtUtils.getMemberIdByJwtToken(request);
    boolean result = courseCollectService.removeCourseCollect(courseId, jwtInfo.getId());
    if (result) {
        return R.ok().message("已取消");
    } else {
        return R.error().message("取消失敗");
    }
}

2 service層

接口

boolean removeCourseCollect(String courseId, String memberId);

實現

@Override
public boolean removeCourseCollect(String courseId, String memberId) {
    // 已收藏則刪除
    if (this.isCollect(courseId, memberId)) {
        QueryWrapper<CourseCollect> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("course_id", courseId).eq("member_id", memberId);
        return this.remove(queryWrapper);
    }
    return false;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章