显示讲师的问题列表

学生界面和讲师界面最大的区别是问题列表,学生显示的是自己发布的问题列表,而讲师界面显示的是讲师发布的问题和讲师需要解答的问题列表。

讲师发布的问题的目的是为学生创建经典问题和答案。
  1. 编写mapper层sql语句
/**
     * 查询与老师有关的问题列表,包含老师发布的问题和请老师解决的问题
     * @param userId 老师的用户ID
     * @return 与老师有关的问题列表
     */
    @Select({"select q.* " +
            "from question as q " +
            "left join user_question as uq on q.id = uq.question_id " +
            "where q.user_id=#{userId} or uq.user_id = #{userId} " +
            "order by q.modifytime desc"})
    public List<Question> findTeachersQuestions(Integer userId);

测试sql语句

@SpringBootTest
@Slf4j
public class QuestionMapperTests {

    @Resource
    QuestionMapper questionMapper;

    @Test
    public void findTeachersQuestions(){
        Integer userId = 11;
        List<Question> questions = questionMapper.findTeachersQuestions(userId);
        questions.forEach(question -> log.debug("{}",question));
    }
}
  1. 业务层代码
/**
     * 查询老师相关问题
     */
    PageInfo<Question> getQuestionsByTeacherName(
            String username, Integer pageNum, Integer pageSize
    );
 @Override
    public PageInfo<Question> getQuestionsByTeacherName(String username, Integer pageNum, Integer pageSize) {

         if (username == null){
             throw ServiceException.notFound("用户名不能为空");
         }
         if (pageNum == null){
             pageNum = 1;
         }
         if (pageSize == null){
             pageSize = 8;
         }
         User user = userMapper.findUserByUsername(username);

         PageHelper.startPage(pageNum,pageSize);
         List<Question> questions = questionMapper.findTeachersQuestions(user.getId());
         //填充标签列表属性tags,从缓存中填充
         for (Question question:questions){
            List<Tag> tags = tagNamesToTags(question.getTagNames());
            question.setTags(tags);
         }
         return new PageInfo<>(questions);
    }

测试

@Test
    public void getQuestionsByTeacherName(){
        PageInfo<Question> pageInfo = questionService.getQuestionsByTeacherName("tc2", 1, 8);
        log.debug("PageInfo{}",pageInfo);
        pageInfo.getList().forEach(question -> log.debug("{}",question));
    }
  1. 编写controller
/**
     * 请求 /v1/questions/teacher 分页返回当前老师有关的问题
     * @AuthenticationPrincipal 从springSecurity中获取当前登录的用户
     * @param user 当前老师
     * @param pageNum 页号
     * @return 一页数据
     */
    @GetMapping("/teacher")
    @PreAuthorize("hasRole('TEACHER')")
    public R<PageInfo<Question>> teachers(
            @AuthenticationPrincipal User user, Integer pageNum){
        if (pageNum == null){
            pageNum = 1;
        }
        Integer pageSize = 8;
        PageInfo<Question> pageInfo = questionService.getQuestionsByTeacherName(user.getUsername(),pageNum,pageSize);
        return R.ok(pageInfo);
    }

老师的前端逻辑和学生的前端前端逻辑一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值