评论相关接口(练习)
评论相关接口有四个:
-
新增回答或评论
-
分页查询回答或评论
-
管理端分页查询回答或评论
-
管理端隐藏或显示回答或评论
新增回答或评论(练习)
设计思路
注意
回复本身只有一个简单属性:
-
回复内容
一个功能属性:
-
是否匿名
一个关联属性:
-
问题id:回答要关联某个问题
如果是针对某个回答发表的评论,则有新的关联属性:
-
回答id:评论是在哪个回答下面的
-
目标评论id:当前评论是针对哪一条评论的
-
目标用户id:当前评论是针对哪一个用户的
我分析理解的是
如果是针对某个回答发表的评论,则有新的关联属性:
-
回答id:评论是在哪个回答下面的,就是图中小明第一条回复“回答内容回答内容"对应的id
-
目标评论id:当前评论是针对哪一条评论的,就是就是图中小明评论“说的不对"对应的评论id
-
目标用户id:当前评论是针对哪一个用户的,就是图中小明评论“说的不对"对应的小明用户id
这个业务代码其实不难,我觉得困难的地方是对评论那三个传入参数的理解和处理
处理思路和框图一致,如果是回复,需要对问题表里面的问题信息先进行修改(最后一次回答的用户和时间)
如果是评论,需要对评论表里面的评论次数进行修改
不管是回复还是评论,都需要根据学生身份修改问题表格里面问题的状态
但是这里有一个疑惑的地方,就是评论下面的评论计算次数时,这个还用加到回复的评论次数里面吗?我感觉是需要的,所以我是计算次数时是嵌套的形式
@Override
@Transactional
public void saveReply(ReplyDTO replyDTO) {
//1.获取当前用户信息
Long userId= UserContext.getUser();
//2.- 对question表的操作
// 2.1.根据id查询数据
InteractionQuestion question =interactionQuestionMapper.selectById(replyDTO.getQuestionId());
// 2.2.数据校验
if(question == null || question.getHidden()){
// 没有数据或者是被隐藏了
return ;
}
if(replyDTO.getAnswerId()==0&&replyDTO.getTargetReplyId()==0){
//2.3.如果是回答,需要在interaction_question中记录最新一次回答的id和回复次数
question.setLatestAnswerId(userId);
question.setAnswerTimes(question.getAnswerTimes()+1);
}
//- 2.4.判断提交评论的用户是否是学生,如果是标记问题状态为未查看
if(replyDTO.getIsStudent()==true){
question.setStatus(QuestionStatus.UN_CHECK);
}
// 2.5.更新问题
question.setUpdateTime(LocalDateTime.now());
interactionQuestionMapper.updateById(question);
//3.向reply表进行操作
// 3.1.数据转换
InteractionReply reply = BeanUtils.toBean(replyDTO, InteractionReply.class);
// 3.2.补充数据
reply.setUserId(userId);
reply.setCreateTime(LocalDateTime.now());
reply.setUpdateTime(LocalDateTime.now());
if(replyDTO.getAnswerId()!=0){
//3.3 如果是评论ÿ