摘要:實(shí)現(xiàn)聊天,項(xiàng)目介紹。首先根據(jù)搜索的用戶的名稱查找是否存在這個用戶。如果搜索前置條件為成功,則向前端返回搜索用戶的信息。發(fā)送添加好友的請求判斷不能為空查詢用戶接受到的朋友申請最終實(shí)現(xiàn)效果
Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目介紹。
Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目github鏈接。
本章完整代碼鏈接。
本節(jié)主要講解聊天App PigChat中關(guān)于好友申請的發(fā)送與接受。
包含以下內(nèi)容:
定義枚舉類型 SearchFriendsStatusEnum,表示添加好友的前置狀態(tài)
SUCCESS(0, "OK"), USER_NOT_EXIST(1, "無此用戶..."), NOT_YOURSELF(2, "不能添加你自己..."), ALREADY_FRIENDS(3, "該用戶已經(jīng)是你的好友...");
在service中定義搜索朋友的前置條件判斷的方法preconditionSearchFriends。
傳入的是用戶的Id以及搜索的用戶的名稱。
【1】首先根據(jù)搜索的用戶的名稱查找是否存在這個用戶。
【2】如果搜索的用戶不存在,則返回[無此用戶]。
【3】如果搜索的用戶是你自己,則返回[不能添加自己]。
【4】如果搜索的用戶已經(jīng)是你的好友,則返回[該用戶已經(jīng)是你的好友]。
【5】否則返回成功。
@Transactional(propagation = Propagation.SUPPORTS) @Override public Integer preconditionSearchFriends(String myUserId, String friendUsername) { //1. 查找要添加的朋友是否存在 Users user = queryUserInfoByUsername(friendUsername); // 2. 搜索的用戶如果不存在,返回[無此用戶] if (user == null) { return SearchFriendsStatusEnum.USER_NOT_EXIST.status; } // 3. 搜索賬號是你自己,返回[不能添加自己] if (user.getId().equals(myUserId)) { return SearchFriendsStatusEnum.NOT_YOURSELF.status; } // 4. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友] Example mfe = new Example(MyFriends.class); Criteria mfc = mfe.createCriteria(); mfc.andEqualTo("myUserId", myUserId); mfc.andEqualTo("myFriendUserId", user.getId()); MyFriends myFriendsRel = myFriendsMapper.selectOneByExample(mfe); if (myFriendsRel != null) { return SearchFriendsStatusEnum.ALREADY_FRIENDS.status; } //返回成功 return SearchFriendsStatusEnum.SUCCESS.status; }
在controller中創(chuàng)建搜索好友接口 searchUser。
傳入的是用戶的Id,以及要搜索的用戶的名字。
【0】首先判斷傳入的參數(shù)是否為空。
【1】通過userService的preconditionSearchFriends方法得到前置條件。
【2】如果搜索前置條件為成功,則向前端返回搜索用戶的信息。
【3】否則搜索失敗。
/** * @Description: 搜索好友接口, 根據(jù)賬號做匹配查詢而不是模糊查詢 */ @PostMapping("/search") public IMoocJSONResult searchUser(String myUserId, String friendUsername) throws Exception { // 0. 判斷 myUserId friendUsername 不能為空 if (StringUtils.isBlank(myUserId) || StringUtils.isBlank(friendUsername)) { return IMoocJSONResult.errorMsg(""); } // 前置條件 - 1. 搜索的用戶如果不存在,返回[無此用戶] // 前置條件 - 2. 搜索賬號是你自己,返回[不能添加自己] // 前置條件 - 3. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友] //1. 得到前置條件狀態(tài) Integer status = userService.preconditionSearchFriends(myUserId, friendUsername); //2. 搜索成功,返回搜索用戶的信息 if (status == SearchFriendsStatusEnum.SUCCESS.status) { Users user = userService.queryUserInfoByUsername(friendUsername); UsersVO userVO = new UsersVO(); BeanUtils.copyProperties(user, userVO); return IMoocJSONResult.ok(userVO); } else { //3. 搜索失敗 String errorMsg = SearchFriendsStatusEnum.getMsgByKey(status); return IMoocJSONResult.errorMsg(errorMsg); } }發(fā)送添加好友申請的接口
在service中定義添加好友請求記錄,保存到數(shù)據(jù)庫的sendFriendRequest方法。
傳入的是添加好友記錄的發(fā)送方——用戶的Id,以及記錄的接收方——想要添加的朋友的名稱。
【1】首先根據(jù)用戶名把朋友信息查詢出來。
【2】然后查詢發(fā)送好友請求記錄表。
【3】如果不是你的好友,并且好友記錄沒有添加,則新增好友請求記錄。這樣可以保證打你發(fā)送了兩次請求之后,數(shù)據(jù)庫中仍然只記錄一次請求的數(shù)據(jù)。
@Transactional(propagation = Propagation.REQUIRED) @Override public void sendFriendRequest(String myUserId, String friendUsername) { // 1. 根據(jù)用戶名把朋友信息查詢出來 Users friend = queryUserInfoByUsername(friendUsername); // 2. 查詢發(fā)送好友請求記錄表 Example fre = new Example(FriendsRequest.class); Criteria frc = fre.createCriteria(); frc.andEqualTo("sendUserId", myUserId); frc.andEqualTo("acceptUserId", friend.getId()); FriendsRequest friendRequest = friendsRequestMapper.selectOneByExample(fre); if (friendRequest == null) { // 3. 如果不是你的好友,并且好友記錄沒有添加,則新增好友請求記錄 String requestId = sid.nextShort(); FriendsRequest request = new FriendsRequest(); request.setId(requestId); request.setSendUserId(myUserId); request.setAcceptUserId(friend.getId()); request.setRequestDateTime(new Date()); friendsRequestMapper.insert(request); } }
在controller中創(chuàng)建發(fā)送添加好友請求的接口。
傳入的是添加好友記錄的發(fā)送方——用戶的Id,以及記錄的接收方——想要添加的朋友的名稱。
【0】首先判斷傳入?yún)?shù)不為空。
【1】然后判斷前置條件,若為成功則通過userService的sendFriendRequest方法發(fā)送好友請求,否則返回失敗。
/** * @Description: 發(fā)送添加好友的請求 */ @PostMapping("/addFriendRequest") public IMoocJSONResult addFriendRequest(String myUserId, String friendUsername) throws Exception { // 0. 判斷 myUserId friendUsername 不能為空 if (StringUtils.isBlank(myUserId) || StringUtils.isBlank(friendUsername)) { return IMoocJSONResult.errorMsg(""); } // 前置條件 - 1. 搜索的用戶如果不存在,返回[無此用戶] // 前置條件 - 2. 搜索賬號是你自己,返回[不能添加自己] // 前置條件 - 3. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友] // 1. 判斷前置條件 Integer status = userService.preconditionSearchFriends(myUserId, friendUsername); if (status == SearchFriendsStatusEnum.SUCCESS.status) { userService.sendFriendRequest(myUserId, friendUsername); } else { String errorMsg = SearchFriendsStatusEnum.getMsgByKey(status); return IMoocJSONResult.errorMsg(errorMsg); } return IMoocJSONResult.ok(); }最終實(shí)現(xiàn)效果 接受添加好友申請的接口
在service中定義查詢好友請求列表的queryFriendRequestList方法。
@Transactional(propagation = Propagation.SUPPORTS) @Override public ListqueryFriendRequestList(String acceptUserId) { return usersMapperCustom.queryFriendRequestList(acceptUserId); }
在controller中定義接受添加好友請求的接口queryFriendRequests。
/** * @Description: 發(fā)送添加好友的請求 */ @PostMapping("/queryFriendRequests") public IMoocJSONResult queryFriendRequests(String userId) { // 0. 判斷不能為空 if (StringUtils.isBlank(userId)) { return IMoocJSONResult.errorMsg(""); } // 1. 查詢用戶接受到的朋友申請 return IMoocJSONResult.ok(userService.queryFriendRequestList(userId)); }最終實(shí)現(xiàn)效果
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73296.html
Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目介紹。Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目github鏈接。本章完整代碼鏈接。 本章內(nèi)容 (1) 查詢好友列表的接口 (2)通過或忽略好友請求的接口 (3)添加好友功能展示 查詢好友列表的接口 /** * @Description: 查詢我的好友列表 ...
閱讀 3413·2021-11-25 09:43
閱讀 3468·2021-11-19 09:40
閱讀 2470·2021-10-14 09:48
閱讀 1285·2021-09-09 11:39
閱讀 1925·2019-08-30 15:54
閱讀 2826·2019-08-30 15:44
閱讀 2001·2019-08-29 13:12
閱讀 1546·2019-08-29 12:59