携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
3.8 发送私信
这次开发发送私信和设置已读功能
首先开发发送私信的功能
- 数据访问层(dao)
在之前创建好的dao组件MessageMapper中增加 发送私信和设置已读 方法
// 新增消息(私信)
int insertMessage(Message message);
// 修改私信的状态(未读-->已读或添加私信后首先直接设置为未读货值设置为删除)
int updateStatus(List<Integer> ids, int status);
然后是对应的mapper配置文件
- 业务层(Service)
在之前创建的MessageService中添加 发送私信和设置已读 方法
@Autowired
private SensitiveFilter sensitiveFilter;
// 新增私信
public int addMessage(Message message){
// 过滤一下消息(过滤标签和敏感词)
message.setContent(HtmlUtils.htmlEscape(message.getContent()));
message.setContent(sensitiveFilter.filter(message.getContent()));
return messageMapper.insertMessage(message);
}
// 更新私信的状态
public int readMessage(List<Integer> ids) {
return messageMapper.updateStatus(ids, 1); // 1 表示已读
}
- 表现层
在UserService中增加一个根据用户名查询用户的方法(dao接口之前已经写过这个方法),方便MessageController使用这个方法
public User findUserByName(String username) {
return userMapper.selectByName(username);
}
然后在MessageController中增加添加私信方法
// 发送私信
@RequestMapping(path = "/letter/send", method = RequestMethod.POST)
@ResponseBody // 因为是异步方式,所以要加上这个注解
public String sendLetter(String toName, String content) {
User target = userService.findUserByName(toName);
if (target == null) {
return CommunityUtil.getJSONString(1, "目标用户不存在!"); // 返回1代表错误
}
Message message = new Message();
message.setFromId(hostHolder.getUser().getId());
message.setToId(target.getId());
if (message.getFromId() < message.getToId()) {
message.setConversationId(message.getFromId() + "_" + message.getToId());
} else {
message.setConversationId(message.getToId() + "_" + message.getFromId());
}
message.setContent(content);
message.setCreateTime(new Date());
messageService.addMessage(message);
// 异步方式返回JSON字符串
return CommunityUtil.getJSONString(0); // 新增私信默认状态为0,表示未读
}
然后我们需要修改 私信列表 letter.html 处的发私信按钮,这个功能是在 letter.js 中实现的,所以我们需要修改一下letter.js
然后我们需要处理一下私信详情页面 letter-detail.html的私信时会默认带上对方的用户名,我们要处理一下
到这里发送私信的功能就开发完了。
然后我们接下来需要开发当用户读私信时设置已读功能
我们只需要在 MessageController 的 getLetterDetail 访问私信详情方法里,把私信列表里面的未读的消息提取出来,然后自动的设置为已读就可以了
这样,设置已读功能就开发完成了,开发完成之后可以测试一下。