public async Task <CompleteEntryHistory> GetCompleteEntryHistory(CompleteEntryHistory completeEntryHistory, int teamId) { HttpClientHandler handler = new HttpClientHandler(); var response = await _httpClient.GetAuthAsync(CreateHandler(handler), $"entry/{teamId}/history/"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var currentSeasonEntryHistoryJSON = AllChildren(JObject.Parse(content)) .First(c => c.Type == JTokenType.Array && c.Path.Contains("current")) .Children <JObject>(); List <EntryHistory> currentSeasonEntryHistory = new List <EntryHistory>(); int totalTransfers = 0; int totalTransferCost = 0; foreach (JObject result in currentSeasonEntryHistoryJSON) { EntryHistory eh = result.ToObject <EntryHistory>(); currentSeasonEntryHistory.Add(eh); totalTransfers += eh.event_transfers; totalTransferCost += eh.event_transfers_cost; } var chipsUsedJSON = AllChildren(JObject.Parse(content)) .First(c => c.Type == JTokenType.Array && c.Path.Contains("chips")) .Children <JObject>(); List <BasicChip> chipsUsed = new List <BasicChip>(); foreach (JObject result in chipsUsedJSON) { BasicChip bc = result.ToObject <BasicChip>(); chipsUsed.Add(bc); } completeEntryHistory.CurrentSeasonEntryHistory = currentSeasonEntryHistory; completeEntryHistory.ChipsUsed = chipsUsed; completeEntryHistory.TotalTransfersMade = totalTransfers; completeEntryHistory.TotalTransfersCost = totalTransferCost; return(completeEntryHistory); }
public async Task <EntryHistory> AddExtraDatatoEntryHistory(EntryHistory entryHistory, CompleteEntryHistory completeEntryHistory) { var response = await _httpClient.GetAsync("bootstrap-static/"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var totalPlayersJson = AllChildren(JObject.Parse(content)) .First(c => c.Type == JTokenType.Integer && c.Path.Contains("total_players")); //EntryHistory entryHistory = new EntryHistory(); int totalPlayers = totalPlayersJson.ToObject <int>(); entryHistory.TotalPlayers = totalPlayers; var gwRankPercentile = 0m; var overallRankPercentile = 0m; if (entryHistory.rank != null) { gwRankPercentile = Math.Round(((decimal)entryHistory.rank / (decimal)totalPlayers) * 100m, 2); if (gwRankPercentile < 1) { entryHistory.GwRankPercentile = 1; } else { entryHistory.GwRankPercentile = Convert.ToInt32(Math.Ceiling(gwRankPercentile)); } } if (entryHistory.overall_rank != null) { overallRankPercentile = Math.Round(((decimal)entryHistory.overall_rank / (decimal)totalPlayers) * 100m, 2); if (overallRankPercentile < 1) { entryHistory.TotalRankPercentile = 1; } else { entryHistory.TotalRankPercentile = Convert.ToInt32(Math.Ceiling(overallRankPercentile)); } } if (completeEntryHistory.CurrentSeasonEntryHistory.Count() > 1) { var lastEventIndex = completeEntryHistory.CurrentSeasonEntryHistory.Count() - 2; entryHistory.LastEventOverallRank = completeEntryHistory.CurrentSeasonEntryHistory[lastEventIndex].overall_rank; } return(entryHistory); }
public async Task <IActionResult> Index() { ViewData["Title"] = "My Team"; var viewModel = new MyTeamViewModel(); HttpClientHandler handler = new HttpClientHandler(); int currentGwId = await GetCurrentGameWeekId(); if (Request.Cookies["teamId"] == null) { teamId = await GetTeamId(); } else { teamId = Convert.ToInt32(Request.Cookies["teamId"]); } var response = await _httpClient.GetAuthAsync(CreateHandler(handler), $"my-team/{teamId}"); if (!response.IsSuccessStatusCode) { return(RedirectToAction("Error", "Home")); } //look for 404 error here response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var myTeamJSON = JObject.Parse(content); MyTeam myTeam = JsonConvert.DeserializeObject <MyTeam>(myTeamJSON.ToString()); //var teamPicksJSON = AllChildren(myTeamJSON) // .First(c => c.Type == JTokenType.Array && c.Path.Contains("picks")) // .Children<JObject>(); //JObject transfersObject = (JObject)myTeamJSON["transfers"]; //TransferInfo transferInfo = transfersObject.ToObject<TransferInfo>(); List <Pick> teamPicks = new List <Pick>(); List <Pick> teamPicksLastWeek = new List <Pick>(); List <Transfer> transfers = new List <Transfer>(); List <PlayerPosition> positions = new List <PlayerPosition>(); //foreach (JObject result in teamPicksJSON) //{ // Pick p = result.ToObject<Pick>(); // teamPicks.Add(p); //} if (currentGwId > 1) { teamPicksLastWeek = await GetLastWeeksTeam(teamPicksLastWeek, teamId, currentGwId); foreach (var p in myTeam.picks) { if (teamPicksLastWeek.FindAll(x => x.element == p.element).Count == 0) { p.IsNewTransfer = true; } } } int gameweekId = currentGwId; var eventStatus = await GetEventStatus(); var lastEvent = eventStatus.status.LastOrDefault(); var isEventFinished = false; if (lastEvent != null) { if (lastEvent.bonus_added && eventStatus.leagues != "Updating") { isEventFinished = true; } } transfers = await GetTeamTransfers(teamId); positions = await GetPlayerPositionInfo(); myTeam.picks = await AddPlayerSummaryDataToTeam(myTeam.picks, gameweekId); myTeam.picks = await AddPlayerGameweekDataToTeam(myTeam.picks, gameweekId); myTeam.picks = await CalculateTotalPointsContributed(myTeam.picks, transfers, gameweekId); myTeam.picks = myTeam.picks.OrderBy(x => x.position).ToList(); FPLTeam teamDetails = await GetTeamInfo(teamId); var entryHistory = await GetEntryHistory(teamId, currentGwId); var completeEntryHistory = new CompleteEntryHistory(); completeEntryHistory = await GetCompleteEntryHistory(completeEntryHistory, teamId); entryHistory = await AddExtraDatatoEntryHistory(entryHistory, completeEntryHistory); entryHistory.BuyingPower = CalculateTeamBuyingPower(myTeam.picks, entryHistory); viewModel.MyTeam = myTeam; viewModel.CurrentGwId = gameweekId; //viewModel.Picks = teamPicks; viewModel.Team = teamDetails; viewModel.Positions = positions; viewModel.TotalPoints = teamDetails.summary_overall_points ?? 0; //viewModel.TransferInfo = transferInfo; viewModel.IsEventFinished = isEventFinished; viewModel.EntryHistory = entryHistory; viewModel.CompleteEntryHistory = completeEntryHistory; viewModel.EventStatus = eventStatus; return(View(viewModel)); }