public async Task<HttpResponseMessage> SendFriendRequest([FromUri] string username)
        {
            var targetUser = this.Data.Users.FirstOrDefault(u => u.UserName == username);

            if (targetUser == null)
            {
                return await this.NotFound().ExecuteAsync(new CancellationToken());
            }

            var currentUserId = User.Identity.GetUserId();
            var currentUser = this.Data.Users.FirstOrDefault(x => x.Id == currentUserId);
            if (currentUser == null)
            {
                return await this.BadRequest("Invalid user token! Please login again!").ExecuteAsync(new CancellationToken());
            }

            if (currentUser == targetUser)
            {
                return await this.BadRequest("You cannot send friendship request to yourself.").ExecuteAsync(new CancellationToken());
            }

            if (targetUser.Friends.Contains(currentUser))
            {
                return await this.BadRequest("User is already a friend.").ExecuteAsync(new CancellationToken());
            }

            if (targetUser.Requests.Any(r => r.Sender == currentUser))
            {
                return await this.BadRequest("A request already exists.").ExecuteAsync(new CancellationToken());
            }

            var request = new FriendshipRequest()
            {
                Sender = currentUser,
                Recipient = targetUser,
                Status = FriendRequestStatus.Pending
            };

            targetUser.Requests.Add(request);
            this.Data.SaveChanges();

            return await this.Ok("Friend request sent.").ExecuteAsync(new CancellationToken());
        }
        private MessageViewModel DenyFriendRequest(FriendshipRequest request, ApplicationUser me)
        {
            request.Status = FriendRequestStatus.Rejected;

            this.Data.SaveChanges();

            return new MessageViewModel("Friend request successfully declined.");
        }
        private MessageViewModel ApproveFriendRequest(FriendshipRequest request, ApplicationUser me)
        {
            request.Status = (FriendRequestStatus)1;
            me.Friends.Add(request.Sender);

            this.Data.SaveChanges();

            return new MessageViewModel("Friend request successfully approved.");
        }
        private MessageViewModel ProcessCommand(bool isApproved, FriendshipRequest request, ApplicationUser me)
        {
            MessageViewModel message = null;

            if (request.Status == FriendRequestStatus.Pending)
            {
                if (isApproved == false)
                {
                    message = DenyFriendRequest(request, me);
                }
                else
                {
                    message = ApproveFriendRequest(request, me);
                }
            }
            else if (request.Status == FriendRequestStatus.Approved)
            {
                message = new MessageViewModel("Friend request has already been approved. "
                    + request.Sender.UserName + " is among your friend list.");
            }
            else
            {
                message = new MessageViewModel("Friend request has already been denied.");
            }

            return message;
        }