1.app端评论-发表评论

  • 根据文章id发表评论,输入内容发表评论,评论内容不能超过140字,评论内容需要做文本垃圾检测
  • 实现思路: 用户评论需要获取用户信息,用Feign远程查询用户信息(用户名称,用户头像等)

    1. 1. 校验参数
    2. 1. 校验是否登录
    3. 1. 校验文章id 校验内容不为空 校验内容长度不能大于140个字符 (validated校验)
    4. 2. 阿里云校验评论内容是否违规
    5. 1. (简单: 此步不做 普通: 阿里云检测有问题提示 高级: 有问题不报异常,替换为**)
    6. 3. 远程查询当前登陆用户信息
    1. private String handleText(String content) {
    2. String words = "";
    3. try {
    4. Map map = greenTextScan.greenTextScan(content);
    5. String suggestion = (String) map.get("suggestion");
    6. switch (suggestion){
    7. case "block":
    8. words = (String) map.get("filteredContent");
    9. break;
    10. }
    11. } catch (Exception e) {
    12. e.printStackTrace();
    13. }
    14. return words;
    15. }
    1. 4. 创建评论信息,并保存到mongo

    2.app端评论-点赞评论

  • 用户点赞,可以增加点赞数量,点赞后不仅仅要增加点赞数,需要记录当前用户对于当前评论的数据记录 用户取消点赞,点赞减一,更新点赞数据

  • 实现思路:

    1. 1. 参数校验
    2. 1. 评论id不能为空 operation必须为 0 1
    3. 2. 根据评论id查询评论数据, 为返回错误信息
    4. 2. 如果是点赞操作 判断是否已经点赞
    5. 1. 点过赞提示 请勿重复点赞
    6. 1. 未点过赞 保存点赞信息到mongo
    7. 1. 并修改评论信息的点赞数量( + 1)
    8. 4. 如果是取消点赞操作
    9. 1. 删除点赞信息
    10. 1. 并修改评论信息的点赞数量( - 1) , 要判断下别减成负数
    11. 5. 返回结果时,需要返回点赞点赞数量 返回的key要求必须是: likes

    3.app端评论-评论列表

  • 查询评论列表,根据当前文章id进行检索,按照创建时间倒序,分页查询(默认10条数据)

  • 实现思路:
    1. 1. 参数校验
    2. 1. 校验文章id
    3. 1. 校验size
    4. 2. 根据条件查询评论列表
    5. 1. (文章id , 创建时间 小于最小时间 , 截取size条记录 , 创建时间降序)
    6. 3. 判断当前用户是否登录
    7. 3. 如果未登录直接返回评论列表
    8. 3. 如果登录了 需要检查在当前评论列表中 哪些评论登陆人点赞过

(将所有ApComment 转成 ApCommentVO , 点过赞的operation设置为0)

  1. 1. 根据当前列表中评论id 登录人id 查询评论点赞表,得到点赞数据
  2. 1. commentId in 评论id列表 authorId = 登录人id
  3. 2. 遍历评论列表
  4. 1. 将每一个评论 ApComment 转成 ApCommentVO
  5. 1. 其中 如果当前评论id在点赞记录中存在 设置operation字段为0 不存在不用做任何处理

4.app端评论回复-发表回复、点赞回复、回复列表

  • 整体思路与评论相同,无特殊处理

    5.热点评论(难)

  • 如果某一条评论点赞数超过10就可以把它作为热点评论
  • 一个文章最多有5条热点评论
  • 热点评论需要按照点赞数倒序排序,非热点评论按照评论时间倒序
    • 所用技术亮点: 使用全局线程池,异步执行热点评论的处理方法
    • 整体实现思路: 大前提有两个方法需要修改: 点赞方法和查询列表方法
      • 修改点赞方法,如果当前点赞数超过10,则需要计算是否是热点评论
        1. 查询当前文章下的所有热点评论集合
          1. 1.1 按照文章id flag=1(热点文章) 点赞降序
        2. 如果 热评集合为空 或 热评数量小于5 直接将当前评论改为热评
        3. 如果热评数量大于等于 5
          1. 获取热评集合中 最后点赞数量最少的热评
          2. 和当前评论点赞数量做对比 谁的点赞数量多 改为热评
      • 修改查询评论列表方法
        1. 判断当前是否是第一页评论,如果是则:
          1. 先查询热点评论集合 (最多5条) (条件: flag=1, 文章id, 点赞降序)
          2. 新size = size - 热评数量
          3. 查询第一页剩余普通评论 (条件: 文章id, flag=0, 时间降序, limit:新size)
          4. 合并 热点评论 普通评论 热点list.addAll(普通list)
        2. 不是第一页直接查询普通评论
          1. (条件: 文章id,flag=0,createdTime小于最小时间,时间降序,limit:size)