Beispiel #1
0
        [HttpPost("friends/add")] // UNTESTED
        public async Task <IActionResult> AddFriend([FromBody] string username)
        {
            User user = await UserManager.GetUserAsync(User);

            User friend = await UserManager.FindByNameAsync(username);

            if (friend.Equals(null))
            {
                return(BadRequest($"{username} doesn't exist"));
            }

            // Find if there is already a relation established between users
            bool isFriend = (from relation in Database.UserRelations
                             where (relation.FromUserId == user.UserName && relation.ToUserId == username) ||
                             (relation.ToUserId == user.UserName && relation.FromUserId == username)
                             select relation)
                            .Any();

            if (isFriend)
            {
                return(BadRequest("Users are already friends"));
            }

            // Find if there are any friends request between the users
            isFriend = (from request in Database.Requests
                        where (request.UserName == user.UserName && request.Target == friend.UserName) ||
                        (request.UserName == friend.UserName && request.Target == user.UserName)
                        select request).Any();

            if (isFriend)
            {
                return(BadRequest($"A friend request between {user.UserName} and {friend.UserName} already exists"));
            }

            Database.Requests.Add(new Request()
            {
                Target = friend.UserName, User = user
            });

            // Add a new relation between the two users, with time of creation being NOW
            Database.UserRelations.Add(new UserRelation()
            {
                FromUser = user,
                ToUser   = friend,
                Date     = DateTime.UtcNow
            });

            await Database.SaveChangesAsync();

            return(Ok());
        }