1.app端评论-发表评论
- 根据文章id发表评论,输入内容发表评论,评论内容不能超过140字,评论内容需要做文本垃圾检测
实现思路: 用户评论需要获取用户信息,用Feign远程查询用户信息(用户名称,用户头像等)
1. 校验参数
1. 校验是否登录
1. 校验文章id 校验内容不为空 校验内容长度不能大于140个字符 (validated校验)
2. 阿里云校验评论内容是否违规
1. (简单: 此步不做 普通: 阿里云检测有问题提示 高级: 有问题不报异常,替换为**)
3. 远程查询当前登陆用户信息
private String handleText(String content) {
String words = "";
try {
Map map = greenTextScan.greenTextScan(content);
String suggestion = (String) map.get("suggestion");
switch (suggestion){
case "block":
words = (String) map.get("filteredContent");
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return words;
}
4. 创建评论信息,并保存到mongo
2.app端评论-点赞评论
用户点赞,可以增加点赞数量,点赞后不仅仅要增加点赞数,需要记录当前用户对于当前评论的数据记录 用户取消点赞,点赞减一,更新点赞数据
实现思路:
1. 参数校验
1. 评论id不能为空 operation必须为 0 或 1
2. 根据评论id查询评论数据, 为返回错误信息
2. 如果是点赞操作 判断是否已经点赞
1. 点过赞提示 请勿重复点赞
1. 未点过赞 保存点赞信息到mongo
1. 并修改评论信息的点赞数量( + 1)
4. 如果是取消点赞操作
1. 删除点赞信息
1. 并修改评论信息的点赞数量( - 1) , 要判断下别减成负数
5. 返回结果时,需要返回点赞点赞数量 返回的key要求必须是: likes
3.app端评论-评论列表
查询评论列表,根据当前文章id进行检索,按照创建时间倒序,分页查询(默认10条数据)
- 实现思路:
1. 参数校验
1. 校验文章id
1. 校验size
2. 根据条件查询评论列表
1. (文章id , 创建时间 小于最小时间 , 截取size条记录 , 创建时间降序)
3. 判断当前用户是否登录
3. 如果未登录直接返回评论列表
3. 如果登录了 需要检查在当前评论列表中 哪些评论登陆人点赞过
(将所有ApComment 转成 ApCommentVO , 点过赞的operation设置为0)
1. 根据当前列表中评论id 和 登录人id 查询评论点赞表,得到点赞数据
1. commentId in 评论id列表 authorId = 登录人id
2. 遍历评论列表
1. 将每一个评论 ApComment 转成 ApCommentVO
1. 其中 如果当前评论id在点赞记录中存在 设置operation字段为0 不存在不用做任何处理
4.app端评论回复-发表回复、点赞回复、回复列表
- 如果某一条评论点赞数超过10就可以把它作为热点评论
- 一个文章最多有5条热点评论
- 热点评论需要按照点赞数倒序排序,非热点评论按照评论时间倒序
- 所用技术亮点: 使用全局线程池,异步执行热点评论的处理方法
- 整体实现思路: 大前提有两个方法需要修改: 点赞方法和查询列表方法
- 修改点赞方法,如果当前点赞数超过10,则需要计算是否是热点评论
- 查询当前文章下的所有热点评论集合
- 1.1 按照文章id flag=1(热点文章) 点赞降序
- 如果 热评集合为空 或 热评数量小于5 直接将当前评论改为热评
- 如果热评数量大于等于 5
- 获取热评集合中 最后点赞数量最少的热评
- 和当前评论点赞数量做对比 谁的点赞数量多 改为热评
- 查询当前文章下的所有热点评论集合
- 修改查询评论列表方法
- 判断当前是否是第一页评论,如果是则:
- 先查询热点评论集合 (最多5条) (条件: flag=1, 文章id, 点赞降序)
- 新size = size - 热评数量
- 查询第一页剩余普通评论 (条件: 文章id, flag=0, 时间降序, limit:新size)
- 合并 热点评论 普通评论 热点list.addAll(普通list)
- 不是第一页直接查询普通评论
- (条件: 文章id,flag=0,createdTime小于最小时间,时间降序,limit:size)
- 判断当前是否是第一页评论,如果是则:
- 修改点赞方法,如果当前点赞数超过10,则需要计算是否是热点评论