public async Task <TeamHistory> getHistory(int teamId) { TeamHistory value = null; var found = _footballerCache.history.TryGetValue(teamId, out value); if (!found) { var numAttempts = 0; while (teamId != 0 && value == null && numAttempts < _maxAttempts) { if (numAttempts > 0) { _log.Warn($"Retrying history request for {teamId}"); } numAttempts++; value = await readHistory(teamId); if (value != null) { _footballerCache.history[teamId] = value; } } } return(value); }
public async Task <IDictionary <int, Record> > simulate() { TeamHistory team1History = await getHistory(_team1Id); TeamHistory team2History = await getHistory(_team2Id); return(await simulate(team1History, team2History)); }
protected async Task <int> getGameweekPoints(int gameweek, TeamHistory team) { var pts = team?.history.Where(h => h.eventId == gameweek).FirstOrDefault()?.points; if (pts == null) { var evt = await _client.getEvent(gameweek); pts = evt?.average_entry_score ?? 0; } return(pts.Value); }
/// <summary> /// Method that returns the strings without spaces /// </summary> /// <param name="pTeamHistory">The object TeamHistory we want to remove the spaces</param> /// <returns>Returns the object TeamHistory</returns> private TeamHistory returnWithoutSpaces(TeamHistory pTeamHistory) { if (pTeamHistory != null) { if (pTeamHistory.id_employee != null) { pTeamHistory.id_employee = pTeamHistory.id_employee.Trim(); } if (pTeamHistory.id_team != null) { pTeamHistory.id_team = pTeamHistory.id_team.Trim(); } } return(pTeamHistory); }
public ProcessedTeam(int teamId, EntryData ent, List <ProcessedPick> processedPicks, Score s, List <TeamMatchEvent> eventList, string chip, TeamHistory hist, List <string> frm) { id = teamId; picks = processedPicks; score = s; events = eventList; entry = ent; activeChip = chip; history = hist; form = frm; if (!string.IsNullOrEmpty(activeChip)) { _log.Info(entry.entry.name + ": " + activeChip); } }
protected async Task <IDictionary <int, Record> > simulate(TeamHistory team1, TeamHistory team2) { Record r1 = new Record(); Record r2 = new Record(); var records = new Dictionary <int, Record>(); records[team1?.entry?.id ?? 0] = r1; records[team2?.entry?.id ?? 0] = r2; int minGw = Math.Max(findMinGameweek(team1), findMinGameweek(team2)); int maxGw = Math.Min(findMaxGameweek(team1), findMaxGameweek(team2)); for (int gw = minGw; gw <= maxGw; gw++) { await updateRecords(gw, team1, team2, r1, r2); } return(records); }
protected async Task updateRecords(int gameweek, TeamHistory team1, TeamHistory team2, Record r1, Record r2) { int pts1 = await getGameweekPoints(gameweek, team1); int pts2 = await getGameweekPoints(gameweek, team2); if (pts1 > pts2) { r1.wins++; r2.losses++; } else if (pts1 < pts2) { r1.losses++; r2.wins++; } else if (pts1 == pts2) { r1.draws++; r2.draws++; } }
public ProcessedMatchTeam(int teamId, EntryData ent, Standing stand, List <ProcessedPick> processedPicks, Score s, List <TeamMatchEvent> eventList, string chip, TeamHistory history, List <string> form) : base(teamId, ent, processedPicks, s, eventList, chip, history, form) { standing = stand; }
public async Task <IActionResult> GetLeague() { Bootstrap bootstrap = await _fplApiWrapper.GetBootstrap(); int gameWeekCount = bootstrap.events.Count; LeagueStanding leagueData = await _fplApiWrapper.GetLeagueStanding(_appSettings.LeagueId); Models.View.League league = new Models.View.League() { FplLeagueId = leagueData.league.id.ToString(), Name = leagueData.league.name, Players = new List <Player>() }; foreach (var standing in leagueData.standings.results) { Player player = new Player { Name = standing.player_name, TeamName = standing.entry_name, FplPlayerId = standing.entry.ToString(), Gameweeks = new List <Gameweek>() }; TeamHistory teamHistory = await _fplApiWrapper.GetTeamHistory(standing.entry.ToString()); //todo: get scored goals to decide a tie-breaker foreach (var gw in teamHistory.current) { player.Gameweeks.Add(new Gameweek() { Number = gw.@event, Points = gw.points, PointsOnBench = gw.points_on_bench, GameweekRank = gw.rank, Transfers = gw.event_transfers, TransferCosts = gw.event_transfers_cost, OverallPoints = gw.total_points, OverallRank = gw.overall_rank, Value = gw.value }); } foreach (var chip in teamHistory.chips) { player.Gameweeks.First(x => x.Number == chip.@event).Chip = chip.name; } Models.Data.Cup cup = await _fplApiWrapper.GetCup(standing.entry.ToString()); foreach (var cupMatch in cup.cup_matches) { player.Gameweeks.First(x => x.Number == cupMatch.@event).Cup = new Models.View.Cup() { HomeFplPlayerId = cupMatch.entry_1_entry.ToString(), HomeName = cupMatch.entry_1_player_name, HomeTeamName = cupMatch.entry_1_name, HomePoints = cupMatch.entry_1_points, AwayFplPlayerId = cupMatch.entry_2_entry.ToString(), AwayName = cupMatch.entry_2_player_name, AwayTeamName = cupMatch.entry_2_name, AwayPoints = cupMatch.entry_2_points, GameweekNumber = cupMatch.@event, Winner = cupMatch.winner }; } league.Players.Add(player); } List <PlayerStanding> playerStandings = Calculations.CalculateLeagueStandings(league); return(Ok(playerStandings.OrderByDescending(x => x.Points))); }
protected int findMaxGameweek(TeamHistory team) { return(team?.history.Select(h => h.eventId).Max() ?? 1000000); }
protected int findMinGameweek(TeamHistory team) { return(team?.history.Select(h => h.eventId).Min() ?? 0); }