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表 因为互为好友 实现简单不贴代码

相关推荐
架构师老Y39 分钟前
003、Python Web框架深度对比:Django vs Flask vs FastAPI
前端·python·django
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
一定要AK8 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao8 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
xiaotao1318 小时前
第九章:Vite API 参考手册
前端·vite·前端打包
午安~婉8 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
KevinCyao8 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4948 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
彧翎Pro8 小时前
基于 RO1 noetic 配置 robosense Helios 32(速腾) & xsense mti 300
前端·jvm
小码哥_常9 小时前
解锁系统设置新姿势:Activity嵌入全解析
前端