private List <PokemonResult> CheckEmptyResult(List <PokemonResult> result)
        {
            PokemonResult pokemonResult = new PokemonResult();

            pokemonResult.IsSuccessStatusCode = false;
            result.Add(pokemonResult);
            return(result);
        }
Пример #2
0
        private static PokemonResult GetResult(PokemonSpecies pokemonSpecies)
        {
            var pokemonApiResult = new PokemonResult
            {
                Text = pokemonSpecies.FlavorTextEntries.Where(flavorTexts => flavorTexts.Language.Name == "en").Select(TrimLineBreaks).FirstOrDefault()
            };

            return(pokemonApiResult);
        }
        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);
        }
Пример #5
0
        public async Task <IList <PokemonResult> > GetPokemons(List <string> names)
        {
            List <PokemonResult> fakePokemons = new List <PokemonResult>();

            foreach (var name in names)
            {
                var fakePoke = new PokemonResult()
                {
                    Error               = null,
                    PokemonName         = name,
                    IsSuccessStatusCode = true,
                    Types               = new List <Models.Type>()
                    {
                        new Models.Type()
                        {
                            type = new Type2()
                            {
                                name             = "normal",
                                damage_relations = new DamageRelations()
                                {
                                    double_damage_from = new List <DoubleDamageFrom>()
                                    {
                                        new DoubleDamageFrom()
                                        {
                                            name = "snake", url = ""
                                        },
                                        new DoubleDamageFrom()
                                        {
                                            name = "fire", url = ""
                                        },
                                    },
                                    double_damage_to = new List <DoubleDamageTo>()
                                    {
                                        new DoubleDamageTo()
                                        {
                                            name = "speed", url = ""
                                        },
                                        new DoubleDamageTo()
                                        {
                                            name = "smile", url = ""
                                        },
                                    },
                                    half_damage_from = new List <HalfDamageFrom>()
                                    {
                                        new HalfDamageFrom()
                                        {
                                            name = "rain", url = ""
                                        },
                                        new HalfDamageFrom()
                                        {
                                            name = "slow", url = ""
                                        },
                                    },
                                    half_damage_to = new List <HalfDamageTo>()
                                    {
                                        new HalfDamageTo()
                                        {
                                            name = "water", url = ""
                                        },
                                        new HalfDamageTo()
                                        {
                                            name = "air", url = ""
                                        },
                                    },
                                    no_damage_from = new List <NoDamageFrom>()
                                    {
                                        new NoDamageFrom()
                                        {
                                            name = "smile", url = ""
                                        },
                                        new NoDamageFrom()
                                        {
                                            name = "speed", url = ""
                                        },
                                    },
                                }
                            }
                        }
                    }
                };
                fakePokemons.Add(fakePoke);
            }

            return(await Task.FromResult(fakePokemons));
        }