public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { var userIdentifier = AbpSession.ToUserIdentifier(); var probableFriend = new UserIdentifier(AbpSession.TenantId, input.UserId); if (await _friendshipManager.GetFriendshipOrNullAsync(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString()); User probableFriendUser = await UserManager.FindByIdAsync(input.UserId.ToString()); var sourceFriendship = new Friendship(userIdentifier, probableFriend, probableFriendUser.UserName, probableFriendUser.HeadImage, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(sourceFriendship); var targetFriendship = new Friendship(probableFriend, userIdentifier, user.UserName, user.HeadImage, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(targetFriendship); var sourceFriendshipRequest = sourceFriendship.MapTo <FriendDto>(); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }
/// <summary> /// 添加好友关系 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { // 获取当前登录人 var userIdentifier = AbpSession.ToUserIdentifier(); // 组合获取要添加的好友信息 var probableFriend = new UserIdentifier(input.TenantId, input.UserId); // 判断跨租户(TODO 目前猜测) _chatFeatureChecker.CheckChatFeatures(userIdentifier.TenantId, probableFriend.TenantId); // 判断双方是否是联系人 if (await _friendshipManager.GetFriendshipOrNullAsync(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } // 获取到当前登录人信息 var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString()); // 将要添加的好友信息 User probableFriendUser; using (CurrentUnitOfWork.SetTenantId(input.TenantId)) { probableFriendUser = await UserManager.FindByIdAsync(input.UserId.ToString()); } // 好友的租户名称 var friendTenancyName = probableFriend.TenantId.HasValue ? _tenantCache.Get(probableFriend.TenantId.Value).TenancyName : null; // 生成一条 登录人 添加 好友的记录 var sourceFriendship = new Friendship(userIdentifier, probableFriend, friendTenancyName, probableFriendUser.UserName, probableFriendUser.ProfilePictureId, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(sourceFriendship); // 获取登录人租户名称 var userTenancyName = user.TenantId.HasValue ? _tenantCache.Get(user.TenantId.Value).TenancyName : null; // 生成一条 好友 和 当前登录人的好友记录 var targetFriendship = new Friendship(probableFriend, userIdentifier, userTenancyName, user.UserName, user.ProfilePictureId, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(targetFriendship); // 判断接收人是否在线 var clients = _onlineClientManager.GetAllByUserId(probableFriend); if (clients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(sourceFriendship.ToUserIdentifier()); await _chatCommunicator.SendFriendshipRequestToClient(clients, targetFriendship, false, isFriendOnline); } // 判断发送人是否在线 var senderClients = _onlineClientManager.GetAllByUserId(userIdentifier); if (senderClients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(targetFriendship.ToUserIdentifier()); await _chatCommunicator.SendFriendshipRequestToClient(senderClients, sourceFriendship, true, isFriendOnline); } var sourceFriendshipRequest = ObjectMapper.Map <FriendDto>(sourceFriendship); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }
public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { var userIdentifier = AbpSession.ToUserIdentifier(); var probableFriend = new UserIdentifier(input.TenantId, input.UserId); _chatFeatureChecker.CheckChatFeatures(userIdentifier.TenantId, probableFriend.TenantId); if (_friendshipManager.GetFriendshipOrNull(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } var user = await UserManager.FindByIdAsync(AbpSession.GetUserId()); User probableFriendUser; using (CurrentUnitOfWork.SetTenantId(input.TenantId)) { probableFriendUser = (await UserManager.FindByIdAsync(input.UserId)); } var friendTenancyName = probableFriend.TenantId.HasValue ? _tenantCache.Get(probableFriend.TenantId.Value).TenancyName : null; var sourceFriendship = new Friendship(userIdentifier, probableFriend, friendTenancyName, probableFriendUser.UserName, probableFriendUser.ProfilePictureId, FriendshipState.Accepted); _friendshipManager.CreateFriendship(sourceFriendship); var userTenancyName = user.TenantId.HasValue ? _tenantCache.Get(user.TenantId.Value).TenancyName : null; var targetFriendship = new Friendship(probableFriend, userIdentifier, userTenancyName, user.UserName, user.ProfilePictureId, FriendshipState.Accepted); _friendshipManager.CreateFriendship(targetFriendship); var clients = _onlineClientManager.GetAllByUserId(probableFriend); if (clients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(sourceFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(clients, targetFriendship, false, isFriendOnline); } var senderClients = _onlineClientManager.GetAllByUserId(userIdentifier); if (senderClients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(targetFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(senderClients, sourceFriendship, true, isFriendOnline); } var sourceFriendshipRequest = sourceFriendship.MapTo <FriendDto>(); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }