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