private async Task Evaluate(GuessResponseBody validatedBody) { foreach (var guess in validatedBody.Guesses) { if (guess.IsValid) { var targetParticipant = gameContext.Participants.Where(p => p.TeamId == guess.TargetTeam && p.IsAlive == true).FirstOrDefault(); bool targetTeamIsDead = targetParticipant == null; if (targetTeamIsDead) { guess.IsValid = false; guess.ErrMessage = "Target Team is Dead"; } else { var evaluationResult = await evaluationModule.EvaluateTheGuess(User.Identity.Name, guess.TargetTeam, guess.Guess, targetParticipant.Secret); guess.NoOfDigitsMatchedByPositionAndValue = evaluationResult.NoOfDigitsMatchedByValueAndPosition; guess.NoOfDigitsMatchedByValue = evaluationResult.NoOfDigitsMatchedByValue; guess.Score = evaluationResult.PointsScored; guess.ErrMessage = evaluationResult.ErrMessage; } } } }
private GuessResponseBody Validate(GuessRequestBody body, string guessingTeam) { var guesses = body.Guesses; if (body.Guesses != null && body.Guesses.Count() > MAX_GUESSES) { throw new GuessLimitExceededException(); } var guessResponseBody = new GuessResponseBody { Guesses = new List <SingleGuessResponseObject>() }; foreach (var guess in guesses) { var targetTeam = guess.Team; var secretGuess = guess.Guess; var guessResponseObject = new SingleGuessResponseObject(); if (string.IsNullOrWhiteSpace(targetTeam) || !IsTeamRegexValid(targetTeam)) { guessResponseObject.ErrMessage = "Invalid team"; } else if (string.IsNullOrWhiteSpace(secretGuess) || !IsGuessRegexValid(secretGuess)) { guessResponseObject.ErrMessage = "Invalid guess"; } else if (targetTeam == guessingTeam) { guessResponseObject.ErrMessage = "Can't guess for yourself"; } if (string.IsNullOrEmpty(guessResponseObject.ErrMessage)) { guessResponseObject.IsValid = true; } guessResponseObject.TargetTeam = targetTeam; guessResponseObject.Guess = secretGuess; guessResponseBody.Guesses.Add(guessResponseObject); } return(guessResponseBody); }
private async Task CommitGuess(GuessResponseBody validatedBody, GuessRequestBody requestBody) { await gameApiService.CommitGuess(User.Identity.Name, requestBody, validatedBody); }
public async Task CommitGuess(string guessingTeam, GuessRequestBody requestBody, GuessResponseBody responseBody) { long pointsScored = 0; foreach (var guess in responseBody.Guesses) { pointsScored += guess.Score; } var guessId = Guid.NewGuid(); await _context.Guesses.AddAsync(new Guess { GameId = _gameContext.GameId, RoundId = _gameContext.RoundId, GuessId = guessId, TeamId = guessingTeam, GuessRequest = requestBody, GuessResponse = responseBody, TimeStamp = DateTime.UtcNow }); await _context.Scores.AddAsync(new Score { GameId = _gameContext.GameId, RoundId = _gameContext.RoundId, PointsScored = pointsScored, GuessId = guessId, TeamId = guessingTeam, TimeStamp = DateTime.UtcNow }); await _context.SaveChangesAsync(); }