Ejemplo n.º 1
0
        /// <summary>
        /// Upserts all entries into the cache.
        /// </summary>
        public async Task <IEnumerable <TResource> > UpsertAll()
        {
            var resourcesPage = await PokeApi.GetNamedPage <TResource>();

            var allResources = await GetAllResources();

            if (!allResources.Any() || allResources.ToList().Count != resourcesPage.Count)
            {
                const int pageSize = 20;

                var entryList = new List <TResource>();

                var pagesUsed = 0;
                NamedApiResourceList <TResource> page;
                do
                {
                    page = await PokeApi.GetNamedPage <TResource>(pageSize, pageSize *pagesUsed++);

                    var entries = await UpsertMany(page.Results);

                    entryList.AddRange(entries);
                } while (!string.IsNullOrEmpty(page.Next));

                return(entryList);
            }

            // if we have the right number of entries then we're probably good
            return(allResources);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns the resource with the given ID, creating a cache entry if it doesn't exist.
        /// </summary>
        public override async Task <TResource> Upsert(UrlNavigation <TResource> res)
        {
            if (res == null)
            {
                return(null);
            }

            var namedRes = res as NamedApiResource <TResource>;

            var name  = namedRes.Name;
            var entry = await CacheSource.GetCacheEntry(name);

            if (entry == null)
            {
                var entryType = typeof(TResource).Name;
                Logger.LogInformation($"Caching {entryType} with name {name}...");

                var resource = await PokeApi.Get(res);

                return(await Create(resource));
            }
            else if (IsStale(entry))
            {
                // update cache entry if it's stale
                var entryType = typeof(TResource).Name;
                Logger.LogInformation($"Cached {entryType} with name {name} is stale - updating...");

                var resource = await PokeApi.Get(res);
                await Update(resource);

                return(resource);
            }

            return(entry.Resource);
        }
        /// <summary>
        /// Returns all Pokemon species up to a limit from an offset.
        /// </summary>
        public async Task <PokemonSpeciesEntry[]> GetPokemonSpecies(int limit, int offset)
        {
            var resources = await PokeApi.GetNamedPage <PokemonSpecies>(limit, offset);

            var species = await UpsertMany(resources);

            return(species.OrderBy(s => s.SpeciesId).ToArray());
        }
Ejemplo n.º 4
0
        public void Setup()
        {
            Mocker = new AutoMocker();

            optionsValues = new PokeApi
            {
                ImgUrl     = "urlImg.com",
                PokeApiUrl = "https://pokeapi.co/api/v2/pokemon/",
                Weaknesses = "https://pokeapi.co/api/v2/pokemon/"
            };
        }
Ejemplo n.º 5
0
        public void Setup()
        {
            Mocker = new AutoMocker();

            optionsValues = new PokeApi
            {
                ImgUrl     = "https://assets.pokemon.com/assets/cms2/img/pokedex/full",
                PokeApiUrl = "https://pokeapi.co/api/v2/pokemon/",
                Weaknesses = "https://pokeapi.co/api/v2/pokemon/"
            };
        }
        /// <summary>
        /// Returns the Pokemon's encounters in all version groups.
        /// </summary>
        private async Task <List <WithId <EncounterEntry[]> > > GetEncounters(Pokemon pokemon)
        {
            var encounterEntriesList = new List <WithId <EncounterEntry[]> >();

            // enumerate version groups spanned by this Pokemon's encounters
            // TODO: create encounters cache service
            var encounters = await PokeApi.GetEncounters(pokemon);

            var versions = await VersionService.UpsertMany(encounters.GetDistinctVersions());

            var versionGroups = await VersionGroupsService.UpsertManyByVersionIds(versions.Select(v => v.VersionId));

            foreach (var vg in versionGroups)
            {
                var relevantEncounters = encounters.Where(e => IsInVersionGroup(e, vg));

                // create entries for relevant encounters
                var encounterEntries = new List <EncounterEntry>();
                foreach (var encounter in relevantEncounters)
                {
                    var locationArea = await LocationAreasService.Upsert(encounter.LocationArea);

                    var displayNames = await GetDisplayNames(encounter);

                    // filter to relevant version details
                    var relevantVersionDetails = encounter.VersionDetails.Where(vd =>
                    {
                        var versionName = vd.Version.Name;
                        return(vg.Versions.Select(v => v.Name).Contains(versionName));
                    });

                    var chances = await GetChances(relevantVersionDetails);

                    var encounterDetails = await GetEncounterDetails(relevantVersionDetails);

                    var encounterEntry = new EncounterEntry
                    {
                        LocationAreaId = locationArea.LocationAreaId,
                        DisplayNames   = displayNames.ToList(),
                        Details        = encounterDetails.ToList()
                    };

                    encounterEntries.Add(encounterEntry);
                }

                // add encounter entries to list indexed by version group ID
                var entryList = new WithId <EncounterEntry[]>(vg.VersionGroupId, encounterEntries.ToArray());
                encounterEntriesList.Add(entryList);
            }

            return(encounterEntriesList);
        }
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            StreamWriter FileLog = new StreamWriter(@"TestApiList.log", false);

            foreach (PropertyInfo prop in typeof(UriInfo).GetProperties())
            {
                WriteLog(FileLog);
                WriteLog(FileLog, $"TEST API [{prop.Name}] START: ");
                try
                {
                    string url = prop.GetValue(PokeApi.ApiUri).ToString();
                    WriteLog(FileLog, $"Requesting to {url}");
                    var result = PokeApi.Call_GetList(requestUrl: url, limit: 3);
                    WriteLog(FileLog, $"Response:");
                    #region
                    WriteLog(FileLog, $"\tCount:\t{result.Count}");
                    WriteLog(FileLog, $"\tNext:\t{result.Next}");
                    WriteLog(FileLog, $"\tPrev:\t{result.Previous}");
                    WriteLog(FileLog, $"\tResult:");
                    foreach (var item in result.Results)
                    {
                        WriteLog(FileLog, $"\t\tName:{item.Name}");
                        WriteLog(FileLog, $"\t\tUrl:{item.Url}");
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    WriteLog(FileLog, $"ERROR: {ex.Message}");
                }

                WriteLog(FileLog, $"TEST API [{prop.Name}] END.");
                WriteLog(FileLog);
            }
            FileLog.Close();
        }
Ejemplo n.º 8
0
 private void Awake()
 {
     api = this;
 }
Ejemplo n.º 9
0
        public static async Task <List <PokeApi> > GetOnePokemon(int pokeId)
        {
            List <PokeApi> _pokemon = new List <PokeApi>();
            //Define your base url
            string baseURL = $"http://pokeapi.co/api/v2/pokemon/{pokeId}/";

            //Have your api call in try/catch block.
            try
            {
                using (HttpClient client = new HttpClient())
                {
                    using (HttpResponseMessage res = await client.GetAsync(baseURL))
                    {
                        using (HttpContent content = res.Content)
                        {
                            string data = await content.ReadAsStringAsync();

                            if (data != null)
                            {
                                //Parses the data to a object
                                var dataObj = JObject.Parse(data);
                                //this will create a new instance of PokeApi, and string interpolate the name property to the JSON object.
                                ////Which will convert it to a string, since each property value is a instance of JToken.



                                try                                                                                                                              // Need to get rid of this try catch and replace it with a if(["types"].count > 1{})
                                {
                                    PokeApi PokeApis = new PokeApi(name: $"{dataObj["name"]}"                                                                    // for the pokemon's name
                                                                   , spriteUrl: $"{dataObj["sprites"]["front_default"]}"                                         // for the sprite url
                                                                   , types: $"{dataObj["types"][0]["type"]["name"] + "/" + dataObj["types"][1]["type"]["name"]}" //for the types
                                                                   , pokedexId: $"{dataObj["id"]}");
                                    //Console.WriteLine("Pokemon Name: {0} \nSprite URL: {1} \nPokemon Type(s): {2}\nPokedex ID: {3}", PokeApis.name, PokeApis.spriteUrl, PokeApis.types, PokeApis.pokedexId);
                                    _pokemon.Add(PokeApis);
                                    return(_pokemon);
                                }
                                catch (Exception ex)
                                {
                                    PokeApi PokeApis = new PokeApi(name: $"{dataObj["name"]}"                            // for the pokemon's name
                                                                   , spriteUrl: $"{dataObj["sprites"]["front_default"]}" // for the sprite url
                                                                   , types: $"{dataObj["types"][0]["type"]["name"]}"     //for the types  - dont know if it prints for dual type
                                                                   , pokedexId: $"{dataObj["id"]}");

                                    //Console.WriteLine("Pokemon Name: {0} \nSprite URL: {1} \nPokemon Type: {2}\nPokedex ID: {3}", PokeApis.name, PokeApis.spriteUrl, PokeApis.types, PokeApis.pokedexId);
                                    _pokemon.Add(PokeApis);
                                    return(_pokemon);
                                }
                            }
                            else
                            {
                                //If data is null log it into console.
                                Console.WriteLine("Data is null!");
                                return(null);
                            }
                        }
                    }
                }
                //Catch any exceptions and log it into the console.
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
                return(null);
            }
        }
Ejemplo n.º 10
0
 public async Task Pokemon([Remainder] String name) => await PokeApi.getPokemonInfo(Context, name);