文章目录
-
- 概要
- 整体架构流程
- 技术细节
- 小结
概要
这是一个微服务内部接口,当用户学习课程时,可能需要播放课程视频。此时提供视频播放功能的媒资系统就需要校验用户是否有播放视频的资格
。所以,开发媒资服务(tj-media
)的同事就请你提供这样一个接口。
需求分析以及接口设计
业务分析
用户要想有播放视频的资格,那就必须满足两个条件:
-
用户课表中是否有该课程
-
课程状态是否是有效的状态(未过期)
所以这个接口很简单,就是查询用户课表,做一个非空和状态的判断即可。
接口信息如下:
接口说明 | 根据课程id,检查当前用户的课表中是否有该课程,课程状态是否有效。 |
请求方式 | Http请求,GET |
请求路径 | /ls/lessons/{courseId}/valid |
请求参数格式 | 课程id,请求路径占位符,参数名:courseId |
返回值格式 | 课表lessonId,如果是报名了则返回lessonId,否则返回空 |
技术细节
1.Controller层:
@ApiOperation("校验当前用户是否可以学习当前课程")@GetMapping("/{courseId}/valid")public Long isLessonValid(@PathVariable("courseId") Long courseId){return iLearningLessonService.isLessonValid(courseId);}
2.Service层:
public Long isLessonValid(Long courseId) {//1.获取userIdLong userId = UserContext.getUser();//2.判断用户课表中是否有该课程LearningLesson lesson = this.lambdaQuery().eq(LearningLesson::getUserId, userId).eq(LearningLesson::getCourseId, courseId).one();/*if (lesson == null){throw new BizIllegalException("用户无该课程");}*///3.判断该课程过期时间LocalDateTime expireTime = lesson.getExpireTime();Duration duration = Duration.between(LocalDateTime.now(), expireTime);Long time = duration.getSeconds();if (time < 0){throw new BizIllegalException("该课程已过期");}return lesson.getId();}
3.Mapper层