public async Task <IActionResult> Create(GuidePostDataModel data)
        {
            var allItems = await this.itemsProvider.GetAllItemsAsync();

            var items = new List <string> {
                data.Item1, data.Item2, data.Item3, data.Item4, data.Item5, data.Item6
            }.Select(x => allItems.SingleOrDefault(y => y.ItemId == x)).ToList();

            foreach (var item in items)
            {
                if (item == null)
                {
                    this.ModelState.AddModelError(nameof(item), "Item not found");
                }
            }

            if (await this.heroesProvider.GetHeroAsync(data.HeroId) == null)
            {
                this.ModelState.AddModelError(nameof(data.HeroId), "Hero not found");
            }


            if (!ModelState.IsValid)
            {
                return(this.Redirect("/guides/create"));
            }

            var user = await this.userProvider.GetCurrentUserAsync(this.HttpContext);

            await this.guidesService.AddGuide(user.Id, data);

            return(this.RedirectToAction("index", "home"));
        }
        public async Task AddGuide(string userId, GuidePostDataModel data)
        {
            var user = await this.dotaHelperData.Users.FindAsync(userId);

            var guideToAdd = new Guide {
                Creator = user, HeroId = data.HeroId, Title = data.Title, Text = data.Text, Item1Id = data.Item1, Item2Id = data.Item2, Item3Id = data.Item3, Item4Id = data.Item4, Item5Id = data.Item5, Item6Id = data.Item6
            };

            user.PostedGuides.Add(guideToAdd);

            await this.dotaHelperData.SaveChangesAsync();
        }
        public async Task <GuidePostDataModel> GetCreateModel()
        {
            var itemsTask  = this.itemsProvider.GetAllItemsAsync();
            var heroesTask = this.heroesProvider.GetAllHeroesAsync();
            var items      = await itemsTask;
            var heroes     = await heroesTask;

            var heroIdsToNames = heroes.ToDictionary(x => x.Id, x => x.Name);
            var filteredItems  = items.Where(x => !this.SkippedItemQualities.Contains(x.Quality) && x.Cost != "0" && x.ItemId != "1032").ToList();
            var model          = new GuidePostDataModel {
                HeroIdsToNames = heroIdsToNames, Items = filteredItems
            };

            return(model);
        }