Ejemplo n.º 1
0
    public IReadOnlyList <ClaimError> GetClaimErrorsForSlot(LeagueYear leagueYear)
    {
        var eligibilityFactors = leagueYear.GetEligibilityFactorsForSlot(this);

        if (eligibilityFactors is null)
        {
            return(new List <ClaimError>());
        }

        return(SlotEligibilityService.GetClaimErrorsForSlot(this, eligibilityFactors));
    }
Ejemplo n.º 2
0
    private async Task <(int StandardGamesAdded, int CounterPicksAdded)> AutoDraftForLeague(LeagueYear leagueYear, int standardGamesAdded, int counterPicksAdded)
    {
        var today             = _clock.GetToday();
        var updatedLeagueYear = await _fantasyCriticRepo.GetLeagueYear(leagueYear.League, leagueYear.Year);

        var nextPublisher = GetNextDraftPublisher(updatedLeagueYear);

        if (nextPublisher is null)
        {
            return(standardGamesAdded, counterPicksAdded);
        }
        if (!nextPublisher.AutoDraft)
        {
            return(standardGamesAdded, counterPicksAdded);
        }

        var draftPhase  = GetDraftPhase(updatedLeagueYear);
        var draftStatus = GetDraftStatus(draftPhase, updatedLeagueYear);

        if (draftPhase.Equals(DraftPhase.Complete))
        {
            return(standardGamesAdded, counterPicksAdded);
        }
        if (draftPhase.Equals(DraftPhase.StandardGames))
        {
            var publisherWatchList = await _publisherService.GetQueuedGames(nextPublisher);

            var availableGames = await _gameSearchingService.GetTopAvailableGames(updatedLeagueYear, nextPublisher);

            var availableGamesEligibleInRemainingSlots = new List <PossibleMasterGameYear>();
            var openSlots = nextPublisher.GetPublisherSlots(updatedLeagueYear.Options).Where(x => !x.CounterPick && x.PublisherGame is null).ToList();
            foreach (var availableGame in availableGames)
            {
                foreach (var slot in openSlots)
                {
                    var eligibilityFactors = updatedLeagueYear.GetEligibilityFactorsForMasterGame(availableGame.MasterGame.MasterGame, today);
                    var claimErrors        = SlotEligibilityService.GetClaimErrorsForSlot(slot, eligibilityFactors);
                    if (!claimErrors.Any())
                    {
                        availableGamesEligibleInRemainingSlots.Add(availableGame);
                        break;
                    }
                }
            }

            var gamesToTake = publisherWatchList.OrderBy(x => x.Rank).Select(x => x.MasterGame)
                              .Concat(availableGamesEligibleInRemainingSlots.Select(x => x.MasterGame.MasterGame));

            foreach (var possibleGame in gamesToTake)
            {
                var request         = new ClaimGameDomainRequest(updatedLeagueYear, nextPublisher, possibleGame.GameName, false, false, false, true, possibleGame, draftStatus.DraftPosition, draftStatus.OverallDraftPosition);
                var autoDraftResult = await _gameAcquisitionService.ClaimGame(request, false, true, true);

                if (autoDraftResult.Success)
                {
                    standardGamesAdded++;
                    break;
                }
            }
        }
        else if (draftPhase.Equals(DraftPhase.CounterPicks))
        {
            var otherPublisherGames = updatedLeagueYear.GetAllPublishersExcept(nextPublisher)
                                      .SelectMany(x => x.PublisherGames)
                                      .Where(x => !x.CounterPick)
                                      .Where(x => x.MasterGame is not null);
            var possibleGames = otherPublisherGames
                                .Select(x => x.MasterGame !)
                                .Where(x => x.AdjustedPercentCounterPick.HasValue)
                                .OrderByDescending(x => x.AdjustedPercentCounterPick);
            foreach (var possibleGame in possibleGames)
            {
                var request = new ClaimGameDomainRequest(updatedLeagueYear, nextPublisher, possibleGame.MasterGame.GameName, true, false, false, true, possibleGame.MasterGame,
                                                         draftStatus.DraftPosition, draftStatus.OverallDraftPosition);
                var autoDraftResult = await _gameAcquisitionService.ClaimGame(request, false, true, true);

                if (autoDraftResult.Success)
                {
                    counterPicksAdded++;
                    break;
                }
            }
        }
        else
        {
            return(standardGamesAdded, counterPicksAdded);
        }

        return(await AutoDraftForLeague(updatedLeagueYear, standardGamesAdded, counterPicksAdded));
    }