public JsonResult GetGoalie(int id, [FromQuery] StatParametersDto statParametersDto) { WebsiteService service = new WebsiteService(); var dto = service.GetPlayerGoalieTable(id, statParametersDto); return(new JsonResult(dto)); }
public JsonResult GetGoalieCareer([FromQuery] StatParametersDto statParametersDto) { WebsiteService service = new WebsiteService(); var dto = service.GetCareerGoalieTable(statParametersDto); return(new JsonResult(dto)); }
public JsonResult GetSkaterSeason([FromQuery] StatParametersDto statParametersDto) { WebsiteService service = new WebsiteService(); var dto = service.GetSeasonSkaterTable(statParametersDto); return(new JsonResult(dto)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }