• 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)


    项目持续更新中:

    仿抖音短视频APP专栏

    目录

    保存系统消息到MongoDB

    系统消息入库保存-关注

    系统消息入库保存-点赞短视频

    系统消息入库保存-评论与回复


    保存系统消息到MongoDB

    我们把mongoDB整合到Springboot之后,我们需要把映射层面做好。

    首先在model创建一个新的对象层面,也就是一个新的包:

    我们这里简写为mo

     随后创建一个class,与我们当前业务对象保持一致:

    1. package com.imooc.mo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. import lombok.ToString;
    6. import org.springframework.data.annotation.Id;
    7. import org.springframework.data.mongodb.core.mapping.Document;
    8. import org.springframework.data.mongodb.core.mapping.Field;
    9. import java.util.Date;
    10. import java.util.Map;
    11. @Data
    12. @AllArgsConstructor
    13. @NoArgsConstructor
    14. @ToString
    15. @Document("message")
    16. public class MessageMO {
    17. @Id
    18. private String id;//消息主键id
    19. @Field("fromUserId")
    20. private String fromUserId;//消息来自的用户id
    21. @Field("fromNickId")
    22. private String fromNickId;//消息来自的用户昵称
    23. @Field("fromFace")
    24. private String fromFace;//消息来自的用户头像
    25. @Field("toUserId")
    26. private String toUserId;//消息来自的用户id
    27. @Field("msgType")
    28. private Integer msgType;//消息类型 枚举
    29. @Field("msgContent")
    30. private Map msgContent;//消息内容
    31. @Field("createTime")
    32. private Date createTime;//消息创建时间
    33. }

    有了对象之后,就要争对对象进行操作,也就是我们的业务层:

     接着就要实现:

     我们以前使用的通用的mapper,在这里我们要和mongoDB做交互,我们这里使用的repository也是需要接口去构建的,我们在数据层中新建一个包,再添加一个:

    我们可以把MessageRepository当成一个通用Mapper,因为它集成了很多的方法

    1. import com.imooc.pojo.Users;
    2. import com.imooc.repository.MessageRepository;
    3. import com.imooc.service.MsgService;
    4. import com.imooc.service.UserService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.Date;
    8. import java.util.Map;
    9. @Service
    10. public class MsgServiceImpl implements MsgService {
    11. @Autowired
    12. private MessageRepository messageRepository;
    13. @Autowired
    14. private UserService userService;
    15. @Override
    16. public void createMsg(String fromUserId,
    17. String toUserId,
    18. Integer type,
    19. Map msgContent){
    20. Users fromUser = userService.getUser(fromUserId);
    21. MessageMO messageMO = new MessageMO();
    22. messageMO.setFromUserId(fromUserId);
    23. messageMO.setFromNickId(fromUser.getNickname());
    24. messageMO.setFromFace(fromUser.getFace());
    25. messageMO.setToUserId(toUserId);
    26. messageMO.setMsgType(type);
    27. if(msgContent != null){
    28. messageMO.setMsgContent(msgContent);
    29. }
    30. messageMO.setCreateTime(new Date());
    31. messageRepository.save(messageMO);
    32. }
    33. }

     这里就完成了我们业务层的编写。

    系统消息入库保存-关注

    接下来我们需要把调用的地方做一个完善,基于以下五种我们就要做一个消息的入库

     在我们的doFollow关注结束之后,我们要去提示对方用户某某人关注了你

     //系统消息:关注 msgService.createMsg(myId,vlogerId, MessageEnum.FOLLOW_YOU.type,  null );

     我们这里关注的内容是不需要进行展示的,所以在这里只需要传入一个null

    随后我们重新启动一下,做一个关注,

    刷新一下打开mongoDB 

     这个就是我们的数据

     

     mongoDB当字段为null时,该数据是不会存在的

    系统消息入库保存-点赞短视频

    当我们插入数据完成之后,系统也需要发送一条点赞短视频的消息

     点赞短视频我们是需要把短视频的封面给得到的

    所以我们在设置的时候要传入vlogCover

    1. //系统消息:点赞短视频
    2. Vlog vlog = this.getVlog(vlogId);
    3. Map msgContent = new HashMap();
    4. msgContent.put("vlogId",vlogId);
    5. msgContent.put("vlogCover",vlog.getCover());
    6. msgService.createMsg(userId,
    7. vlog.getVlogerId(),
    8. MessageEnum.LIKE_VLOG.type,
    9. msgContent);
    10. }
    11. private Vlog getVlog(String id){
    12. return vlogMapper.selectByPrimaryKey(id);
    13. }

     重新启动,测试:

    点赞这个视频

     随后我们到数据库中看一下

     主要是看后方,此时是多了一个数据

    系统消息入库保存-评论与回复

    这里我们可以将评论和回复评论放在一起去处理 

     这里我们需要对public Vlog getVlog(String id)扩展 重新,写入接口

    在这里就可以查询

    1. //系统消息:评论/回复
    2. Vlog vlog = vlogService.getVlog(commentBO.getVlogId());
    3. Map msgContent = new HashMap();
    4. msgContent.put("vlogId",vlog.getId());
    5. msgContent.put("vlogCover",vlog.getCover());
    6. msgContent.put("commentId",commentId);
    7. msgContent.put("commentContent",commentBO.getContent());
    8. Integer type= MessageEnum.COMMENT_VLOG.type;
    9. if(StringUtils.isNotBlank(commentBO.getFatherCommentId()) && !commentBO.getFatherCommentId().equalsIgnoreCase("0")){
    10. type = MessageEnum.REPLY_YOU.type;
    11. }
    12. msgService.createMsg(commentBO.getCommentUserId(),
    13. commentBO.getVlogerId(),
    14. type,
    15. msgContent);
    16. return commentVO;

    接着我们重启测试:

     接着到我们的mongoDB中查看:

     

     此时我们可以发现这里的内容,对于前两天数据是空的

     接着我们回复测试:

     再来刷新:

     这里就完成了我们系统消息对评论与回复的保存。

  • 相关阅读:
    STC89C52外部中断详细解析
    linux shell数组与字典用法总结
    std::function
    机器学习原理和代码实现专辑
    postgreSQL 导出数据、导入
    Node.js(1)
    高级程序员项目经理写好代码必备的三条基本素质;以及代码的现象和本质问题解读;
    最短路:leetcode1334. 阈值距离内邻居最少的城市
    2024-3-13-C++day3作业
    如何在智能合约中调用另一个合约的函数
  • 原文地址:https://blog.csdn.net/m0_64005381/article/details/127757184