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

项目持续更新中:

仿抖音短视频APP专栏

目录

保存系统消息到MongoDB

系统消息入库保存-关注

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

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


保存系统消息到MongoDB

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

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

我们这里简写为mo

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

package com.imooc.mo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.Date;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document("message")
public class MessageMO {

    @Id
    private String id;//消息主键id

    @Field("fromUserId")
    private String fromUserId;//消息来自的用户id

    @Field("fromNickId")
    private String fromNickId;//消息来自的用户昵称

    @Field("fromFace")
    private String fromFace;//消息来自的用户头像

    @Field("toUserId")
    private String toUserId;//消息来自的用户id

    @Field("msgType")
    private Integer msgType;//消息类型 枚举

    @Field("msgContent")
    private Map msgContent;//消息内容

    @Field("createTime")
    private Date createTime;//消息创建时间
}

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

 接着就要实现:

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

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

import com.imooc.pojo.Users;
import com.imooc.repository.MessageRepository;
import com.imooc.service.MsgService;
import com.imooc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Map;

@Service
public class MsgServiceImpl implements MsgService {

    @Autowired
    private MessageRepository messageRepository;

    @Autowired
    private UserService userService;

    @Override
    public void createMsg(String fromUserId,
                          String toUserId,
                          Integer type,
                          Map msgContent){

        Users fromUser = userService.getUser(fromUserId);
        MessageMO messageMO = new MessageMO();
        messageMO.setFromUserId(fromUserId);
        messageMO.setFromNickId(fromUser.getNickname());
        messageMO.setFromFace(fromUser.getFace());

        messageMO.setToUserId(toUserId);

        messageMO.setMsgType(type);
        if(msgContent != null){
            messageMO.setMsgContent(msgContent);
        }

        messageMO.setCreateTime(new Date());

        messageRepository.save(messageMO);
    }

}

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

系统消息入库保存-关注

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

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

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

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

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

刷新一下打开mongoDB 

 这个就是我们的数据

 

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

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

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

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

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

        //系统消息:点赞短视频
        Vlog vlog = this.getVlog(vlogId);
        Map msgContent = new HashMap();
        msgContent.put("vlogId",vlogId);
        msgContent.put("vlogCover",vlog.getCover());
        msgService.createMsg(userId,
                    vlog.getVlogerId(),
                    MessageEnum.LIKE_VLOG.type,
                    msgContent);
    }
private  Vlog getVlog(String id){
        return vlogMapper.selectByPrimaryKey(id);
}

 重新启动,测试:

点赞这个视频

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

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

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

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

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

在这里就可以查询

     //系统消息:评论/回复
        Vlog vlog = vlogService.getVlog(commentBO.getVlogId());
        Map msgContent = new HashMap();
        msgContent.put("vlogId",vlog.getId());
        msgContent.put("vlogCover",vlog.getCover());
        msgContent.put("commentId",commentId);
        msgContent.put("commentContent",commentBO.getContent());
        Integer type= MessageEnum.COMMENT_VLOG.type;
        if(StringUtils.isNotBlank(commentBO.getFatherCommentId()) && !commentBO.getFatherCommentId().equalsIgnoreCase("0")){
            type = MessageEnum.REPLY_YOU.type;
        }

        msgService.createMsg(commentBO.getCommentUserId(),
                commentBO.getVlogerId(),
                type,
                msgContent);
        return commentVO;

接着我们重启测试:

 接着到我们的mongoDB中查看:

 

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

 接着我们回复测试:

 再来刷新:

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

猜你喜欢

转载自blog.csdn.net/m0_64005381/article/details/127757184