예제 #1
0
        public async Task <IReadOnlyList <PossibleMasterGameYear> > GetQueuedPossibleGames(Publisher currentPublisher, IReadOnlyList <Publisher> publishersInLeagueForYear,
                                                                                           IEnumerable <QueuedGame> queuedGames)
        {
            HashSet <MasterGame> publisherMasterGames = publishersInLeagueForYear
                                                        .SelectMany(x => x.PublisherGames)
                                                        .Where(x => !x.CounterPick && x.MasterGame.HasValue)
                                                        .Select(x => x.MasterGame.Value.MasterGame)
                                                        .ToHashSet();

            HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

            IReadOnlyList <MasterGameYear> masterGameYears = await _interLeagueService.GetMasterGameYears(currentPublisher.LeagueYear.Year, true);

            var masterGamesForThisYear   = masterGameYears.Where(x => x.Year == currentPublisher.LeagueYear.Year);
            var masterGameYearDictionary = masterGamesForThisYear.ToDictionary(x => x.MasterGame.MasterGameID, y => y);

            List <PossibleMasterGameYear> possibleMasterGames = new List <PossibleMasterGameYear>();

            foreach (var queuedGame in queuedGames)
            {
                var masterGame = masterGameYearDictionary[queuedGame.MasterGame.MasterGameID];

                PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, publisherMasterGames,
                                                                                      myPublisherMasterGames, currentPublisher.LeagueYear.Options.AllowedEligibilitySettings);
                possibleMasterGames.Add(possibleMasterGame);
            }

            return(possibleMasterGames);
        }
    public async Task <IReadOnlyList <PossibleMasterGameYear> > SearchGames(string searchName, LeagueYear leagueYear, Publisher currentPublisher, int year)
    {
        HashSet <MasterGame> publisherMasterGames = leagueYear.Publishers
                                                    .SelectMany(x => x.PublisherGames)
                                                    .Where(x => !x.CounterPick && x.MasterGame is not null)
                                                    .Select(x => x.MasterGame !.MasterGame)
                                                    .ToHashSet();

        HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

        IReadOnlyList <MasterGameYear> masterGames = await _interLeagueService.GetMasterGameYears(year);

        IReadOnlyList <MasterGameYear> matchingMasterGames = MasterGameSearching.SearchMasterGameYears(searchName, masterGames);
        List <PossibleMasterGameYear>  possibleMasterGames = new List <PossibleMasterGameYear>();
        var slots = currentPublisher.GetPublisherSlots(leagueYear.Options);
        var openNonCounterPickSlots = slots.Where(x => !x.CounterPick && x.PublisherGame is null).OrderBy(x => x.SlotNumber).ToList();

        LocalDate currentDate = _clock.GetToday();

        foreach (var masterGame in matchingMasterGames)
        {
            var eligibilityFactors = leagueYear.GetEligibilityFactorsForMasterGame(masterGame.MasterGame, currentDate);
            PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, openNonCounterPickSlots, publisherMasterGames,
                                                                                  myPublisherMasterGames, eligibilityFactors, currentDate);
            possibleMasterGames.Add(possibleMasterGame);
        }

        return(possibleMasterGames);
    }
예제 #3
0
        public async Task <IReadOnlyList <PossibleMasterGameYear> > GetTopAvailableGames(Publisher currentPublisher, IReadOnlyList <Publisher> publishersInLeagueForYear, int year)
        {
            HashSet <MasterGame> publisherMasterGames = publishersInLeagueForYear
                                                        .SelectMany(x => x.PublisherGames)
                                                        .Where(x => !x.CounterPick && x.MasterGame.HasValue)
                                                        .Select(x => x.MasterGame.Value.MasterGame)
                                                        .ToHashSet();

            HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

            IReadOnlyList <MasterGameYear> masterGames = await _interLeagueService.GetMasterGameYears(year, true);

            IReadOnlyList <MasterGameYear> matchingMasterGames = masterGames.OrderByDescending(x => x.DateAdjustedHypeFactor).ToList();

            List <PossibleMasterGameYear> possibleMasterGames = new List <PossibleMasterGameYear>();

            foreach (var masterGame in matchingMasterGames)
            {
                PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, publisherMasterGames,
                                                                                      myPublisherMasterGames, currentPublisher.LeagueYear.Options.AllowedEligibilitySettings);

                if (!possibleMasterGame.IsAvailable)
                {
                    continue;
                }

                possibleMasterGames.Add(possibleMasterGame);
            }

            return(possibleMasterGames);
        }
    public async Task <IReadOnlyList <PossibleMasterGameYear> > GetTopAvailableGames(LeagueYear leagueYear, Publisher currentPublisher)
    {
        HashSet <MasterGame> publisherMasterGames = leagueYear.Publishers
                                                    .SelectMany(x => x.PublisherGames)
                                                    .Where(x => !x.CounterPick && x.MasterGame is not null)
                                                    .Select(x => x.MasterGame !.MasterGame)
                                                    .ToHashSet();

        HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

        IReadOnlyList <MasterGameYear> masterGames = await _interLeagueService.GetMasterGameYears(leagueYear.Year);

        IReadOnlyList <MasterGameYear> matchingMasterGames = masterGames.OrderByDescending(x => x.DateAdjustedHypeFactor).ToList();
        List <PossibleMasterGameYear>  possibleMasterGames = new List <PossibleMasterGameYear>();
        var slots = currentPublisher.GetPublisherSlots(leagueYear.Options);
        var openNonCounterPickSlots = slots.Where(x => !x.CounterPick && x.PublisherGame is null).OrderBy(x => x.SlotNumber).ToList();

        LocalDate currentDate = _clock.GetToday();

        foreach (var masterGame in matchingMasterGames)
        {
            var eligibilityFactors = leagueYear.GetEligibilityFactorsForMasterGame(masterGame.MasterGame, currentDate);
            PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, openNonCounterPickSlots,
                                                                                  publisherMasterGames, myPublisherMasterGames, eligibilityFactors, currentDate);

            if (!possibleMasterGame.IsAvailable)
            {
                continue;
            }

            possibleMasterGames.Add(possibleMasterGame);
        }

        return(possibleMasterGames);
    }
    public async Task <IReadOnlyList <PossibleMasterGameYear> > GetQueuedPossibleGames(LeagueYear leagueYear, Publisher currentPublisher, IEnumerable <QueuedGame> queuedGames)
    {
        HashSet <MasterGame> publisherMasterGames = leagueYear.Publishers
                                                    .SelectMany(x => x.PublisherGames)
                                                    .Where(x => !x.CounterPick && x.MasterGame is not null)
                                                    .Select(x => x.MasterGame !.MasterGame)
                                                    .ToHashSet();

        HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

        IReadOnlyList <MasterGameYear> masterGameYears = await _interLeagueService.GetMasterGameYears(leagueYear.Year);

        var masterGamesForThisYear   = masterGameYears.Where(x => x.Year == leagueYear.Year);
        var masterGameYearDictionary = masterGamesForThisYear.ToDictionary(x => x.MasterGame.MasterGameID, y => y);
        var slots = currentPublisher.GetPublisherSlots(leagueYear.Options);
        var openNonCounterPickSlots = slots.Where(x => !x.CounterPick && x.PublisherGame is null).OrderBy(x => x.SlotNumber).ToList();

        List <PossibleMasterGameYear> possibleMasterGames = new List <PossibleMasterGameYear>();
        LocalDate currentDate = _clock.GetToday();

        foreach (var queuedGame in queuedGames)
        {
            var masterGame = masterGameYearDictionary[queuedGame.MasterGame.MasterGameID];

            var eligibilityFactors = leagueYear.GetEligibilityFactorsForMasterGame(masterGame.MasterGame, currentDate);
            PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, openNonCounterPickSlots,
                                                                                  publisherMasterGames, myPublisherMasterGames, eligibilityFactors, currentDate);
            possibleMasterGames.Add(possibleMasterGame);
        }

        return(possibleMasterGames);
    }
예제 #6
0
 public PossibleMasterGameYearViewModel(PossibleMasterGameYear masterGame, IClock clock)
 {
     MasterGame   = new MasterGameYearViewModel(masterGame.MasterGame, clock);
     Taken        = masterGame.Taken;
     AlreadyOwned = masterGame.AlreadyOwned;
     IsEligible   = masterGame.IsEligible;
     IsReleased   = masterGame.IsReleased;
     WillRelease  = masterGame.WillRelease;
     HasScore     = masterGame.HasScore;
     IsAvailable  = masterGame.IsAvailable;
 }
 public PossibleMasterGameYearViewModel(PossibleMasterGameYear masterGame, LocalDate currentDate)
 {
     MasterGame           = new MasterGameYearViewModel(masterGame.MasterGame, currentDate);
     Taken                = masterGame.Taken;
     AlreadyOwned         = masterGame.AlreadyOwned;
     IsEligible           = masterGame.IsEligible;
     IsEligibleInOpenSlot = masterGame.IsEligibleInOpenSlot;
     IsReleased           = masterGame.IsReleased;
     WillRelease          = masterGame.WillRelease;
     HasScore             = masterGame.HasScore;
     IsAvailable          = masterGame.IsAvailable;
 }
예제 #8
0
        public PossibleMasterGameYear GetPossibleMasterGameYear(MasterGameYear masterGame, HashSet <MasterGame> publisherStandardMasterGames, HashSet <MasterGame> myPublisherMasterGames, IEnumerable <LeagueTagStatus> leagueTags)
        {
            var  eligibilityErrors = leagueTags.GameIsEligible(masterGame.MasterGame);
            bool isEligible        = !eligibilityErrors.Any();
            bool taken             = publisherStandardMasterGames.Contains(masterGame.MasterGame);
            bool alreadyOwned      = myPublisherMasterGames.Contains(masterGame.MasterGame);
            bool isReleased        = masterGame.MasterGame.IsReleased(_clock.GetCurrentInstant());
            bool willRelease       = masterGame.WillRelease();
            bool hasScore          = masterGame.MasterGame.CriticScore.HasValue;

            PossibleMasterGameYear possibleMasterGame = new PossibleMasterGameYear(masterGame, taken, alreadyOwned, isEligible, isReleased, willRelease, hasScore);

            return(possibleMasterGame);
        }
예제 #9
0
        public PossibleMasterGameYear GetPossibleMasterGameYear(MasterGameYear masterGame, HashSet <MasterGame> publisherMasterGames, HashSet <MasterGame> myPublisherMasterGames,
                                                                EligibilitySettings eligibilitySettings)
        {
            var  eligibilityErrors = eligibilitySettings.GameIsEligible(masterGame.MasterGame);
            bool isEligible        = !eligibilityErrors.Any();
            bool taken             = publisherMasterGames.Contains(masterGame.MasterGame);
            bool alreadyOwned      = myPublisherMasterGames.Contains(masterGame.MasterGame);
            bool isReleased        = masterGame.MasterGame.IsReleased(_clock);
            bool willRelease       = masterGame.WillRelease();
            bool hasScore          = masterGame.MasterGame.CriticScore.HasValue;

            PossibleMasterGameYear possibleMasterGame = new PossibleMasterGameYear(masterGame, taken, alreadyOwned, isEligible, isReleased, willRelease, hasScore);

            return(possibleMasterGame);
        }
예제 #10
0
    public static PossibleMasterGameYear GetPossibleMasterGameYear(MasterGameYear masterGame, IReadOnlyList <PublisherSlot> openNonCounterPickSlots,
                                                                   HashSet <MasterGame> publisherStandardMasterGames, HashSet <MasterGame> myPublisherMasterGames,
                                                                   MasterGameWithEligibilityFactors eligibilityFactors, LocalDate currentDate)
    {
        bool isEligible           = SlotEligibilityService.GameIsEligibleInLeagueYear(eligibilityFactors);
        bool taken                = publisherStandardMasterGames.Contains(masterGame.MasterGame);
        bool alreadyOwned         = myPublisherMasterGames.Contains(masterGame.MasterGame);
        bool isReleased           = masterGame.MasterGame.IsReleased(currentDate);
        bool willRelease          = masterGame.WillRelease();
        bool hasScore             = masterGame.MasterGame.CriticScore.HasValue;
        bool isEligibleInOpenSlot = SlotEligibilityService.GameIsEligibleInOpenSlot(openNonCounterPickSlots, eligibilityFactors);

        PossibleMasterGameYear possibleMasterGame = new PossibleMasterGameYear(masterGame, taken, alreadyOwned, isEligible, isEligibleInOpenSlot, isReleased, willRelease, hasScore);

        return(possibleMasterGame);
    }
예제 #11
0
    public PossibleMasterGameYear GetPossibleMasterGameYear(MasterGameYear masterGame, IReadOnlyList <PublisherSlot> openNonCounterPickSlots,
                                                            HashSet <MasterGame> publisherStandardMasterGames, HashSet <MasterGame> myPublisherMasterGames,
                                                            MasterGameWithEligibilityFactors eligibilityFactors, IEnumerable <LeagueTagStatus> tagsForSlot, LocalDate currentDate)
    {
        var  tagsToUse            = eligibilityFactors.TagOverrides.Any() ? eligibilityFactors.TagOverrides : masterGame.MasterGame.Tags;
        var  claimErrors          = LeagueTagExtensions.GameHasValidTags(tagsForSlot, new List <LeagueTagStatus>(), masterGame.MasterGame, tagsToUse, currentDate);
        bool isEligible           = !claimErrors.Any();
        bool taken                = publisherStandardMasterGames.Contains(masterGame.MasterGame);
        bool alreadyOwned         = myPublisherMasterGames.Contains(masterGame.MasterGame);
        bool isReleased           = masterGame.MasterGame.IsReleased(currentDate);
        bool willRelease          = masterGame.WillRelease();
        bool hasScore             = masterGame.MasterGame.CriticScore.HasValue;
        bool isEligibleInOpenSlot = SlotEligibilityService.GameIsEligibleInOpenSlot(openNonCounterPickSlots, eligibilityFactors);

        PossibleMasterGameYear possibleMasterGame = new PossibleMasterGameYear(masterGame, taken, alreadyOwned, isEligible, isEligibleInOpenSlot, isReleased, willRelease, hasScore);

        return(possibleMasterGame);
    }
예제 #12
0
        public async Task <IReadOnlyList <PossibleMasterGameYear> > SearchGames(string searchName, Publisher currentPublisher, IReadOnlyList <Publisher> publishersInLeagueForYear, int year)
        {
            HashSet <MasterGame> publisherMasterGames = publishersInLeagueForYear
                                                        .SelectMany(x => x.MyMasterGames)
                                                        .ToHashSet();

            HashSet <MasterGame> myPublisherMasterGames = currentPublisher.MyMasterGames;

            IReadOnlyList <MasterGameYear> masterGames = await _interLeagueService.GetMasterGameYears(year, true);

            IReadOnlyList <MasterGameYear> matchingMasterGames = MasterGameSearching.SearchMasterGameYears(searchName, masterGames);
            List <PossibleMasterGameYear>  possibleMasterGames = new List <PossibleMasterGameYear>();

            foreach (var masterGame in matchingMasterGames)
            {
                PossibleMasterGameYear possibleMasterGame = GetPossibleMasterGameYear(masterGame, publisherMasterGames,
                                                                                      myPublisherMasterGames, currentPublisher.LeagueYear.Options.AllowedEligibilitySettings);
                possibleMasterGames.Add(possibleMasterGame);
            }

            return(possibleMasterGames);
        }