public async Task <ValidatorResult> Validate(JoinGame request) { var baseResult = await baseGameRequestsValidator.Validate(request); if (!baseResult.IsSuccessful) { return(new ValidatorResult(baseResult.Error)); } var gameStatus = await gamesRepository.GetGameStatus(request.GameId); if (gameStatus != Common.Enums.GameStatusEnum.InProgress) { return(new ValidatorResult(ValidatorErrors.Games.GameNotFoundOrInactive)); } var player = await playersRepository.GetPlayerByUserId(request.UserId, request.GameId); if (player != null && player.IsActive) { return(new ValidatorResult(ValidatorErrors.Games.UserAlreadyJoined)); } return(new ValidatorResult()); }
public async Task <ValidatorResult> Validate(SubmitAnswer request) { var baseResult = await baseGameRequestsValidator.Validate(request); if (!baseResult.IsSuccessful) { return(new ValidatorResult(baseResult.Error)); } var player = await playersRepository.GetPlayerByUserId(request.UserId, request.GameId); if (await playerAnswersRepository.HasPlayerSubmittedAnswer(player.PlayerId, request.GameRoundId)) { return(new ValidatorResult(ValidatorErrors.Games.PlayerAlreadySubmittedAnswer)); } if (request.PlayerCardId == 0) { return(new ValidatorResult(ValidatorErrors.Games.PlayerCardIdRequired)); } var round = await gameRoundsRepository.GetGameRound(request.GameId, request.GameRoundId); if (round.Status != Common.Enums.GameRoundStatusEnum.InProgress) { return(new ValidatorResult(ValidatorErrors.Games.InvalidGameRoundStatus)); } var firstPlayerCard = await playerCardsRepository.GetPlayerCard(request.PlayerCardId); if (firstPlayerCard == null || firstPlayerCard.PlayerId != player.PlayerId) { return(new ValidatorResult(ValidatorErrors.Games.CardNotLinkedWithPlayer)); } var questionCard = await questionCardsRepository.GetActiveQuestionCardForRound(request.GameRoundId); if (questionCard.NumberOfAnswers > 1) { if (!request.SecondPlayerCardId.HasValue) { return(new ValidatorResult(ValidatorErrors.Games.SecondPlayerCardIdRequired)); } var secondPlayerCard = await playerCardsRepository.GetPlayerCard(request.SecondPlayerCardId.Value); if (secondPlayerCard == null || secondPlayerCard.PlayerId != player.PlayerId) { return(new ValidatorResult(ValidatorErrors.Games.CardNotLinkedWithPlayer)); } } return(new ValidatorResult()); }
public async Task <ValidatorResult> Validate <T>(T request) where T : IGameRoundRequest, IPlayerRequest { var round = await gameRoundsRepository.GetGameRound(request.GameId, request.GameRoundId); var player = await playersRepository.GetPlayerByUserId(request.UserId, request.GameId); if (round.OwnerPlayerId != player.PlayerId) { return(new ValidatorResult(ValidatorErrors.Games.InvalidUserAction)); } return(new ValidatorResult()); }
public async Task<SubmitAnswerResult> Handle(SubmitAnswer request, CancellationToken cancellationToken) { using (var transaction = repositoryTransactionsFactory.CreateTransaction()) { var validatorResult = await requestValidator.Validate(request); if (!validatorResult.IsSuccessful) return new SubmitAnswerResult(validatorResult.Error); var player = await playersRepository.GetPlayerByUserId(request.UserId, request.GameId); int playerAnswerId = await SubmitAnswer(request, player); if (playerAnswerId == 0) return new SubmitAnswerResult(GameErrors.SubmitAnswerFailed); await gameCheckpointUpdater.Update(request.GameId, nameof(Model.Core.Games.SubmitAnswer)); transaction.CommitTransaction(); return new SubmitAnswerResult(); } }
public async Task <ValidatorResult> Validate(IPlayerRequest request) { if (request.UserId == 0) { return(new ValidatorResult(ValidatorErrors.Games.UserIdRequired)); } if (request.GameId == 0) { return(new ValidatorResult(ValidatorErrors.Games.GameIdRequired)); } var player = await playersRepository.GetPlayerByUserId(request.UserId, request.GameId); if (player == null) { return(new ValidatorResult(ValidatorErrors.Games.PlayerNotFound)); } if (!player.IsActive) { return(new ValidatorResult(ValidatorErrors.Games.PlayerNotActive)); } return(new ValidatorResult()); }