Beispiel #1
0
        public async Task <SkipRoundResult> Handle(SkipRound request, CancellationToken cancellationToken)
        {
            using (var transaction = repositoryTransactionsFactory.CreateTransaction())
            {
                var validatorResult = await validator.Validate(request);

                if (!validatorResult.IsSuccessful)
                {
                    return(new SkipRoundResult(validatorResult.Error));
                }

                var skipped = await gameRoundsRepository
                              .SkipRound(request.GameRoundId);

                if (!skipped)
                {
                    return(new SkipRoundResult(GameErrors.GameRoundCouldNotBeSkipped));
                }

                var createNewRoundResult = await gameRoundCreator
                                           .CreateRound(request.GameId, request.GameRoundId);

                if (!createNewRoundResult.IsSuccessful)
                {
                    return(new SkipRoundResult(createNewRoundResult.Error));
                }

                var createCardsResult = await playerCardsCreator
                                        .CreateCards(request.GameId);

                if (!createCardsResult.IsSuccessful)
                {
                    return(new SkipRoundResult(createCardsResult.Error));
                }

                var checkpoint = await gameCheckpointUpdater.Update(request.GameId, nameof(SkipRound));

                transaction.CommitTransaction();

                return(new SkipRoundResult());
            }
        }