一 展示頁面
二 判斷是否收藏
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;
}