public async Task <IActionResult> Edit(int id, Product product)
        {
            if (!ModelState.IsValid)
            {
                var categories = await _categoryService.FindAllAsync();

                var viewModel = new ProductsFormViewModel {
                    Product = product, Categories = categories
                };
                return(View(viewModel));
            }

            if (id != product.Id)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id incompativel." }));
            }

            try
            {
                await _productService.UpdateAsync(product);

                return(RedirectToAction(nameof(Index)));
            }
            catch (ApplicationException e)
            {
                return(RedirectToAction(nameof(Error), new { message = e.Message }));
            }
        }
        // GET: Products/Create
        public async Task <IActionResult> Create()
        {
            var categories = await _categoryService.FindAllAsync();

            var viewModel = new ProductsFormViewModel {
                Categories = categories
            };

            return(View(viewModel));
        }
        public async Task <IActionResult> Create([Bind("Name, Description, Quantity, Price, IdCategory")] Product product)
        {
            if (!ModelState.IsValid)
            {
                var categories = await _categoryService.FindAllAsync();

                var viewModel = new ProductsFormViewModel {
                    Product = product, Categories = categories
                };
                return(View(viewModel));
            }
            await _productService.InsertAsync(product);

            return(RedirectToAction(nameof(Index)));
        }
        // GET: Products/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id não encontrado." }));
            }

            var product = await _productService.FindByIdAsync(id.Value);

            if (product == null)
            {
                return(RedirectToAction(nameof(Error), new { message = "Id não encontrado." }));
            }
            List <Category> categories = await _categoryService.FindAllAsync();

            ProductsFormViewModel viewModel = new ProductsFormViewModel {
                Product = product, Categories = categories
            };

            return(View(viewModel));
        }