Exemplo n.º 1
0
        public async Task <ClaimResult> ClaimGame(ClaimGameDomainRequest request, bool managerAction, bool draft, IReadOnlyList <Publisher> publishersForYear)
        {
            Maybe <MasterGameYear> masterGameYear = Maybe <MasterGameYear> .None;

            if (request.MasterGame.HasValue)
            {
                masterGameYear = new MasterGameYear(request.MasterGame.Value, request.Publisher.LeagueYear.Year);
            }

            PublisherGame playerGame = new PublisherGame(request.Publisher.PublisherID, Guid.NewGuid(), request.GameName, _clock.GetCurrentInstant(), request.CounterPick, null, null,
                                                         masterGameYear, request.DraftPosition, request.OverallDraftPosition);

            var supportedYears = await _fantasyCriticRepo.GetSupportedYears();

            LeagueYear leagueYear = request.Publisher.LeagueYear;

            ClaimResult claimResult = CanClaimGame(request, supportedYears, leagueYear, publishersForYear, null, false);

            if (!claimResult.Success)
            {
                return(claimResult);
            }

            LeagueAction leagueAction = new LeagueAction(request, _clock.GetCurrentInstant(), managerAction, draft, request.AutoDraft);
            await _fantasyCriticRepo.AddLeagueAction(leagueAction);

            await _fantasyCriticRepo.AddPublisherGame(playerGame);

            return(claimResult);
        }
    public async Task <ClaimResult> ClaimGame(ClaimGameDomainRequest request, bool managerAction, bool draft, bool drafting)
    {
        MasterGameYear?masterGameYear = null;

        if (request.MasterGame is not null)
        {
            masterGameYear = new MasterGameYear(request.MasterGame, request.LeagueYear.Year);
        }

        ClaimResult claimResult = CanClaimGame(request, null, null, true, drafting);

        if (!claimResult.Success)
        {
            return(claimResult);
        }

        PublisherGame playerGame = new PublisherGame(request.Publisher.PublisherID, Guid.NewGuid(), request.GameName, _clock.GetCurrentInstant(), request.CounterPick, null, false, null,
                                                     masterGameYear, claimResult.BestSlotNumber !.Value, request.DraftPosition, request.OverallDraftPosition, null, null);

        LeagueAction leagueAction = new LeagueAction(request, _clock.GetCurrentInstant(), managerAction, draft, request.AutoDraft);
        await _fantasyCriticRepo.AddLeagueAction(leagueAction);

        await _fantasyCriticRepo.AddPublisherGame(playerGame);

        return(claimResult);
    }
Exemplo n.º 3
0
        public MasterGameYearViewModel(MasterSubGame masterSubGame, MasterGameYear masterGame, IClock clock)
        {
            MasterGameID                 = masterSubGame.MasterGameID;
            Year                         = masterGame.Year;
            GameName                     = masterSubGame.GameName;
            EstimatedReleaseDate         = masterSubGame.EstimatedReleaseDate;
            SortableEstimatedReleaseDate = masterSubGame.SortableEstimatedReleaseDate;
            ReleaseDate                  = masterSubGame.ReleaseDate;
            IsReleased                   = masterSubGame.IsReleased(clock);
            WillRelease                  = masterGame.WillRelease();
            CriticScore                  = masterSubGame.CriticScore;
            AveragedScore                = false;
            EligibilitySettings          = new EligibilitySettingsViewModel(masterGame.MasterGame.EligibilitySettings, false);
            OpenCriticID                 = masterSubGame.OpenCriticID;
            SubGames                     = null;

            PercentStandardGame         = masterGame.PercentStandardGame;
            PercentCounterPick          = masterGame.PercentCounterPick;
            EligiblePercentStandardGame = masterGame.EligiblePercentStandardGame;
            EligiblePercentCounterPick  = masterGame.EligiblePercentCounterPick;
            AverageDraftPosition        = masterGame.AverageDraftPosition;
            HypeFactor                   = masterGame.HypeFactor;
            DateAdjustedHypeFactor       = masterGame.DateAdjustedHypeFactor;
            ProjectedFantasyPoints       = masterGame.GetAlwaysProjectedFantasyPoints(new StandardScoringSystem(), false);
            ProjectedOrRealFantasyPoints = masterGame.GetProjectedOrRealFantasyPoints(new StandardScoringSystem(), false, clock);
            AddedTimestamp               = masterGame.MasterGame.AddedTimestamp;
        }
Exemplo n.º 4
0
        public async Task <IReadOnlyList <MasterGameYear> > GetMasterGameYears(int year, bool useCache)
        {
            if (useCache && _masterGameYearsCache.ContainsKey(year))
            {
                return(_masterGameYearsCache[year].Values.ToList());
            }

            string sqlSource = useCache ? "tbl_caching_mastergameyear" : "vw_cacher_mastergameyear";

            using (var connection = new MySqlConnection(_connectionString))
            {
                var masterGameResults = await connection.QueryAsync <MasterGameYearEntity>($"select * from {sqlSource} where Year = @year;", new { year });

                var masterSubGameResults = await connection.QueryAsync <MasterSubGameEntity>("select * from tbl_mastergame_subgame;");

                var masterSubGames = masterSubGameResults.Select(x => x.ToDomain()).ToList();
                List <MasterGameYear> masterGames = new List <MasterGameYear>();
                foreach (var entity in masterGameResults)
                {
                    EligibilityLevel eligibilityLevel = await GetEligibilityLevel(entity.EligibilityLevel);

                    MasterGameYear domain = entity.ToDomain(masterSubGames.Where(sub => sub.MasterGameID == entity.MasterGameID),
                                                            eligibilityLevel, year);
                    masterGames.Add(domain);
                }

                if (useCache)
                {
                    _masterGameYearsCache[year] = masterGames.ToDictionary(x => x.MasterGame.MasterGameID, y => y);
                }

                return(masterGames);
            }
        }
Exemplo n.º 5
0
 public PossibleRoyaleMasterGameViewModel(MasterGameYear masterGame, IClock clock, RoyaleYearQuarter yearQuarter, bool alreadyOwned)
 {
     MasterGame           = new MasterGameYearViewModel(masterGame, clock);
     WillReleaseInQuarter = masterGame.WillReleaseInQuarter(yearQuarter.YearQuarter);
     IsEligible           = !EligibilitySettings.GetRoyaleEligibilitySettings().GameIsEligible(masterGame.MasterGame).Any();
     AlreadyOwned         = alreadyOwned;
     Cost = masterGame.GetRoyaleGameCost();
 }
 public PossibleRoyaleMasterGameViewModel(MasterGameYear masterGame, IClock clock, RoyaleYearQuarter yearQuarter, bool alreadyOwned, IEnumerable <MasterGameTag> masterGameTags)
 {
     MasterGame           = new MasterGameYearViewModel(masterGame, clock);
     WillReleaseInQuarter = masterGame.WillReleaseInQuarter(yearQuarter.YearQuarter);
     IsEligible           = !LeagueTagExtensions.GetRoyaleEligibilitySettings(masterGameTags).GameIsEligible(masterGame.MasterGame).Any();
     AlreadyOwned         = alreadyOwned;
     Cost = masterGame.GetRoyaleGameCost();
 }
Exemplo n.º 7
0
 public PossibleRoyaleMasterGameViewModel(MasterGameYear masterGame, LocalDate currentDate, RoyaleYearQuarter yearQuarter, bool alreadyOwned, IEnumerable <MasterGameTag> masterGameTags)
 {
     MasterGame           = new MasterGameYearViewModel(masterGame, currentDate);
     WillReleaseInQuarter = masterGame.WillReleaseInQuarter(yearQuarter.YearQuarter);
     AlreadyOwned         = alreadyOwned;
     IsEligible           = !LeagueTagExtensions.GetRoyaleClaimErrors(masterGameTags, masterGame.MasterGame, currentDate).Any();
     IsReleased           = masterGame.MasterGame.IsReleased(currentDate);
     HasScore             = masterGame.MasterGame.CriticScore.HasValue;
     Cost = masterGame.GetRoyaleGameCost();
 }
 public RoyalePublisherGame ToDomain(RoyaleYearQuarter yearQuarter, MasterGameYear masterGameYear)
 {
     if (Timestamp.Kind != DateTimeKind.Utc)
     {
         LocalDateTime localDateTime = LocalDateTime.FromDateTime(Timestamp);
         Instant       instant       = localDateTime.InZoneStrictly(DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York")).ToInstant();
         return(new RoyalePublisherGame(PublisherID, yearQuarter, masterGameYear, instant, AmountSpent, AdvertisingMoney, FantasyPoints));
     }
     return(new RoyalePublisherGame(PublisherID, yearQuarter, masterGameYear, Instant.FromDateTimeUtc(Timestamp), AmountSpent, AdvertisingMoney, FantasyPoints));
 }
Exemplo n.º 9
0
 public RoyalePublisherGame ToDomain(RoyaleYearQuarter yearQuarter, MasterGameYear masterGameYear)
 {
     if (Timestamp.Kind != DateTimeKind.Utc)
     {
         LocalDateTime localDateTime = LocalDateTime.FromDateTime(Timestamp);
         Instant       instant       = localDateTime.InZoneStrictly(TimeExtensions.EasternTimeZone).ToInstant();
         return(new RoyalePublisherGame(PublisherID, yearQuarter, masterGameYear, instant, AmountSpent, AdvertisingMoney, FantasyPoints));
     }
     return(new RoyalePublisherGame(PublisherID, yearQuarter, masterGameYear, Instant.FromDateTimeUtc(Timestamp), AmountSpent, AdvertisingMoney, FantasyPoints));
 }
        public UpcomingGameViewModel(MasterGameYear masterGame, IEnumerable <Publisher> publishers, IEnumerable <Publisher> standardGamePublishers, bool userMode, IClock clock)
        {
            MasterGame                   = new MasterGameYearViewModel(masterGame, clock);
            MasterGameID                 = masterGame.MasterGame.MasterGameID;
            GameName                     = masterGame.MasterGame.GameName;
            EstimatedReleaseDate         = masterGame.MasterGame.EstimatedReleaseDate;
            SortableEstimatedReleaseDate = masterGame.MasterGame.GetDefiniteSortableEstimatedReleaseDate();
            ReleaseDate                  = masterGame.MasterGame.ReleaseDate;

            if (userMode)
            {
                if (publishers.Count() == 1)
                {
                    var publisher = publishers.Single();
                    LeagueID      = publisher.LeagueYear.League.LeagueID;
                    Year          = publisher.LeagueYear.Year;
                    LeagueName    = publisher.LeagueYear.League.LeagueName;
                    PublisherID   = publisher.PublisherID;
                    PublisherName = publisher.PublisherName;
                }
                else
                {
                    LeagueName    = $"{publishers.Count()} Leagues";
                    PublisherName = "Multiple";
                }
            }
            else
            {
                if (publishers.Count() == 1)
                {
                    var publisher = publishers.Single();
                    LeagueID      = publisher.LeagueYear.League.LeagueID;
                    Year          = publisher.LeagueYear.Year;
                    LeagueName    = publisher.LeagueYear.League.LeagueName;
                    PublisherID   = publisher.PublisherID;
                    PublisherName = publisher.PublisherName;
                }
                else if (standardGamePublishers.Count() == 1)
                {
                    var publisher            = standardGamePublishers.Single();
                    var counterPickPublisher = publishers.Single(x => x.PublisherID != publisher.PublisherID);
                    LeagueID                 = publisher.LeagueYear.League.LeagueID;
                    Year                     = publisher.LeagueYear.Year;
                    LeagueName               = publisher.LeagueYear.League.LeagueName;
                    PublisherID              = publisher.PublisherID;
                    PublisherName            = publisher.PublisherName;
                    CounterPickPublisherID   = counterPickPublisher.PublisherID;
                    CounterPickPublisherName = counterPickPublisher.PublisherName;
                }
                else
                {
                    throw new Exception($"Problem with upcoming games. Happened for Game: {masterGame.MasterGame.GameName} and publisherIDs: {string.Join('|', publishers.Select(x => x.PublisherID))}");
                }
            }
        }
Exemplo n.º 11
0
    public SingleGameNewsViewModel(MasterGameYear masterGame, IReadOnlyList <LeagueYearPublisherPair> publishersPairsThatHaveGame, bool userMode, LocalDate currentDate)
    {
        MasterGame           = new MasterGameYearViewModel(masterGame, currentDate);
        MasterGameID         = masterGame.MasterGame.MasterGameID;
        GameName             = masterGame.MasterGame.GameName;
        EstimatedReleaseDate = masterGame.MasterGame.EstimatedReleaseDate;
        MaximumReleaseDate   = masterGame.MasterGame.GetDefiniteMaximumReleaseDate();
        ReleaseDate          = masterGame.MasterGame.ReleaseDate;

        if (userMode)
        {
            if (publishersPairsThatHaveGame.Count() == 1)
            {
                var publisherPair = publishersPairsThatHaveGame.Single();
                LeagueID      = publisherPair.LeagueYear.League.LeagueID;
                Year          = publisherPair.LeagueYear.Year;
                LeagueName    = publisherPair.LeagueYear.League.LeagueName;
                PublisherID   = publisherPair.Publisher.PublisherID;
                PublisherName = publisherPair.Publisher.PublisherName;
            }
            else
            {
                LeagueName    = $"{publishersPairsThatHaveGame.Count()} Leagues";
                PublisherName = "Multiple";
            }
        }
        else
        {
            if (publishersPairsThatHaveGame.Count() == 1)
            {
                var publisherPair = publishersPairsThatHaveGame.Single();
                LeagueID      = publisherPair.LeagueYear.League.LeagueID;
                Year          = publisherPair.LeagueYear.Year;
                LeagueName    = publisherPair.LeagueYear.League.LeagueName;
                PublisherID   = publisherPair.Publisher.PublisherID;
                PublisherName = publisherPair.Publisher.PublisherName;
            }
            else if (publishersPairsThatHaveGame.Count() == 2)
            {
                var standardPublisherPair    = publishersPairsThatHaveGame.Single(x => x.Publisher.PublisherGames.Where(y => !y.CounterPick).Where(y => y.MasterGame is not null).Any(y => y.MasterGame !.MasterGame.MasterGameID == masterGame.MasterGame.MasterGameID));
                var counterPickPublisherPair = publishersPairsThatHaveGame.Single(x => x.Publisher.PublisherID != standardPublisherPair.Publisher.PublisherID);
                LeagueID                 = standardPublisherPair.LeagueYear.League.LeagueID;
                Year                     = standardPublisherPair.LeagueYear.Year;
                LeagueName               = standardPublisherPair.LeagueYear.League.LeagueName;
                PublisherID              = standardPublisherPair.Publisher.PublisherID;
                PublisherName            = standardPublisherPair.Publisher.PublisherName;
                CounterPickPublisherID   = counterPickPublisherPair.Publisher.PublisherID;
                CounterPickPublisherName = counterPickPublisherPair.Publisher.PublisherName;
            }
            else
            {
                throw new Exception($"Problem with upcoming games. Happened for Game: {masterGame.MasterGame.GameName} and publisherIDs: {string.Join('|', publishersPairsThatHaveGame.Select(x => x.Publisher.PublisherID))}");
            }
        }
    }
Exemplo n.º 12
0
 public RoyalePublisherGame(Guid publisherID, RoyaleYearQuarter yearQuarter, MasterGameYear masterGame, Instant timestamp,
                            decimal amountSpent, decimal advertisingMoney, decimal?fantasyPoints)
 {
     PublisherID      = publisherID;
     YearQuarter      = yearQuarter;
     MasterGame       = masterGame;
     Timestamp        = timestamp;
     AmountSpent      = amountSpent;
     AdvertisingMoney = advertisingMoney;
     FantasyPoints    = fantasyPoints;
 }
Exemplo n.º 13
0
 public PossibleMasterGameYear(MasterGameYear masterGame, bool taken, bool alreadyOwned, bool isEligible, bool isEligibleInOpenSlot,
                               bool isReleased, bool willRelease, bool hasScore)
 {
     MasterGame           = masterGame;
     Taken                = taken;
     AlreadyOwned         = alreadyOwned;
     IsEligible           = isEligible;
     IsEligibleInOpenSlot = isEligibleInOpenSlot;
     IsReleased           = isReleased;
     WillRelease          = willRelease;
     HasScore             = hasScore;
 }
Exemplo n.º 14
0
    public Task <MasterGameYear?> GetMasterGameYear(Guid masterGameID, int year)
    {
        var matchingGame = _masterGames.SingleOrDefault(x => x.MasterGameID == masterGameID);

        if (matchingGame is null)
        {
            return(Task.FromResult <MasterGameYear?>(null));
        }
        var masterGameYear = new MasterGameYear(matchingGame, year);

        return(Task.FromResult <MasterGameYear?>(masterGameYear));
    }
Exemplo n.º 15
0
    public async Task <ClaimResult> PurchaseGame(RoyalePublisher publisher, MasterGameYear masterGame)
    {
        if (publisher.PublisherGames.Count >= MAX_GAMES)
        {
            return(new ClaimResult("Roster is full.", null));
        }
        if (publisher.PublisherGames.Select(x => x.MasterGame).Contains(masterGame))
        {
            return(new ClaimResult("Publisher already has that game.", null));
        }
        if (!masterGame.WillReleaseInQuarter(publisher.YearQuarter.YearQuarter))
        {
            return(new ClaimResult("Game will not release this quarter.", null));
        }

        var now         = _clock.GetCurrentInstant();
        var currentDate = now.ToEasternDate();

        if (masterGame.MasterGame.IsReleased(currentDate))
        {
            return(new ClaimResult("Game has been released.", null));
        }
        if (masterGame.MasterGame.CriticScore.HasValue)
        {
            return(new ClaimResult("Game has a score.", null));
        }

        var masterGameTags = await _masterGameRepo.GetMasterGameTags();

        var eligibilityErrors = LeagueTagExtensions.GetRoyaleClaimErrors(masterGameTags, masterGame.MasterGame, currentDate);

        if (eligibilityErrors.Any())
        {
            return(new ClaimResult("Game is not eligible under Royale rules.", null));
        }

        var currentBudget = publisher.Budget;
        var gameCost      = masterGame.GetRoyaleGameCost();

        if (currentBudget < gameCost)
        {
            return(new ClaimResult("Not enough budget.", null));
        }

        RoyalePublisherGame game = new RoyalePublisherGame(publisher.PublisherID, publisher.YearQuarter, masterGame, now, gameCost, 0m, null);
        await _royaleRepo.PurchaseGame(game);

        var nextSlot = publisher.PublisherGames.Count;

        return(new ClaimResult(nextSlot));
    }
Exemplo n.º 16
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);
        }
Exemplo n.º 17
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);
        }
Exemplo n.º 18
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);
    }
    public MasterGameYearViewModel(MasterGameYear masterGame, LocalDate currentDate)
    {
        MasterGameID               = masterGame.MasterGame.MasterGameID;
        Year                       = masterGame.Year;
        GameName                   = masterGame.MasterGame.GameName;
        EstimatedReleaseDate       = masterGame.MasterGame.EstimatedReleaseDate;
        MinimumReleaseDate         = masterGame.MasterGame.MinimumReleaseDate;
        MaximumReleaseDate         = masterGame.MasterGame.GetDefiniteMaximumReleaseDate();
        EarlyAccessReleaseDate     = masterGame.MasterGame.EarlyAccessReleaseDate;
        InternationalReleaseDate   = masterGame.MasterGame.InternationalReleaseDate;
        AnnouncementDate           = masterGame.MasterGame.AnnouncementDate;
        ReleaseDate                = masterGame.MasterGame.ReleaseDate;
        IsReleased                 = masterGame.MasterGame.IsReleased(currentDate);
        WillRelease                = masterGame.WillRelease();
        DelayContention            = masterGame.MasterGame.DelayContention;
        CriticScore                = masterGame.MasterGame.CriticScore;
        FantasyPoints              = masterGame.GetFantasyPoints(ScoringSystem.GetDefaultScoringSystem(Year), false, currentDate);
        AveragedScore              = masterGame.MasterGame.AveragedScore;
        OpenCriticID               = masterGame.MasterGame.OpenCriticID;
        GGToken                    = masterGame.MasterGame.GGToken;
        SubGames                   = masterGame.MasterGame.SubGames.Select(x => new MasterGameYearViewModel(x, masterGame, currentDate)).ToList();
        Tags                       = masterGame.MasterGame.Tags.Select(x => x.Name).ToList();
        ReadableTags               = masterGame.MasterGame.Tags.Select(x => x.ReadableName).ToList();
        BoxartFileName             = masterGame.MasterGame.BoxartFileName;
        GGCoverArtFileName         = masterGame.MasterGame.GGCoverArtFileName;
        PercentStandardGame        = masterGame.PercentStandardGame;
        PercentCounterPick         = masterGame.PercentCounterPick;
        AdjustedPercentCounterPick = masterGame.AdjustedPercentCounterPick;

        if (masterGame.MasterGame.EligibilityChanged)
        {
            EligiblePercentStandardGame = masterGame.PercentStandardGame;
        }
        else
        {
            EligiblePercentStandardGame = masterGame.EligiblePercentStandardGame;
        }

        AverageDraftPosition         = masterGame.AverageDraftPosition;
        HypeFactor                   = masterGame.HypeFactor;
        DateAdjustedHypeFactor       = masterGame.DateAdjustedHypeFactor;
        PeakHypeFactor               = masterGame.PeakHypeFactor;
        ProjectedFantasyPoints       = masterGame.GetProjectedFantasyPoints(ScoringSystem.GetDefaultScoringSystem(Year), false);
        ProjectedOrRealFantasyPoints = FantasyPoints ?? ProjectedFantasyPoints;
        AddedTimestamp               = masterGame.MasterGame.AddedTimestamp;
    }
Exemplo n.º 20
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);
    }
Exemplo n.º 21
0
        public async Task <ClaimResult> PurchaseGame(RoyalePublisher publisher, MasterGameYear masterGame)
        {
            if (publisher.PublisherGames.Count >= MAX_GAMES)
            {
                return(new ClaimResult("Roster is full."));
            }
            if (publisher.PublisherGames.Select(x => x.MasterGame).Contains(masterGame))
            {
                return(new ClaimResult("Publisher already has that game."));
            }
            if (!masterGame.WillReleaseInQuarter(publisher.YearQuarter.YearQuarter))
            {
                return(new ClaimResult("Game will not release this quarter."));
            }
            if (masterGame.MasterGame.IsReleased(_clock.GetCurrentInstant()))
            {
                return(new ClaimResult("Game has been released."));
            }
            if (masterGame.MasterGame.CriticScore.HasValue)
            {
                return(new ClaimResult("Game has a score."));
            }

            var eligibilityErrors = EligibilitySettings.GetRoyaleEligibilitySettings().GameIsEligible(masterGame.MasterGame);

            if (eligibilityErrors.Any())
            {
                return(new ClaimResult("Game is not eligible under Royale rules."));
            }

            var currentBudget = publisher.Budget;
            var gameCost      = masterGame.GetRoyaleGameCost();

            if (currentBudget < gameCost)
            {
                return(new ClaimResult("Not enough budget."));
            }

            RoyalePublisherGame game = new RoyalePublisherGame(publisher.PublisherID, publisher.YearQuarter, masterGame, _clock.GetCurrentInstant(), gameCost, 0m, null);
            await _royaleRepo.PurchaseGame(game);

            return(new ClaimResult());
        }
Exemplo n.º 22
0
        public MasterGameCalculatedStats(MasterGame masterGame, MasterGameYear cachedMasterGameYear)
        {
            MasterGame = masterGame;
            Year       = cachedMasterGameYear.Year;

            PercentStandardGame         = cachedMasterGameYear.PercentStandardGame;
            PercentCounterPick          = cachedMasterGameYear.PercentCounterPick;
            EligiblePercentStandardGame = cachedMasterGameYear.EligiblePercentStandardGame;
            EligiblePercentCounterPick  = cachedMasterGameYear.EligiblePercentCounterPick;
            NumberOfBids         = cachedMasterGameYear.NumberOfBids;
            TotalBidAmount       = cachedMasterGameYear.TotalBidAmount;
            BidPercentile        = cachedMasterGameYear.BidPercentile;
            AverageDraftPosition = cachedMasterGameYear.AverageDraftPosition;
            AverageWinningBid    = cachedMasterGameYear.AverageWinningBid;

            HypeFactor                 = cachedMasterGameYear.HypeFactor;
            DateAdjustedHypeFactor     = cachedMasterGameYear.DateAdjustedHypeFactor;
            LinearRegressionHypeFactor = cachedMasterGameYear.LinearRegressionHypeFactor;
        }
Exemplo n.º 23
0
        public async Task <Maybe <MasterGameYear> > GetMasterGameYear(Guid masterGameID, int year)
        {
            using (var connection = new MySqlConnection(_connectionString))
            {
                MasterGameYearEntity masterGame = await connection.QuerySingleOrDefaultAsync <MasterGameYearEntity>("select * from vwmastergame where MasterGameID = @masterGameID and Year = @year", new { masterGameID, year });

                if (masterGame == null)
                {
                    return(Maybe <MasterGameYear> .None);
                }

                IEnumerable <MasterSubGameEntity> masterSubGames = await connection.QueryAsync <MasterSubGameEntity>("select * from tblmastersubgame where MasterGameID = @masterGameID", new { masterGameID });

                EligibilityLevel eligibilityLevel = await GetEligibilityLevel(masterGame.EligibilityLevel);

                MasterGameYear domain = masterGame.ToDomain(masterSubGames.Select(x => x.ToDomain()), eligibilityLevel, year);
                return(Maybe <MasterGameYear> .From(domain));
            }
        }
    public MasterGameYearViewModel(MasterSubGame masterSubGame, MasterGameYear masterGame, LocalDate currentDate)
    {
        MasterGameID         = masterSubGame.MasterGameID;
        Year                 = masterGame.Year;
        GameName             = masterSubGame.GameName;
        EstimatedReleaseDate = masterSubGame.EstimatedReleaseDate;
        MinimumReleaseDate   = masterSubGame.MinimumReleaseDate;
        MaximumReleaseDate   = masterSubGame.GetDefiniteMaximumReleaseDate();
        ReleaseDate          = masterGame.MasterGame.ReleaseDate;
        IsReleased           = masterGame.MasterGame.IsReleased(currentDate);
        WillRelease          = masterGame.WillRelease();
        CriticScore          = masterSubGame.CriticScore;
        FantasyPoints        = masterGame.GetFantasyPoints(ScoringSystem.GetDefaultScoringSystem(Year), false, currentDate);
        AveragedScore        = false;
        OpenCriticID         = masterSubGame.OpenCriticID;
        SubGames             = null;
        Tags                 = new List <string>();
        ReadableTags         = new List <string>();

        PercentStandardGame        = masterGame.PercentStandardGame;
        PercentCounterPick         = masterGame.PercentCounterPick;
        AdjustedPercentCounterPick = masterGame.AdjustedPercentCounterPick;

        if (masterGame.MasterGame.EligibilityChanged)
        {
            EligiblePercentStandardGame = masterGame.PercentStandardGame;
        }
        else
        {
            EligiblePercentStandardGame = masterGame.EligiblePercentStandardGame;
        }

        AverageDraftPosition         = masterGame.AverageDraftPosition;
        HypeFactor                   = masterGame.HypeFactor;
        DateAdjustedHypeFactor       = masterGame.DateAdjustedHypeFactor;
        PeakHypeFactor               = masterGame.PeakHypeFactor;
        ProjectedFantasyPoints       = masterGame.GetProjectedFantasyPoints(ScoringSystem.GetDefaultScoringSystem(Year), false);
        ProjectedOrRealFantasyPoints = FantasyPoints ?? ProjectedFantasyPoints;
        AddedTimestamp               = masterGame.MasterGame.AddedTimestamp;
    }
Exemplo n.º 25
0
        public MasterGameYearViewModel(MasterGameYear masterGame, IClock clock)
        {
            MasterGameID             = masterGame.MasterGame.MasterGameID;
            Year                     = masterGame.Year;
            GameName                 = masterGame.MasterGame.GameName;
            EstimatedReleaseDate     = masterGame.MasterGame.EstimatedReleaseDate;
            MinimumReleaseDate       = masterGame.MasterGame.MinimumReleaseDate;
            MaximumReleaseDate       = masterGame.MasterGame.GetDefiniteMaximumReleaseDate();
            EarlyAccessReleaseDate   = masterGame.MasterGame.EarlyAccessReleaseDate;
            InternationalReleaseDate = masterGame.MasterGame.InternationalReleaseDate;
            ReleaseDate              = masterGame.MasterGame.ReleaseDate;
            IsReleased               = masterGame.MasterGame.IsReleased(clock.GetCurrentInstant());
            WillRelease              = masterGame.WillRelease();
            CriticScore              = masterGame.MasterGame.CriticScore;
            AveragedScore            = masterGame.MasterGame.AveragedScore;
            OpenCriticID             = masterGame.MasterGame.OpenCriticID;
            SubGames                 = masterGame.MasterGame.SubGames.Select(x => new MasterGameYearViewModel(x, masterGame, clock)).ToList();
            Tags                     = masterGame.MasterGame.Tags.Select(x => x.Name).ToList();
            BoxartFileName           = masterGame.MasterGame.BoxartFileName;
            PercentStandardGame      = masterGame.PercentStandardGame;
            PercentCounterPick       = masterGame.PercentCounterPick;

            if (masterGame.MasterGame.EligibilityChanged)
            {
                EligiblePercentStandardGame = masterGame.PercentStandardGame;
                EligiblePercentCounterPick  = masterGame.PercentCounterPick;
            }
            else
            {
                EligiblePercentStandardGame = masterGame.EligiblePercentStandardGame;
                EligiblePercentCounterPick  = masterGame.EligiblePercentCounterPick;
            }

            AverageDraftPosition         = masterGame.AverageDraftPosition;
            HypeFactor                   = masterGame.HypeFactor;
            DateAdjustedHypeFactor       = masterGame.DateAdjustedHypeFactor;
            ProjectedFantasyPoints       = masterGame.GetAlwaysProjectedFantasyPoints(new StandardScoringSystem(), false);
            ProjectedOrRealFantasyPoints = masterGame.GetProjectedOrRealFantasyPoints(new StandardScoringSystem(), false, clock);
            AddedTimestamp               = masterGame.MasterGame.AddedTimestamp;
        }
Exemplo n.º 26
0
    public MasterGameYearScriptInput(MasterGameYear masterGameYear)
    {
        Year         = masterGameYear.Year;
        MasterGameID = masterGameYear.MasterGame.MasterGameID;
        GameName     = masterGameYear.MasterGame.GameName;

        EligiblePercentStandardGame = masterGameYear.EligiblePercentStandardGame;
        AdjustedPercentCounterPick  = masterGameYear.AdjustedPercentCounterPick ?? 0;
        AverageDraftPosition        = masterGameYear.AverageDraftPosition;
        DateAdjustedHypeFactor      = masterGameYear.DateAdjustedHypeFactor;
        TotalBidAmount = masterGameYear.TotalBidAmount;
        BidPercentile  = masterGameYear.BidPercentile;

        if (masterGameYear.MasterGame.CriticScore.HasValue)
        {
            CriticScore = masterGameYear.MasterGame.CriticScore.Value;
        }
        else if (!masterGameYear.WillRelease())
        {
            CriticScore = 70m;
        }
    }
Exemplo n.º 27
0
        public async Task <IReadOnlyList <MasterGameYear> > GetMasterGameYears(int year)
        {
            if (_masterGameYearsCache.ContainsKey(year))
            {
                return(_masterGameYearsCache[year].Values.ToList());
            }

            var possibleTags = await GetMasterGameTags();

            using (var connection = new MySqlConnection(_connectionString))
            {
                var masterGameResults = await connection.QueryAsync <MasterGameYearEntity>("select * from tbl_caching_mastergameyear where Year = @year;", new { year });

                var masterSubGameResults = await connection.QueryAsync <MasterSubGameEntity>("select * from tbl_mastergame_subgame;");

                var masterGameTagResults = await connection.QueryAsync <MasterGameHasTagEntity>("select * from tbl_mastergame_hastag;");

                var masterGameTagLookup = masterGameTagResults.ToLookup(x => x.MasterGameID);

                var masterSubGames = masterSubGameResults.Select(x => x.ToDomain()).ToList();
                List <MasterGameYear> masterGames = new List <MasterGameYear>();
                foreach (var entity in masterGameResults)
                {
                    var tagAssociations = masterGameTagLookup[entity.MasterGameID].Select(x => x.TagName);
                    IReadOnlyList <MasterGameTag> tags = possibleTags
                                                         .Where(x => tagAssociations.Contains(x.Name))
                                                         .ToList();

                    MasterGameYear domain = entity.ToDomain(masterSubGames.Where(sub => sub.MasterGameID == entity.MasterGameID), year, tags);
                    masterGames.Add(domain);
                }

                _masterGameYearsCache[year] = masterGames.ToDictionary(x => x.MasterGame.MasterGameID, y => y);

                return(masterGames);
            }
        }
Exemplo n.º 28
0
 public PublicBiddingMasterGame(MasterGameYear masterGameYear, bool counterPick, IEnumerable <ClaimError> claimErrors)
 {
     MasterGameYear = masterGameYear;
     CounterPick    = counterPick;
     ClaimErrors    = claimErrors.ToList();
 }
 public RoyalePublisherGame ToDomain(RoyaleYearQuarter yearQuarter, MasterGameYear masterGameYear)
 {
     return(new RoyalePublisherGame(PublisherID, yearQuarter, masterGameYear, Timestamp, AmountSpent, AdvertisingMoney, FantasyPoints));
 }
 public MasterGameYearWithCounterPickViewModel(MasterGameYear masterGameYear, bool counterPick, LocalDate currentDate)
 {
     MasterGameYear = new MasterGameYearViewModel(masterGameYear, currentDate);
     CounterPick    = counterPick;
 }