项目持续更新中:
仿抖音短视频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中查看:
此时我们可以发现这里的内容,对于前两天数据是空的
接着我们回复测试:
再来刷新:
文章来源:https://www.toymoban.com/news/detail-429674.html
这里就完成了我们系统消息对评论与回复的保存。文章来源地址https://www.toymoban.com/news/detail-429674.html
到了这里,关于从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!