public IList <TeamRating> GetTeamRatings() { SqlConnection connection = new SqlConnection(_connectionString); connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); // attempt to get the rankings data from the db TeamRatingGateway trGateway = new TeamRatingGateway(connection, transaction); TeamGateway teamGateway = new TeamGateway(connection, transaction); LeagueGateway leagueGateway = new LeagueGateway(connection, transaction); var teamRankings = trGateway.GetCurrentTeamRatings(); if (!teamRankings.Any() || DateTime.Now.Subtract(teamRankings[0].AddedDate).TotalDays > 30) { var teams = teamGateway.GetAllWftdaTeams(); var leagues = leagueGateway.GetAllLeagues(); var teamMapper = new TeamMapperGateway(connection, transaction).GetAllTeamMappers(); var wftdaData = GetWftdaRankingsData(); var ftsData = GetFtsRankingsData(); teamRankings = new List <TeamRating>(250); var leftOut = new List <WftdaRankingData>(); foreach (WftdaRankingData wftda in wftdaData) { var fts = ftsData.FirstOrDefault(f => string.Equals(wftda.TeamName.Substring(0, 10), f.TeamName.Substring(0, 10), StringComparison.OrdinalIgnoreCase)); if (fts != null) { teamRankings.Add(new TeamRating { FtsRank = fts.Rank, FtsScore = fts.Rating, TeamID = 0, TeamName = wftda.TeamName, WftdaRank = wftda.Rank, WftdaScore = wftda.RatingScore, WftdaStrength = wftda.Strength }); } else { // try the team mapper? TeamMapper map = teamMapper.FirstOrDefault(tm => string.Equals(tm.TeamSpelling, wftda.TeamName, StringComparison.OrdinalIgnoreCase)); if (map != null) { var otherMaps = teamMapper.Where(tm => tm.TeamID == map.TeamID).Select(tm => tm.TeamSpelling); fts = ftsData.FirstOrDefault(f => otherMaps.Contains(f.TeamName)); if (fts != null) { teamRankings.Add(new TeamRating { FtsRank = fts.Rank, FtsScore = fts.Rating, TeamID = map.TeamID, TeamName = wftda.TeamName, WftdaRank = wftda.Rank, WftdaScore = wftda.RatingScore, WftdaStrength = wftda.Strength }); } else { leftOut.Add(wftda); } } } } List <TeamRating> leftOvers = new List <TeamRating>(); foreach (TeamRating teamRating in teamRankings) { if (teamRating.TeamID > 0) { continue; } var team = teams.FirstOrDefault(t => string.Equals(t.Name, teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if (team != null) { teamRating.TeamID = team.ID; } else { var league = leagues.FirstOrDefault(l => string.Equals(l.Name, teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if (league != null) { team = teams.First(t => t.LeagueID == league.ID); teamRating.TeamID = team.ID; } else { // try the team mapper? TeamMapper map = teamMapper.FirstOrDefault(tm => string.Equals(tm.TeamSpelling, teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if (map != null) { teamRating.TeamID = map.TeamID; } // TODO: else, create the League and the team? The nature of leagueID makes that tough... } } } trGateway.InsertTeamRatings(teamRankings.Where(tr => tr.TeamID != 0).ToList()); } transaction.Commit(); connection.Close(); return(teamRankings); }
public IList<TeamRating> GetTeamRatings() { SqlConnection connection = new SqlConnection(_connectionString); connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); // attempt to get the rankings data from the db TeamRatingGateway trGateway = new TeamRatingGateway(connection, transaction); TeamGateway teamGateway = new TeamGateway(connection, transaction); LeagueGateway leagueGateway = new LeagueGateway(connection, transaction); var teamRankings = trGateway.GetCurrentTeamRatings(); if (!teamRankings.Any() || DateTime.Now.Subtract(teamRankings[0].AddedDate).TotalDays > 30 ) { var teams = teamGateway.GetAllWftdaTeams(); var leagues = leagueGateway.GetAllLeagues(); var teamMapper = new TeamMapperGateway(connection, transaction).GetAllTeamMappers(); var wftdaData = GetWftdaRankingsData(); var ftsData = GetFtsRankingsData(); teamRankings = new List<TeamRating>(250); var leftOut = new List<WftdaRankingData>(); foreach(WftdaRankingData wftda in wftdaData) { var fts = ftsData.FirstOrDefault(f => string.Equals(wftda.TeamName.Substring(0, 10), f.TeamName.Substring(0, 10), StringComparison.OrdinalIgnoreCase)); if(fts != null) { teamRankings.Add(new TeamRating { FtsRank = fts.Rank, FtsScore = fts.Rating, TeamID = 0, TeamName = wftda.TeamName, WftdaRank = wftda.Rank, WftdaScore = wftda.RatingScore, WftdaStrength = wftda.Strength }); } else { // try the team mapper? TeamMapper map = teamMapper.FirstOrDefault(tm => string.Equals(tm.TeamSpelling, wftda.TeamName, StringComparison.OrdinalIgnoreCase)); if(map != null) { var otherMaps = teamMapper.Where(tm => tm.TeamID == map.TeamID).Select(tm => tm.TeamSpelling); fts = ftsData.FirstOrDefault(f => otherMaps.Contains(f.TeamName)); if (fts != null) { teamRankings.Add(new TeamRating { FtsRank = fts.Rank, FtsScore = fts.Rating, TeamID = map.TeamID, TeamName = wftda.TeamName, WftdaRank = wftda.Rank, WftdaScore = wftda.RatingScore, WftdaStrength = wftda.Strength }); } else { leftOut.Add(wftda); } } } } List<TeamRating> leftOvers = new List<TeamRating>(); foreach(TeamRating teamRating in teamRankings) { if (teamRating.TeamID > 0) continue; var team = teams.FirstOrDefault(t => string.Equals(t.Name,teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if(team != null) { teamRating.TeamID = team.ID; } else { var league = leagues.FirstOrDefault(l => string.Equals(l.Name, teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if (league != null) { team = teams.First(t => t.LeagueID == league.ID); teamRating.TeamID = team.ID; } else { // try the team mapper? TeamMapper map = teamMapper.FirstOrDefault(tm => string.Equals(tm.TeamSpelling, teamRating.TeamName, StringComparison.OrdinalIgnoreCase)); if (map != null) { teamRating.TeamID = map.TeamID; } // TODO: else, create the League and the team? The nature of leagueID makes that tough... } } } trGateway.InsertTeamRatings(teamRankings.Where(tr => tr.TeamID != 0).ToList()); } transaction.Commit(); connection.Close(); return teamRankings; }