// Combine data to conform a valid swcharacter view model public SWCharacter GenerateNewCharacter(int id, SWCharRootObject charRoot, SWPlanetRootObject planetRoot) { SWCharacter character = new SWCharacter() { Id = id, Name = charRoot.name, Height = int.Parse(charRoot.height), Mass = float.Parse(charRoot.mass), Hair_Color = charRoot.hair_color, Skin_Color = charRoot.skin_color, Eye_Color = charRoot.eye_color, Birth_Year = charRoot.birth_year, Gender = charRoot.gender, HomeWorld = new SWHomeWorld() { Name = planetRoot.name, Population = planetRoot.population, Know_Residents_Count = planetRoot.residents.Count() }, Species_Name = charRoot.species.First(), Average_Rating = 1, Max_Rating = 1 }; return(character); }
public async Task <ActionResult <SWCharacter> > GetById(int id) { // invalid parameter passed case if (id < 1) { return(NotFound()); } SWCharacter myCharacter; //access cache if (!_cache.TryGetValue(id, out SWCharacter characterCacheEntry)) { //entity not stored in cache , retrieve and cache it. //... SWCharRootObject myChar = await _swapiService.PopulateCharacterData(id); // retrieve character's planet data , extract id from character root object homeplanet slot. string planetId = Regex.Match(myChar.homeworld, @"\d+").Value; SWPlanetRootObject itsPlanet = await _swapiService.PopulatePlanetData(int.Parse(planetId)); //Generate a Character viewModel using populated data from swapi... myCharacter = _swapiService.GenerateNewCharacter(id, myChar, itsPlanet); //replace path to species with species name string speciesId = Regex.Match(myCharacter.Species_Name, @"\d+").Value; myCharacter.Species_Name = await _swapiService.GetSpeciesName(int.Parse(speciesId)); myCharacter.Average_Rating = 1; myCharacter.Max_Rating = 1; //generate options required by memcache module... var cacheEntryOptions = new MemoryCacheEntryOptions() // Set cache entry size by extension method. .SetSize(1) // Keep in cache for this time, reset time if accessed. .SetSlidingExpiration(TimeSpan.FromSeconds(3600)); // finaly , store it in memcache... _cache.Set(id, myCharacter, cacheEntryOptions); } else { // cache entry found... myCharacter = characterCacheEntry; } if (myCharacter == null) { return(NotFound()); } else { return(myCharacter); } }