private JObject CheckDamageRelation(DamageRelations damage, string pokeType) { var res = new JObject(); res["Do_double_damage"] = damage.Damage_Relations.Double_Damage_To.Exists(x => x.Name == pokeType); res["Receive_half_damage"] = damage.Damage_Relations.Half_Damage_From.Exists(x => x.Name == pokeType); res["No_damage_received"] = damage.Damage_Relations.No_Damage_From.Exists(x => x.Name == pokeType); return(res); }
private async Task <DamageRelations> ObtainDamageRelationAsync(string url) { var damageRelationData = new DamageRelations(); using (var httpClient = new HttpClient()) { using (var response = await httpClient.GetAsync(url)) { if (!response.IsSuccessStatusCode) { throw new Exception("Something went wrong when obtaining damage of pokemon"); } string apiResponse = await response.Content.ReadAsStringAsync(); damageRelationData = JsonConvert.DeserializeObject <DamageRelations>(apiResponse); } } return(damageRelationData); }
public async Task <IList <PokemonResult> > GetPokemons(List <string> names) { List <PokemonResult> result = new List <PokemonResult>(); if (names.Count == 0) { return(CheckEmptyResult(result)); } foreach (var pokemonName in names.Distinct()) { PokemonResult pokemonResult = new PokemonResult() { IsSuccessStatusCode = false, PokemonName = pokemonName }; result.Add(pokemonResult); try { using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri(basePokemonServiceUrl); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync(basePokemonServiceUrl + "/pokemon/" + pokemonName); if (response.IsSuccessStatusCode) { var resonseString = await response.Content.ReadAsStringAsync(); var results = JsonConvert.DeserializeObject <PokemonResult>(resonseString).Types.Distinct(); foreach (var pkType in results) { var type = pkType.type; var pokemonType = new Type(); var pokemonType2 = new Type2(); pokemonType2.name = type.name; pokemonType2.url = type.url; var response1 = await client.GetAsync(pokemonType2.url); pokemonResult.IsSuccessStatusCode = response1.IsSuccessStatusCode; if (response1.IsSuccessStatusCode) { var resonseTypeString = await response1.Content.ReadAsStringAsync(); var resultType = JsonConvert.DeserializeObject <Type2>(resonseTypeString); var doubleDamage = resultType.damage_relations; var damageRelation = new DamageRelations(); damageRelation.double_damage_to = doubleDamage?.double_damage_to?.Select(x => new DoubleDamageTo() { name = x.name, url = x.url })?.Distinct()?.ToList(); //strong damageRelation.double_damage_from = doubleDamage?.double_damage_from?.Select(x => new DoubleDamageFrom() { name = x.name, url = x.url })?.Distinct()?.ToList(); //vulnerable damageRelation.half_damage_from = doubleDamage?.half_damage_from?.Select(x => new HalfDamageFrom() { name = x.name, url = x.url })?.Distinct()?.ToList(); //resistance damageRelation.half_damage_to = doubleDamage?.half_damage_to?.Select(x => new HalfDamageTo() { name = x.name, url = x.url })?.Distinct()?.ToList(); //weakness damageRelation.no_damage_from = doubleDamage?.no_damage_from?.Select(x => new NoDamageFrom() { name = x.name, url = x.url })?.Distinct()?.ToList(); //no damage pokemonType2.damage_relations = damageRelation; } pokemonType.type = pokemonType2; if (pokemonResult.Types == null) { pokemonResult.Types = new List <Type>(); } pokemonResult.Types.Add(pokemonType); } } else { pokemonResult.IsSuccessStatusCode = false; } } } catch (Exception ex) { //TODO log the exception using log handler in future; Debug.WriteLine("EXCEPTION : " + ex.Message); pokemonResult.Error = ex; pokemonResult.IsSuccessStatusCode = false; } } return(result); }
/// <summary> /// This method is using wrapper libraries PokeApiNet by PoroCYon - Alternative Way /// </summary> /// <param name="names">list of pokemanname</param> /// <returns></returns> public async Task <IList <PokemonResult> > GetPokemonsFromLibrary(List <string> names) { pokeApiClient = new PokeApiClient(); List <PokemonResult> result = new List <PokemonResult>(); if (names.Count == 0) { return(CheckEmptyResult(result)); } foreach (var pokemonName in names.Distinct()) { PokemonResult pokemonResult = new PokemonResult(); PokeApiNet.Pokemon pokemon = null; try { pokemonResult.PokemonName = pokemonName; pokemon = await pokeApiClient.GetResourceAsync <PokeApiNet.Pokemon>(pokemonName); foreach (var p in pokemon.Types) { var pokemonType = new Type(); var pokemonType2 = new Type2(); pokemonType2.name = p.Type.Name; pokemonType2.url = p.Type.Url; var type = await pokeApiClient.GetResourceAsync(p.Type); var damageR = type.DamageRelations; var damageRelation = new DamageRelations(); damageRelation.double_damage_to = damageR?.DoubleDamageTo?.Select(x => new DoubleDamageTo() { name = x.Name, url = x.Url })?.Distinct()?.ToList(); //strong damageRelation.double_damage_from = damageR?.DoubleDamageFrom?.Select(x => new DoubleDamageFrom() { name = x.Name, url = x.Url })?.Distinct()?.ToList(); //vulnerable damageRelation.half_damage_from = damageR?.HalfDamageFrom.Select(x => new HalfDamageFrom() { name = x.Name, url = x.Url })?.Distinct()?.ToList(); //resistance damageRelation.half_damage_to = damageR?.HalfDamageTo?.Select(x => new HalfDamageTo() { name = x.Name, url = x.Url })?.Distinct()?.ToList(); //weakness damageRelation.no_damage_from = damageR?.NoDamageTo?.Select(x => new NoDamageFrom() { name = x.Name, url = x.Url })?.Distinct()?.ToList(); //no damage pokemonResult.IsSuccessStatusCode = true; pokemonType2.damage_relations = damageRelation; pokemonType.type = pokemonType2; if (pokemonResult.Types == null) { pokemonResult.Types = new List <Type>(); } pokemonResult.Types.Add(pokemonType); } } catch (Exception ex) { //todo log the exception using log handler in future; Debug.WriteLine("EXCEPTION : " + ex.Message); pokemonResult.Error = ex; pokemonResult.IsSuccessStatusCode = false; } finally { pokemonResult.Pokemon = pokemon; result.Add(pokemonResult); } } return(result); }