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."
            }));
        }
Exemple #2
0
        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();
            }
        }