public async Task <IActionResult> Post(string session, [FromBody] AddItemRequest request)
        {
            LoadSession(Guid.Parse(session));

            //Get URL from list
            ListItem listItem = itemProvider.GetList().Where(x => x.Name.ToLower() == request.Name.ToLower()).FirstOrDefault();

            //if it's an item, and it already exists in list, add to existing item
            if (listItem != null && listItem.Type == "Item")
            {
                Item existingitem = (Item)inventory.Where(x => x.Name == listItem.Name).FirstOrDefault() ?? null;
                if (existingitem != null)
                {
                    existingitem.Count += request.Value;
                }
                else
                {
                    //Make call to get object info
                    string response = await pokeProvider.Get(listItem.Url);

                    JObject obj = JObject.Parse(response);

                    string description = obj["flavor_text_entries"].Where(x => (x["language"]["name"].ToString() == "en")).FirstOrDefault()["text"].ToString();
                    description = description.Replace('\n', ' ').Replace('\f', ' ');

                    IInventoryItem item = new Item
                    {
                        Id          = ++counter,
                        Name        = listItem.Name,
                        Url         = listItem.Url,
                        Img         = obj["sprites"]["default"].ToString(),
                        Count       = request.Value,
                        Description = description
                    };

                    inventory.Add(item);
                }

                SetSession(Guid.Parse(session));
                return(Ok());
            }
            else if (listItem != null)
            {
                //Make call to get object info
                string response = await pokeProvider.Get(listItem.Url);

                JObject obj = JObject.Parse(response);

                //Item is a pokemon
                //Need to get species
                string speciesurl = obj["species"]["url"].ToString();
                string name       = obj["species"]["name"].ToString();
                string species    = await pokeProvider.Get(speciesurl);

                JObject specObj     = JObject.Parse(species);
                string  description = specObj["flavor_text_entries"].Where(x => (x["version"]["name"].ToString() == "yellow" && x["language"]["name"].ToString() == "en")).First()["flavor_text"].ToString();
                description = description.Replace('\n', ' ').Replace('\f', ' ');

                Pokemon pokemon = new Pokemon
                {
                    Id          = ++counter,
                    Name        = listItem.Name,
                    Url         = listItem.Url,
                    Img         = obj["sprites"]["front_default"].ToString(),
                    Level       = request.Value,
                    Description = description,
                    Evolution   = await GetPokemonEvolution(specObj, name)
                };

                if (pokemon.Evolution.Count > 0 && pokemon.Evolution[0].Trigger == "level-up" && pokemon.Level >= Convert.ToInt32(pokemon.Evolution[0].Level))
                {
                    request.Name = pokemon.Evolution[0].Pokemon;
                    await Post(session, request);

                    SetSession(Guid.Parse(session));
                    return(Ok());
                }

                inventory.Add(pokemon);

                SetSession(Guid.Parse(session));
                return(Ok());
            }
            else
            {
                return(BadRequest());
            }
        }
Example #2
0
 public ListController(ItemListProvider provider)
 {
     items = provider.GetList();
 }