[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()); }