public IReadOnlyList <ClaimError> GetClaimErrorsForSlot(LeagueYear leagueYear) { var eligibilityFactors = leagueYear.GetEligibilityFactorsForSlot(this); if (eligibilityFactors is null) { return(new List <ClaimError>()); } return(SlotEligibilityService.GetClaimErrorsForSlot(this, eligibilityFactors)); }
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)); }