public async Task <Maybe <OpenCriticGame> > GetOpenCriticGame(int openCriticGameID) { try { var gameResponse = await _client.GetStringAsync($"game/{openCriticGameID}"); if (string.IsNullOrWhiteSpace(gameResponse)) { return(Maybe <OpenCriticGame> .None); } JObject parsedGameResponse = JObject.Parse(gameResponse); var gameName = parsedGameResponse.GetValue("name").Value <string>(); LocalDate?earliestReleaseDate = null; var releaseDateToken = parsedGameResponse.GetValue("firstReleaseDate"); var firstReleaseDateString = releaseDateToken.Value <string>(); if (!string.IsNullOrWhiteSpace(firstReleaseDateString)) { var earliestDateTime = releaseDateToken.Value <DateTime>(); earliestReleaseDate = LocalDate.FromDateTime(earliestDateTime); if (earliestReleaseDate == DefaultOpenCriticReleaseDate) { earliestReleaseDate = null; } } var score = parsedGameResponse.GetValue("topCriticScore").Value <decimal?>(); if (score == -1m) { score = parsedGameResponse.GetValue("averageScore").Value <decimal?>(); if (score != -1m) { _logger.LogWarning($"Using averageScore for game: {openCriticGameID}"); } else { score = null; } } var openCriticGame = new OpenCriticGame(openCriticGameID, gameName, score, earliestReleaseDate); return(openCriticGame); } catch (HttpRequestException httpEx) { if (httpEx.Message == "Response status code does not indicate success: 404 (Not Found).") { return(Maybe <OpenCriticGame> .None); } _logger.LogError(httpEx, $"Getting an open critic game failed: {openCriticGameID}"); throw; } catch (Exception e) { _logger.LogError(e, $"Getting an open critic game failed: {openCriticGameID}"); throw; } }
public async Task <Maybe <OpenCriticGame> > GetOpenCriticGame(int openCriticGameID) { try { var gameResponse = await _client.GetStringAsync($"/api/game?id={openCriticGameID}"); JObject parsedGameResponse = JObject.Parse(gameResponse); List <LocalDate> releaseDates = new List <LocalDate>(); var platforms = parsedGameResponse.GetValue("Platforms"); foreach (var platform in platforms.Children()) { var gamePlatforms = platform.SelectToken("GamesPlatforms"); var releaseDateToken = gamePlatforms.SelectToken("releaseDate"); if (releaseDateToken == null) { continue; } DateTime releaseDateResult = releaseDateToken.Value <DateTime>(); LocalDate releaseDate = LocalDate.FromDateTime(releaseDateResult); releaseDates.Add(releaseDate); } LocalDate?earliestReleaseDate = releaseDates.Min(); var scoreResponse = await _client.GetStringAsync($"/api/game/score?id={openCriticGameID}"); var parsedResult = JsonConvert.DeserializeObject <OpenCriticScoreResponse>(scoreResponse); if (parsedResult == null) { return(Maybe <OpenCriticGame> .None); } var openCriticGame = new OpenCriticGame(parsedResult, earliestReleaseDate); return(openCriticGame); } catch (HttpRequestException httpEx) { if (httpEx.Message == "Response status code does not indicate success: 404 (Not Found).") { return(Maybe <OpenCriticGame> .None); } _logger.LogError(httpEx, $"Getting an open critic game failed: {openCriticGameID}"); throw; } catch (Exception e) { _logger.LogError(e, $"Getting an open critic game failed: {openCriticGameID}"); throw; } }