private async Task SendNewChallengeMessage(PostChallengeModel challengeModel, User challenger, HashedCredentials recipient) { var user = _challengeHubContext.Clients.User(recipient.UserId.ToString()); await user.SendAsync(ChallengeHubOutgoingMessages.NEW_CHALLENGE, new Challenge { Challenger = challenger, Recipient = new User { Id = recipient.UserId, Username = challengeModel.Username }, ChallengerColor = challengeModel.ChallengerColor }); }
public async Task <ActionResult <ApiMethodResponse <object> > > PostChallenge([FromBody] PostChallengeModel challengeModel) { var id = _claimsProvider.GetId(HttpContext); if (id == null) { return(Unauthorized(new ApiMethodResponse <IEnumerable <object> > { Errors = new[] { "Invalid ID in token" } })); } var challenger = _userRepository.GetUserById(id.Value); var recipient = _userRepository.GetUserCredentialsByUsername(challengeModel.Username); if (recipient == null) { return(NotFound(new ApiMethodResponse <object> { Errors = new [] { $"User '{challengeModel.Username}' could not be found!" } })); } try { _challengeRepository.CreateChallenge(id.Value, recipient.UserId, challengeModel.ChallengerColor); await SendNewChallengeMessage(challengeModel, challenger, recipient); return(Ok(new ApiMethodResponse <object>())); } catch { return(BadRequest(new ApiMethodResponse <object> { Errors = new [] { $"Challenge has already been sent to '{challengeModel.Username}'" } })); } }