示例#1
0
        public JsonResult GetGoalie(int id, [FromQuery] StatParametersDto statParametersDto)
        {
            WebsiteService service = new WebsiteService();
            var            dto     = service.GetPlayerGoalieTable(id, statParametersDto);

            return(new JsonResult(dto));
        }
示例#2
0
        public JsonResult GetGoalieCareer([FromQuery] StatParametersDto statParametersDto)
        {
            WebsiteService service = new WebsiteService();
            var            dto     = service.GetCareerGoalieTable(statParametersDto);

            return(new JsonResult(dto));
        }
示例#3
0
        public JsonResult GetSkaterSeason([FromQuery] StatParametersDto statParametersDto)
        {
            WebsiteService service = new WebsiteService();
            var            dto     = service.GetSeasonSkaterTable(statParametersDto);

            return(new JsonResult(dto));
        }
示例#4
0
        private static StatParametersDto CleanPlayerParameters(StatParametersDto paramDto)
        {
            StatParametersDto cleanParameters = new StatParametersDto();

            cleanParameters.Season     = null;
            cleanParameters.Era        = null;
            cleanParameters.Team       = paramDto.Team ?? 0;
            cleanParameters.League     = paramDto.League ?? 1;
            cleanParameters.SeasonType = paramDto.SeasonType ?? 1;
            cleanParameters.Col        = paramDto.Col;
            cleanParameters.Page       = paramDto.Page ?? 0;
            return(cleanParameters);
        }
示例#5
0
        private static int GetPageCount(StatParametersDto cleanParameters, IQueryable <IdStatPair> idStatPairs)
        {
            int pageSize  = 20;
            int pageCount = (int)Math.Ceiling((double)idStatPairs.Count() / (double)pageSize);

            pageCount = Math.Min(pageCount, 10);

            if (cleanParameters.Page.Value > pageCount)
            {
                cleanParameters.Page = pageCount;
            }
            if (cleanParameters.Page.Value < 0)
            {
                cleanParameters.Page = 0;
            }

            return(pageCount);
        }
示例#6
0
        private static StatParametersDto CleanSeasonParameters(StatParametersDto paramDto)
        {
            StatParametersDto cleanParameters = new StatParametersDto();

            cleanParameters.Season     = paramDto.Season ?? 0;
            cleanParameters.Era        = paramDto.Era ?? 0;
            cleanParameters.Team       = paramDto.Team ?? 0;
            cleanParameters.League     = paramDto.League ?? 1;
            cleanParameters.SeasonType = paramDto.SeasonType ?? 1;
            cleanParameters.Col        = paramDto.Col;
            cleanParameters.Page       = paramDto.Page ?? 0;

            if (cleanParameters.Era > 0)
            {
                cleanParameters.Season = 0;
            }

            return(cleanParameters);
        }
示例#7
0
        public StatTableDto GetPlayerGoalieTable(int goalieId, StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanPlayerParameters(paramDto);

            using (db = new BojoBoxContext())
            {
                LeagueDto leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto   teamDto   = GetTeam(cleanParameters.Team.Value);
                PlayerDto goalieDto = GetGoalie(goalieId);

                statTableDto.HeaderText = goalieDto.Name;

                var goalieSeasonsQuery = db.GoalieSeasons
                                         .Include(a => a.Goalie)
                                         .Include(a => a.Team)
                                         .Include(a => a.League)
                                         .Where(a => a.GoalieId == goalieDto.Id);

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.isPlayoffs == isPlayoffs);

                if (cleanParameters.League > 0)
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.LeagueId == leagueDto.Id);
                }

                int teamCount = goalieSeasonsQuery.Where(a => a.Team != null).Select(a => a.Team.Id).Distinct().Count();

                statTableDto.Teams = goalieSeasonsQuery.Select(a => a.Team).Where(a => a != null).DistinctBy(a => a.Id).Select(a => TeamDto.Create(a)).ToList();

                if (cleanParameters.Team > 0)
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.TeamId == cleanParameters.Team);
                }
                else
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.SubtotalForId == null);
                }

                List <GoalieSeasonFullDto> goalieSeasonDtos = goalieSeasonsQuery.Select(a => GoalieSeasonFullDto.Create(a)).ToList();

                int i = 1;
                List <PlayerTableRow> rows = new List <PlayerTableRow>();
                foreach (var dto in goalieSeasonDtos)
                {
                    PlayerTableRow row = new PlayerTableRow();
                    row.Player = dto.Goalie;
                    row.Rank   = i++;
                    row.Season = dto.Season;
                    row.Team   = dto.Team;
                    row.Stats  = GetGoalieStats(dto);
                    rows.Add(row);
                }

                if (cleanParameters.Col == null)
                {
                    rows = rows.OrderByDescending(a => a.Season).ToList();
                }
                else
                {
                    rows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13)).ToList();
                }

                statTableDto.PlayerRows = rows;

                List <int> totals = new List <int>();
                if (rows.Any())
                {
                    totals = GetTotals(rows);
                    totals.Insert(0, teamCount);
                    totals.Insert(0, rows.Count());
                }
                statTableDto.Totals = totals;
            }

            statTableDto.DisplayType    = "player";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
示例#8
0
        public StatTableDto GetCareerGoalieTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanCareerParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 1;

            using (db = new BojoBoxContext())
            {
                LeagueDto  leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto    teamDto   = GetTeam(cleanParameters.Team.Value);
                List <int> teamIds   = null;
                if (teamDto != null)
                {
                    teamIds = GetFranchiseTeamIds(teamDto.Id);
                }

                statTableDto.Teams = GetTeamParameters(leagueDto.Id);

                statTableDto.HeaderText = leagueDto.Acronym + " - Career Stats";

                var goalieCareerQuery = db.GoalieSeasons.Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    goalieCareerQuery = goalieCareerQuery.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }
                else
                {
                    goalieCareerQuery = goalieCareerQuery.Where(a => a.TeamId.HasValue);
                }

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                goalieCareerQuery = goalieCareerQuery.Where(a => a.isPlayoffs == isPlayoffs);

                var idStatPairs = GetIdStatPairsCareer(cleanParameters.Col, goalieCareerQuery);
                idStatPairs = idStatPairs.GroupBy(a => a.Id, b => b.Stat, (x, y) => new IdStatPair(x, y.Sum()));

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                var selectedGoalieIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var goalieRows = db.GoalieSeasons
                                 .Include(a => a.Goalie)
                                 .Where(a => selectedGoalieIds.Contains(a.GoalieId))
                                 .Where(a => a.TeamId.HasValue)
                                 .Where(a => a.LeagueId == leagueDto.Id)
                                 .Where(a => a.isPlayoffs == isPlayoffs);

                if (teamDto != null)
                {
                    goalieRows = goalieRows.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }

                statTableDto.PlayerRows = goalieRows.GroupBy(a => a.Goalie, b => b, (skater, rows) => new PlayerTableRow()
                {
                    Player      = PlayerDto.Create(skater),
                    Season      = null,
                    Team        = null,
                    SeasonCount = rows.Select(a => a.Season).Distinct().Count(),
                    TeamCount   = rows.Where(x => x.GoalieId == skater.Id).Select(x => x.TeamId).Distinct().Count(),
                    Stats       = new int[]
                    {
                        rows.Sum(x => x.GamesPlayed),
                        rows.Sum(x => x.Wins),
                        rows.Sum(x => x.Losses),
                        rows.Sum(x => x.OvertimeLosses),
                        rows.Sum(x => x.Minutes),
                        rows.Sum(x => x.PenaltyMinutes),
                        rows.Sum(x => x.Shutouts),
                        rows.Sum(x => x.GoalsAgainst),
                        rows.Sum(x => x.ShotsAgainst),
                        rows.Sum(x => x.Assists),
                        rows.Sum(x => x.EmptyGoalAgainst),
                        rows.Sum(x => x.PenaltyShotSaves),
                        rows.Sum(x => x.PenaltyShotAttempts),
                        rows.Sum(x => x.Starts),
                        rows.Sum(x => x.Backups),
                    }
                })
                                          .ToList();

                statTableDto.PlayerRows = statTableDto.PlayerRows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(4));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "career";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
示例#9
0
        public StatTableDto GetSeasonGoalieTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanSeasonParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 1;

            using (db = new BojoBoxContext())
            {
                LeagueDto leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto   teamDto   = GetTeam(cleanParameters.Team.Value);

                statTableDto.Teams      = GetTeamParameters(leagueDto.Id);
                statTableDto.Seasons    = GetSeasonParameters(leagueDto.Id, cleanParameters.SeasonType == 2);
                statTableDto.HeaderText = leagueDto.Acronym + " - Season Stats";

                var goalieSeasonQuery = db.GoalieSeasons
                                        .Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.TeamId == teamDto.Id);
                }
                else
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.SubtotalForId == null);
                }

                switch (cleanParameters.SeasonType)
                {
                case 1: goalieSeasonQuery = goalieSeasonQuery.Where(a => !a.isPlayoffs); break;

                case 2: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.isPlayoffs); break;
                }

                if (cleanParameters.Era > 0)
                {
                    switch (cleanParameters.Era)
                    {
                    case 1: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season >= 12); break;

                    case 2: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season <= 11 && a.Season >= 9); break;

                    case 3: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season <= 8); break;
                    }
                }

                if (cleanParameters.Season > 0)
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season == cleanParameters.Season);
                }

                var idStatPairs = GetIdStatPairs(cleanParameters.Col, goalieSeasonQuery);

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                int[] selectedIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var goalieSeasonDtos = db.GoalieSeasons
                                       .Include(a => a.Team)
                                       .Include(a => a.Goalie)
                                       .Where(a => selectedIds.Contains(a.Id))
                                       .Select(a => GoalieSeasonFullDto.Create(a))
                                       .ToList();

                List <PlayerTableRow> rows = new List <PlayerTableRow>();
                foreach (var dto in goalieSeasonDtos)
                {
                    PlayerTableRow row = new PlayerTableRow();
                    row.Player = dto.Goalie;
                    row.Season = dto.Season;
                    row.Team   = dto.Team;
                    row.Stats  = GetGoalieStats(dto);
                    rows.Add(row);
                }
                statTableDto.PlayerRows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(4));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "season";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
示例#10
0
        public StatTableDto GetCareerSkaterTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanCareerParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 3;

            using (db = new BojoBoxContext())
            {
                LeagueDto  leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto    teamDto   = GetTeam(cleanParameters.Team.Value);
                List <int> teamIds   = null;
                if (teamDto != null)
                {
                    teamIds = GetFranchiseTeamIds(teamDto.Id);
                }

                statTableDto.Teams = GetTeamParameters(leagueDto.Id);

                statTableDto.HeaderText = leagueDto.Acronym + " - Career Stats";

                var skaterCareerQuery = db.SkaterSeasons.Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    skaterCareerQuery = skaterCareerQuery.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }
                else
                {
                    skaterCareerQuery = skaterCareerQuery.Where(a => a.TeamId.HasValue);
                }

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                skaterCareerQuery = skaterCareerQuery.Where(a => a.isPlayoffs == isPlayoffs);

                var idStatPairs = GetIdStatPairsCareer(cleanParameters.Col, skaterCareerQuery);

                idStatPairs = idStatPairs.GroupBy(a => a.Id, b => b.Stat, (x, y) => new IdStatPair(x, y.Sum()));

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                var selectedSkaterIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var skaterRows = db.SkaterSeasons
                                 .Include(a => a.Skater)
                                 .Where(a => selectedSkaterIds.Contains(a.SkaterId))
                                 .Where(a => a.TeamId.HasValue)
                                 .Where(a => a.LeagueId == leagueDto.Id)
                                 .Where(a => a.isPlayoffs == isPlayoffs);

                if (teamDto != null)
                {
                    skaterRows = skaterRows.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }

                statTableDto.PlayerRows = skaterRows.GroupBy(a => a.Skater, b => b, (skater, rows) => new PlayerTableRow()
                {
                    Player      = PlayerDto.Create(skater),
                    Season      = null,
                    Team        = null,
                    SeasonCount = rows.Select(a => a.Season).Distinct().Count(),
                    TeamCount   = rows.Where(x => x.SkaterId == skater.Id).Select(x => x.TeamId).Distinct().Count(),
                    Stats       = new int[]
                    {
                        rows.Sum(x => x.GamesPlayed),
                        rows.Sum(x => x.Goals),
                        rows.Sum(x => x.Assists),
                        rows.Sum(x => x.Points),
                        rows.Sum(x => x.PlusMinus),
                        rows.Sum(x => x.PenaltyMinutes),
                        rows.Sum(x => x.PenaltyMajors),
                        rows.Sum(x => x.Hits),
                        rows.Sum(x => x.HitsTaken),
                        rows.Sum(x => x.Shots),
                        rows.Sum(x => x.OwnShotsBlocked),
                        rows.Sum(x => x.OwnShotsMissed),
                        rows.Sum(x => x.ShotsBlocked),
                        rows.Sum(x => x.MinutesPlayed),
                        rows.Sum(x => x.PPGoals),
                        rows.Sum(x => x.PPAssists),
                        rows.Sum(x => x.PPPoints),
                        rows.Sum(x => x.PPShots),
                        rows.Sum(x => x.PPMinutes),
                        rows.Sum(x => x.PKGoals),
                        rows.Sum(x => x.PKAssists),
                        rows.Sum(x => x.PKPoints),
                        rows.Sum(x => x.PKShots),
                        rows.Sum(x => x.PKMinutes),
                        rows.Sum(x => x.GameWinningGoals),
                        rows.Sum(x => x.GameTyingGoals),
                        rows.Sum(x => x.FaceoffWins),
                        rows.Sum(x => x.FaceoffsTotal),
                        rows.Sum(x => x.EmptyNetGoals),
                        rows.Sum(x => x.HatTricks),
                        rows.Sum(x => x.PenaltyShotGoals),
                        rows.Sum(x => x.PenaltyShotAttempts),
                        rows.Sum(x => x.FightsWon),
                        rows.Sum(x => x.FightsLost),
                        rows.Sum(x => x.FightsDraw)
                    }
                })
                                          .ToList();

                statTableDto.PlayerRows = statTableDto.PlayerRows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "career";
            statTableDto.PlayerType     = "skater";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }