Пример #1
0
        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());
        }
Пример #2
0
        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());
        }
Пример #3
0
        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());
        }
Пример #4
0
        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();
            }
        }
Пример #5
0
        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());
        }