public async Task <IActionResult> Create()
        {
            var categories =
                await this.categoriesService.GetAll <CategoryDropdownViewModel>();

            var viewModel = new AdminProductCreateInputModel();

            viewModel.Categories = categories;

            return(this.View(viewModel));
        }
        public async Task <IActionResult> Create(AdminProductCreateInputModel inputModel)
        {
            if (!this.ModelState.IsValid)
            {
                // Pass back the categories list because POST Requests lose Collections
                var categories =
                    await this.categoriesService.GetAll <CategoryDropdownViewModel>();

                inputModel.Categories = categories;
                return(this.View(inputModel));
            }

            var imageUploadModel = new ImageUploadInputModel();

            if (inputModel.ImageModel.ImageFile != null)
            {
                imageUploadModel = new ImageUploadInputModel
                {
                    ImageFile = inputModel.ImageModel.ImageFile,
                };
                await this.UploadProductImage(imageUploadModel);
            }

            var filteredSizesInputs = inputModel.Sizes
                                      .Where(s => !string.IsNullOrEmpty(s.Name) && s.Price >= 0M).ToList();

            List <ProductSize> sizes = this.mapper.Map <List <ProductSize> >(filteredSizesInputs);

            var product = new Product
            {
                Name             = inputModel.Name,
                Description      = inputModel.Description,
                CategoryId       = inputModel.CategoryId,
                Sizes            = sizes,
                ImageUrl         = imageUploadModel.ImageUrl,
                ImageStorageName = imageUploadModel.ImageStorageName,
            };

            await this.productsService.CreateAsync(product);

            return(this.RedirectToAction("View", new { id = product.Id }));
        }