public async Task <IActionResult> SendFriendRequest(string userNameFrom, string userNameTo) { var createFriendRequestDto = new SendFriendRequestDto( userNameFrom, userNameTo, friendRequestId => _hostConfiguration.HostAddress + Url.Action( "FriendRequest", "Friends", new { id = friendRequestId })); try { await _friendsService.SendFriendRequestAsync(createFriendRequestDto); } catch (ApplicationException exception) { return(Error.FromController(this).ErrorJson("Error!", exception.Message, HttpStatusCode.BadRequest)); } catch { return(Error.FromController(this).ErrorJson( "Error!", "An unexpected error has occured while processing your request.", HttpStatusCode.InternalServerError)); } return(Ok( new { title = "Invite sent.", message = $"An email with your invitation has been sent to {userNameTo}." + " Once it's accepted you'll see them in your Friends menu." })); }
public async Task SendFriendRequestAsync(SendFriendRequestDto friendRequest) { if (friendRequest.UserNameTo == friendRequest.UserNameFrom) { throw new FriendRequestException("You cannot invite yourself."); } var userRequestedBy = _repository.ApplicationUsers.Single(ApplicationUser.UserNameEquals(friendRequest.UserNameFrom)); var userRequestedTo = _repository.ApplicationUsers.Single(ApplicationUser.UserNameEquals(friendRequest.UserNameTo)); var friendship = new Friendship { RequestedById = userRequestedBy.Id, RequestedToId = userRequestedTo.Id, FriendshipStatus = FriendshipStatus.PendingFriendRequest }; using (var transaction = _repository.BeginTransaction()) { await SaveFriendshipAsync(friendship); await SendFriendRequestEmailAsync(friendRequest.GenerateRequestLink, friendship); transaction.Commit(); } }