项目持续更新中:
仿抖音短视频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 {@Idprivate 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 {@Autowiredprivate MessageRepository messageRepository;@Autowiredprivate UserService userService;@Overridepublic 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中查看:
此时我们可以发现这里的内容,对于前两天数据是空的
接着我们回复测试:
再来刷新:
这里就完成了我们系统消息对评论与回复的保存。