public LeagueYearViewModel(LeagueYear leagueYear, SupportedYear supportedYear, IEnumerable <Publisher> publishers, Maybe <Publisher> userPublisher,
                                   IClock clock, PlayStatus playStatus, StartDraftResult startDraftResult, IEnumerable <FantasyCriticUser> activeUsers, Maybe <Publisher> nextDraftPublisher,
                                   DraftPhase draftPhase, IEnumerable <PublisherGame> availableCounterPicks, LeagueOptions options, SystemWideValues systemWideValues,
                                   IEnumerable <LeagueInvite> invitedPlayers, bool userIsInLeague, bool userIsInvitedToLeague, bool userIsManager,
                                   Maybe <FantasyCriticUser> accessingUser, IEnumerable <ManagerMessage> managerMessages, Maybe <FantasyCriticUser> previousYearWinner)
        {
            LeagueID           = leagueYear.League.LeagueID;
            Year               = leagueYear.Year;
            SupportedYear      = new SupportedYearViewModel(supportedYear);
            StandardGames      = leagueYear.Options.StandardGames;
            GamesToDraft       = leagueYear.Options.GamesToDraft;
            CounterPicks       = leagueYear.Options.CounterPicks;
            DraftSystem        = leagueYear.Options.DraftSystem.Value;
            PickupSystem       = leagueYear.Options.PickupSystem.Value;
            ScoringSystem      = leagueYear.Options.ScoringSystem.Name;
            UnlinkedGameExists = publishers.SelectMany(x => x.PublisherGames).Any(x => x.MasterGame.HasNoValue);
            UserIsActive       = activeUsers.Any(x => x.UserID == accessingUser.Unwrap(y => y.UserID));
            Publishers         = publishers
                                 .OrderBy(x => x.DraftPosition)
                                 .Select(x => new PublisherViewModel(x, clock, nextDraftPublisher, userIsInLeague, userIsInvitedToLeague, systemWideValues, supportedYear.Finished))
                                 .ToList();

            if (userPublisher.HasValue)
            {
                UserPublisher = new PublisherViewModel(userPublisher.Value, clock, userIsInLeague, userIsInvitedToLeague, systemWideValues, supportedYear.Finished);
            }

            List <PlayerWithPublisherViewModel> playerVMs = new List <PlayerWithPublisherViewModel>();
            bool allPublishersMade = true;

            foreach (var user in activeUsers)
            {
                var publisher = publishers.SingleOrDefault(x => x.User.UserID == user.UserID);
                if (publisher is null)
                {
                    playerVMs.Add(new PlayerWithPublisherViewModel(leagueYear, user, false));
                    allPublishersMade = false;
                }
                else
                {
                    bool isPreviousYearWinner = previousYearWinner.HasValue && previousYearWinner.Value.UserID == user.UserID;
                    playerVMs.Add(new PlayerWithPublisherViewModel(leagueYear, user, publisher, clock, options, systemWideValues,
                                                                   userIsInLeague, userIsInvitedToLeague, supportedYear, false, isPreviousYearWinner));
                }
            }

            foreach (var invitedPlayer in invitedPlayers)
            {
                allPublishersMade = false;

                if (invitedPlayer.User.HasValue)
                {
                    playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, invitedPlayer.User.Value.DisplayName));
                }
                else
                {
                    if (accessingUser.HasValue)
                    {
                        if (userIsManager || string.Equals(invitedPlayer.EmailAddress, accessingUser.Value.EmailAddress, StringComparison.OrdinalIgnoreCase))
                        {
                            playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, invitedPlayer.EmailAddress));
                        }
                        else
                        {
                            playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, "<Email Address Hidden>"));
                        }
                    }
                    else
                    {
                        playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, "<Email Address Hidden>"));
                    }
                }
            }

            bool readyToSetDraftOrder = false;

            if (allPublishersMade)
            {
                Players = playerVMs.OrderBy(x => x.Publisher.DraftPosition).ToList();
                readyToSetDraftOrder = true;
            }
            else
            {
                Players = playerVMs;
            }

            PlayStatus            = new PlayStatusViewModel(playStatus, readyToSetDraftOrder, startDraftResult.Ready, startDraftResult.Errors, draftPhase);
            AvailableCounterPicks = availableCounterPicks
                                    .Select(x => new PublisherGameViewModel(x, clock, leagueYear.Options.ScoringSystem, systemWideValues))
                                    .OrderBy(x => x.GameName).ToList();
            EligibilityOverrides = leagueYear.EligibilityOverrides.Select(x => new EligibilityOverrideViewModel(x, clock)).ToList();

            ManagerMessages = managerMessages.Select(x => new ManagerMessageViewModel(x)).OrderBy(x => x.Timestamp).ToList();
            if (!userIsInLeague)
            {
                ManagerMessages = ManagerMessages.Where(x => x.IsPublic).ToList();
            }
        }
Beispiel #2
0
    public LeagueYearViewModel(LeagueViewModel leagueViewModel, LeagueYear leagueYear,
                               LocalDate currentDate, StartDraftResult startDraftResult, IEnumerable <FantasyCriticUser> activeUsers, Publisher?nextDraftPublisher,
                               DraftPhase draftPhase, SystemWideValues systemWideValues,
                               IEnumerable <LeagueInvite> invitedPlayers, bool userIsInLeague, bool userIsInvitedToLeague, bool userIsManager,
                               FantasyCriticUser?accessingUser, IEnumerable <ManagerMessage> managerMessages, FantasyCriticUser?previousYearWinner,
                               IReadOnlyList <PublicBiddingMasterGame>?publicBiddingGames, IReadOnlySet <Guid> counterPickedPublisherGameIDs,
                               IEnumerable <Trade> activeTrades, PrivatePublisherDataViewModel?privatePublisherData, GameNewsViewModel gameNews)
    {
        League             = leagueViewModel;
        LeagueID           = leagueYear.League.LeagueID;
        Year               = leagueYear.Year;
        SupportedYear      = new SupportedYearViewModel(leagueYear.SupportedYear);
        StandardGames      = leagueYear.Options.StandardGames;
        CounterPicks       = leagueYear.Options.CounterPicks;
        DraftSystem        = leagueYear.Options.DraftSystem.Value;
        PickupSystem       = leagueYear.Options.PickupSystem.Value;
        TiebreakSystem     = leagueYear.Options.TiebreakSystem.Value;
        ScoringSystem      = leagueYear.Options.ScoringSystem.Name;
        TradingSystem      = leagueYear.Options.TradingSystem.Value;
        UnlinkedGameExists = leagueYear.Publishers.SelectMany(x => x.PublisherGames).Any(x => x.MasterGame is null);

        if (accessingUser is not null)
        {
            UserIsActive = activeUsers.Any(x => x.Id == accessingUser.Id);
        }

        HasSpecialSlots     = leagueYear.Options.HasSpecialSlots;
        OneShotMode         = leagueYear.Options.OneShotMode;
        CounterPickDeadline = leagueYear.CounterPickDeadline;
        Publishers          = leagueYear.Publishers
                              .OrderBy(x => x.DraftPosition)
                              .Select(x => new PublisherViewModel(leagueYear, x, currentDate, nextDraftPublisher, userIsInLeague, userIsInvitedToLeague, systemWideValues, counterPickedPublisherGameIDs))
                              .ToList();

        List <PlayerWithPublisherViewModel> playerVMs = new List <PlayerWithPublisherViewModel>();
        bool allPublishersMade = true;

        foreach (var user in activeUsers)
        {
            var publisher = leagueYear.GetUserPublisher(user);
            if (publisher is null)
            {
                playerVMs.Add(new PlayerWithPublisherViewModel(leagueYear, user, false));
                allPublishersMade = false;
            }
            else
            {
                bool isPreviousYearWinner = previousYearWinner is not null && previousYearWinner.Id == user.Id;
                playerVMs.Add(new PlayerWithPublisherViewModel(leagueYear, user, publisher, currentDate, systemWideValues,
                                                               userIsInLeague, userIsInvitedToLeague, false, isPreviousYearWinner));
            }
        }

        foreach (var invitedPlayer in invitedPlayers)
        {
            allPublishersMade = false;

            if (invitedPlayer.User is not null)
            {
                playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, invitedPlayer.User.UserName));
            }
            else
            {
                if (accessingUser is not null)
                {
                    if (userIsManager || string.Equals(invitedPlayer.EmailAddress, accessingUser.Email, StringComparison.OrdinalIgnoreCase))
                    {
                        playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, invitedPlayer.EmailAddress));
                    }
                    else
                    {
                        playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, "<Email Address Hidden>"));
                    }
                }
                else
                {
                    playerVMs.Add(new PlayerWithPublisherViewModel(invitedPlayer.InviteID, "<Email Address Hidden>"));
                }
            }
        }

        bool readyToSetDraftOrder = false;

        if (allPublishersMade)
        {
            Players = playerVMs.OrderBy(x => x.Publisher !.DraftPosition).ToList();
            readyToSetDraftOrder = true;
        }
        else
        {
            Players = playerVMs;
        }

        PlayStatus           = new PlayStatusViewModel(leagueYear.PlayStatus, readyToSetDraftOrder, startDraftResult.Ready, startDraftResult.Errors, draftPhase);
        EligibilityOverrides = leagueYear.EligibilityOverrides.Select(x => new EligibilityOverrideViewModel(x, currentDate)).ToList();
        TagOverrides         = leagueYear.TagOverrides.Select(x => new TagOverrideViewModel(x, currentDate)).ToList();
        SlotInfo             = new PublisherSlotRequirementsViewModel(leagueYear.Options);

        ManagerMessages = managerMessages.Select(x => new ManagerMessageViewModel(x, x.IsDismissed(accessingUser))).OrderBy(x => x.Timestamp).ToList();
        if (!userIsInLeague)
        {
            ManagerMessages = ManagerMessages.Where(x => x.IsPublic).ToList();
        }

        if (publicBiddingGames is not null)
        {
            PublicBiddingGames = publicBiddingGames.Select(x => new PublicBiddingMasterGameViewModel(x, currentDate)).ToList();
        }

        ActiveTrades         = activeTrades.Select(x => new TradeViewModel(x, currentDate)).ToList();
        PrivatePublisherData = privatePublisherData;
        GameNews             = gameNews;
    }