当前位置: 首页 > news >正文

easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人

1.获取联系人列表

效果展示:

思路:联系人不至于用户,还有群聊,所以传参思路很明确了不仅需要当前用户id,还需要查询类型(即我的好友为用户 我的群聊是群组)

controller层:

@RequestMapping("/loadContact") @GlobalInterceptor public ResponseVO loadContact(HttpServletRequest request, @NotEmpty String contactType) { UserContactTypeEnum contactTypeEnum = UserContactTypeEnum.getByName(contactType); if (null == contactTypeEnum) { throw new BusinessException(ResponseCodeEnum.CODE_600); } TokenUserInfoDto tokenUserInfoDto = getTokenUserInfo(request); UserContactQuery contactQuery = new UserContactQuery(); contactQuery.setUserId(tokenUserInfoDto.getUserId()); contactQuery.setContactType(contactTypeEnum.getType()); if (UserContactTypeEnum.USER == contactTypeEnum) { contactQuery.setQueryContactUserInfo(true); } else if (UserContactTypeEnum.GROUP == contactTypeEnum) { contactQuery.setQueryGroupInfo(true); contactQuery.setExcludeMyGroup(true); } contactQuery.setOrderBy("last_update_time desc"); List<UserContact> contactList = userContactService.findListByParam(contactQuery); return getSuccessResponseVO(contactList); }

解释:写法不唯一,如果前端不传入contactType时,就需要后端自己分类,会比较耗费时间,所以前端传入contactType是最优解(前端展示是区分的,即上述图片两个区域分别调用了loadContact方法 但是传入的contactType分别为用户与群组,所以就不需要而外再区分用户与群组的方法)

<select id="selectList" resultMap="base_result_map"> SELECT c.* <if test="query.queryContactUserInfo or query.queryUserInfo"> ,u.nick_name contactName,u.sex sex </if> <if test="query.queryGroupInfo"> ,g.group_name contactName </if> FROM user_contact c <if test="query.queryContactUserInfo"> inner join user_info u on c.contact_id=u.user_id </if> <if test="query.queryUserInfo"> inner join user_info u on c.user_id=u.user_id </if> <if test="query.queryGroupInfo"> inner join group_info g on c.contact_id=g.group_id <if test="query.excludeMyGroup"> and g.group_owner_id!=c.user_id </if> </if> <include refid="query_condition"/> <if test="query.orderBy!=null"> order by ${query.orderBy} </if> <if test="query.simplePage!=null"> limit #{query.simplePage.start},#{query.simplePage.end} </if> </select>

这部分用来解释controller中代码为什么要set那么多true,因为公用一个方法,所以在查询中要区分是查询用户还是群组,有个简单的方法就是直接重构此方法变成两个方法,但是此写法也是mybatis常用写法,只需要在相对于的类中添加boolean类即可,然后在xml文件使用if搭配join就可以达到想要的数据

2.获取联系人详细

效果展示:

思路:从聊天页面点击别人头像就是这个接口,所以需要当前用户id与对象的id是显而易见的 这接口实现简单

controller层:

@RequestMapping("/getContactInfo") @GlobalInterceptor public ResponseVO getContactInfo(HttpServletRequest request, @NotEmpty String contactId) { TokenUserInfoDto tokenUserInfoDto = getTokenUserInfo(request); UserInfo userInfo = userInfoService.getUserInfoByUserId(contactId); UserInfoVO userInfoVO = CopyTools.copy(userInfo, UserInfoVO.class); userInfoVO.setContactStatus(UserContactStatusEnum.NOT_FRIEND.getStatus()); //判断是否是联系人 UserContact userContact = userContactService.getUserContactByUserIdAndContactId(tokenUserInfoDto.getUserId(), contactId); if (userContact != null) { userInfoVO.setContactStatus(userContact.getStatus()); } return getSuccessResponseVO(userInfoVO); }

3.删除联系人

思路:删除联系人不只有直接删除,还有拉黑的状态,所以需要传入删除的类型,所以需要当前用户id,对象,和删除类型

展示:

controller层:

@RequestMapping("/delContact") @GlobalInterceptor public ResponseVO delContact(HttpServletRequest request, @NotEmpty String contactId) { TokenUserInfoDto tokenUserInfoDto = getTokenUserInfo(request); userContactService.removeUserContact(tokenUserInfoDto.getUserId(), contactId, UserContactStatusEnum.DEL); return getSuccessResponseVO(null); }

实现层思路:主要是要修改两次user_contact表 因为互为好友 实现简单不贴代码

http://www.cnnetsun.cn/news/1204.html

相关文章:

  • AI核心知识45——大语言模型之PPO(简洁且通俗易懂版)
  • AI核心知识46——大语言模型之DPO(简洁且通俗易懂版)
  • 原子变量:并发编程的无锁利器-deepseek
  • Logseq插件开发终极指南:从零到上架完整教程
  • Annotators项目完整部署指南:从环境配置到生产优化
  • 强力解锁:5个remark插件如何彻底改变你的Markdown工作流
  • ISO20000新版标准终极指南:深度解析与服务管理实践
  • 终极解决方案:如何恢复经典数学公式编辑功能
  • Java开发者必备:JDK 1.8中文API文档终极指南
  • 视频防抖终极指南:从手抖菜鸟到专业级拍摄高手
  • 揭秘编程语言新宠:Gleam如何用类型安全重构你的开发体验
  • 微服务容错监控实战:Resilience4j与Spring Boot Admin深度集成方案
  • OpenResume简历构建器完全指南:从零到精通的职业利器
  • 3分钟极速部署:打造专业级Emacs开发环境的终极方案
  • OpenTelemetry eBPF Profiler与OTel Collector集成:企业级性能监控的智能解决方案
  • Cracking the Coding Interview 第6版:程序员面试必备宝典完整指南
  • Layer弹层组件完整指南:快速掌握现代化Web弹层开发
  • 零基础玩转Protogen x3.4:AI绘画从入门到精通终极指南
  • 智能视频字幕生成技术深度解析:从原理到实战
  • 从SQL束缚中解放:ent4/ent如何重构你的Go数据层开发体验
  • Awesome Prompts 完整使用指南:解锁GPT无限潜能
  • MacDriver终极指南:如何用Go语言轻松开发macOS原生应用
  • PingFangSC字体包:跨平台Web字体性能优化完整解决方案
  • 系统设计必读:10本经典技术书籍深度解析与实战指南
  • 3分钟上手Diaspora:2024年最值得收藏的WordPress主题指南
  • Devtron:终极Electron开发工具快速上手指南
  • SongGeneration实战指南:从零开始构建AI音乐生成系统
  • 如何快速上手GitNext:OpenHarmony专属Git客户端完整指南
  • Media Player Classic硬件加速终极指南:一键解决播放卡顿难题
  • 揭秘PHP扩展开发:5大性能优化技巧与实战架构设计