コード例 #1
0
        public async Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, ISaveStandardResultRequest request, ResultsEngineResponse response)
        {
            var matchModel = await context.PlayerFixture.GetMatch(request.MatchID);

            matchModel.SetWalkover(Walkover.None);

            return(ResultsEngineStatuses.Success);
        }
コード例 #2
0
        public void SetContext(IPlayerResultEngineContext context)
        {
            if (this._context != null)
            {
                throw new InvalidOperationException("Context already set.");
            }

            this._context = context;
        }
コード例 #3
0
        public async Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            if (context.PlayerFixture.IsComplete())
            {
                this._pendingFixtures = await this._playerFixtureRepository.GetPendingFixtures(context.PlayerFixture.Data.ID);

                return(this._pendingFixtures.Count > 0);
            }

            return(false);
        }
コード例 #4
0
        public ResultsEngineResponse SaveStandardResultRequest(IPlayerResultEngineContext context, ISaveStandardResultRequest request)
        {
            this._unitOfWork.GuardCheckInTransaction();

            var response   = new ResultsEngineResponse();
            var processors = this._processorFactory.Create(context, request);
            var status     = this._processorExecutor.Execute(context, request, response, processors);

            response.Status = status;

            return(response);
        }
コード例 #5
0
        public async Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var data = new PlayerCompetitionResult();

            data.Fixture     = context.PlayerFixture.Data;
            data.Competition = context.Competition;
            data.SeasonID    = context.Competition.Season.ID;
            data.Winner      = context.PlayerFixture.Data.WinningEntrantID;
            data.Loser       = context.PlayerFixture.Data.LosingEntrantID;

            await this._competitionResultRepository.Save(data);

            return(ResultsEngineStatuses.Success);
        }
コード例 #6
0
        public async Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            bool ok = true;

            if (request.GameResults != null && request.GameResults.Count > 0)
            {
                var matchModel = await context.PlayerFixture.GetMatch(request.MatchID);

                var competition = context.Competition;

                var validationContext = new ValidationContext <List <GameResult> >(request.GameResults);
                validationContext.RootContextData.Add("match", matchModel.Data);
                validationContext.RootContextData.Add("gameCalculationEngineRepository", this._gameCalculationEngineRepository);

                var result = await this._gameResultsValidator.ValidateAsync(validationContext);

                response.SetValidationResult(result);

                // HashSet<int> homePlayers = new HashSet<int>();
                // HashSet<int> awayPlayers = new HashSet<int>();
                //
                // homePlayers.UnionWith(request.GameResults.SelectMany(x => x.HomePlayers.Where(y => y > 0)));
                // awayPlayers.UnionWith(request.GameResults.SelectMany(x => x.AwayPlayers.Where(y => y > 0)));
                //
                // //foreach (var gameResult in request.GameResults)
                // {
                //  if (!homePlayers.SequenceEqual(matchModel.Data.Home.GetPlayerIDs()))
                //  {
                //      response.ValidationResult.Errors.Add(new ValidationFailure(nameof(homePlayers),
                //          "Home players are different to the entrant players on the match."));
                //      ok = false;
                //  }
                //
                //  if (!awayPlayers.SequenceEqual(matchModel.Data.Away.GetPlayerIDs()))
                //  {
                //      response.ValidationResult.Errors.Add(
                //          new ValidationFailure(nameof(awayPlayers), "Away players are different to the entrant players on the match"));
                //      ok = false;
                //  }
                // }
            }

            if (response.ValidationResult.IsValid)
            {
                return(ResultsEngineStatuses.Success);
            }

            return(ResultsEngineStatuses.UnknownError);
        }
コード例 #7
0
        public Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            // TODO - use validation result
            if (context.PlayerFixture.IsMatchPending(request.MatchID))
            {
                throw new InvalidResultsEngineOperationException("Match is pending.  To make changes you will need to confirm the match details first.");
            }

            if (context.PlayerFixture.IsMatchProcessed(request.MatchID))
            {
                throw new InvalidResultsEngineOperationException("Match has already been processed.  To make changes you will need to revert this match first.");
            }

            return(Task.FromResult(ResultsEngineStatuses.Success));
        }
コード例 #8
0
        public async Task <IPlayerResultEngine> GetEngine(IResultsEngineRequest request)
        {
            await this._competitionRepository.GetForUpdate(request.CompetitionID);

            Entities.Competition competition = await this._competitionRepository.GetWithStages(request.CompetitionID);

            CompetitionStage stage   = this.GetStage(competition, request.CompetitionStageLoadMode, request.CompetitionStageValue);
            PlayerFixture    fixture = await this._playerFixtureRepository.GetFull(request.FixtureID);

            IPlayerFixtureModel        playerFixtureModel = this._serviceProvider.GetService <IPlayerFixtureModel>();
            IPlayerResultEngineContext context            = this._serviceProvider.GetService <IPlayerResultEngineContext>();

            context.Initialise(competition, stage, fixture.CompetitionRound.CompetitionEvent, fixture.CompetitionRound, playerFixtureModel);

            var engine = this._serviceProvider.GetService <IPlayerResultEngine>();

            engine.SetContext(context);
            await playerFixtureModel.Initialise(fixture, context);

            return(engine);
        }
コード例 #9
0
        public async Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            if (request.GameResults != null && request.GameResults.Count > 0)
            {
                var matchModel = await context.PlayerFixture.GetMatch(request.MatchID);

                var competition = context.Competition;
                foreach (var gameResult in request.GameResults)
                {
                    if (matchModel.GameExists(gameResult.MatchFormatXGameVariationID))
                    {
                        await matchModel.UpdateGame(gameResult);
                    }
                    else
                    {
                        await matchModel.AddGame(gameResult);
                    }
                }
            }

            return(ResultsEngineStatuses.Success);
        }
コード例 #10
0
        public Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var status = ResultsEngineStatuses.Success;

            foreach (PlayerFixture pendingFixture in this._pendingFixtures)
            {
                var updateRequest = UpdatePendingPlayerFixtureRequest.New()
                                    .WithCompetitionID(pendingFixture.CompetitionID)
                                    .WithFixtureID(pendingFixture.ID)
                                    .WithCompetitionStageID(pendingFixture.CompetitionRound.CompetitionEvent.CompetitionStage.ID)
                                    .WithCompletedFixture(context.PlayerFixture.Data)
                                    .Build();
                IPlayerResultEngine engine = this._playerResultEngineManager.GetEngine(updateRequest).GetAwaiter().GetResult();
                var updateResponse         = engine.UpdatePendingFixture(updateRequest);
                status = updateResponse.Status;
                if (status != ResultsEngineStatuses.Success)
                {
                    break;
                }
            }

            return(Task.FromResult(status));
        }
コード例 #11
0
        public Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            context.PlayerFixture.CalculateFixture();

            return(Task.FromResult <ResultsEngineStatuses>(ResultsEngineStatuses.Success));
        }
        public IList <IProcessor <IPlayerResultEngineContext, ISaveStandardResultRequest, ResultsEngineResponse> > Create(IPlayerResultEngineContext context,
                                                                                                                          ISaveStandardResultRequest request)
        {
            var list = new List <IProcessor <IPlayerResultEngineContext, ISaveStandardResultRequest, ResultsEngineResponse> >();

            switch (context.CompetitionStage.CompetitionStageFormatID)
            {
            case CompetitionStageFormats.SingleKnockout:
            {
                list.Add(this._validateMatchStatusProcessor);
                list.Add(this._validateGameResultsProcessor);
                list.Add(this._parseGamesProcessor);
                list.Add(this._matchCalculationProcessor);
                list.Add(this._walkoverProcessor);
                list.Add(this._fixtureCalculationProcessor);
                list.Add(this._pendingFixtureProcessor);
                list.Add(this._competitionResultProcessor);
            }
            break;

            case CompetitionStageFormats.SingleLeague:
            case CompetitionStageFormats.Groups:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(list);
        }
コード例 #13
0
 public Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
 {
     return(Task.FromResult(true));
 }
コード例 #14
0
        public async Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            await context.PlayerFixture.CalculateMatches();

            return(ResultsEngineStatuses.Success);
        }
コード例 #15
0
 public Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IUpdatePendingPlayerFixtureRequest request, ResultsEngineResponse response)
 {
     context.PlayerFixture.UpdatePendingFixture(request.CompletedFixture);
     return(Task.FromResult(ResultsEngineStatuses.Success));
 }
コード例 #16
0
 public Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IUpdatePendingPlayerFixtureRequest request, ResultsEngineResponse response)
 {
     return(Task.FromResult <bool>(context.PlayerFixture.IsPending()));
 }
コード例 #17
0
 public Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
 {
     return(Task.FromResult(context.PlayerFixture.IsComplete() && context.PlayerFixture.Data.CompetitionRound.CompetitionRoundTypeID == CompetitionRoundTypes.Final));
 }
コード例 #18
0
        public IList <IProcessor <IPlayerResultEngineContext, IUpdatePendingPlayerFixtureRequest, ResultsEngineResponse> > Create(IPlayerResultEngineContext context,
                                                                                                                                  IUpdatePendingPlayerFixtureRequest request)
        {
            var list = new List <IProcessor <IPlayerResultEngineContext, IUpdatePendingPlayerFixtureRequest, ResultsEngineResponse> >();

            switch (context.CompetitionStage.CompetitionStageFormatID)
            {
            case CompetitionStageFormats.SingleKnockout:
            {
                list.Add(this._updatePendingFixtureProcessor);
            }
            break;

            case CompetitionStageFormats.SingleLeague:
            case CompetitionStageFormats.Groups:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(list);
        }
コード例 #19
0
        public Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            bool result = !context.PlayerFixture.IsMatchProcessed(request.MatchID);

            return(Task.FromResult(result));
        }