Example #1
0
        public async Task <IActionResult> EditarProduto([FromForm] EditarProdutoDTO model)
        {
            _logger.LogDebug("A executar api/produto/editar -> Post");
            if (model is null)
            {
                _logger.LogWarning("O objeto EditarProdutoDTO é null!");
                return(BadRequest(nameof(model)));
            }
            try
            {
                ServiceResult <string> resultadoValidacaoImagem = _imagemService.ValidaImagem(model.File);
                if (!resultadoValidacaoImagem.Sucesso)
                {
                    _logger.LogInformation("O ficheiro não é válido para o sistema.");
                    return(BadRequest(resultadoValidacaoImagem.Erros));
                }
                else
                {
                    ServiceResult <Tuple <string, string> > resultado = _produtoBusiness.EditarProduto(model, resultadoValidacaoImagem.Resultado);
                    if (resultado.Sucesso)
                    {
                        await _imagemService.GuardarImagem(model.File, resultado.Resultado.Item1, resultado.Resultado.Item2, _webHostEnvironment.WebRootPath.ToString());

                        _logger.LogInformation($"O Produto com IdProduto {model.IdProduto} foi editado, com o nome {model.Nome}, com o preço {model.Preco} pertencente à Categoria com IdCategoria {model.IdCategoria}.");
                        return(Ok());
                    }
                    else
                    {
                        _logger.LogInformation($"Ocorreu um erro ao editar o Produto com IdProduto {model.IdProduto}.");
                        return(BadRequest(resultado.Erros));
                    }
                }
            }
            catch (ArgumentNullException e)
            {
                _logger.LogError(e, e.Message);
                return(BadRequest(new { message = e.Message }));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(StatusCode(500));
            }
        }
Example #2
0
        public ServiceResult <Tuple <string, string> > EditarProduto(EditarProdutoDTO model, string extensao)
        {
            _logger.LogDebug("A executar [ProdutoBusiness -> EditarProduto]");
            if (string.IsNullOrWhiteSpace(model.Nome))
            {
                throw new ArgumentNullException("Nome", "Campo não poder ser nulo!");
            }
            if (model.Ingredientes == null)
            {
                throw new ArgumentNullException("Ingredientes", "Campo não poder ser nulo!");
            }
            if (model.Alergenios == null)
            {
                throw new ArgumentNullException("Alergenios", "Campo não poder ser nulo!");
            }
            if (extensao == null)
            {
                throw new ArgumentNullException("Extensao", "Campo não poder ser nulo!");
            }

            IList <int>            erros   = new List <int>();
            Produto                produto = _produtoDAO.GetProduto(model.IdProduto);
            Tuple <string, string> paths   = null;

            if (produto == null)
            {
                _logger.LogWarning($"Não existe nenhum Produto com IdProduto {model.IdProduto}!");
                erros.Add((int)ErrosEnumeration.ProdutoNaoExiste);
            }
            else
            {
                if (_produtoDAO.IsAtivo(model.IdProduto))
                {
                    if (!produto.Nome.Equals(model.Nome) && _produtoDAO.ExisteNomeProduto(model.Nome))
                    {
                        _logger.LogDebug($"O Nome {model.Nome} já existe.");
                        erros.Add((int)ErrosEnumeration.NomeProdutoJaExiste);
                    }
                    else
                    {
                        if (!ValidaNome(model.Nome))
                        {
                            _logger.LogDebug($"O Nome {model.Nome} é inválido.");
                            erros.Add((int)ErrosEnumeration.NomeProdutoInvalido);
                        }
                        if (!ValidaPreco(model.Preco))
                        {
                            _logger.LogDebug($"O preço {model.Preco} é inválido.");
                            erros.Add((int)ErrosEnumeration.PrecoProdutoInvalido);
                        }
                        if (!_categoriaDAO.ExisteCategoria(model.IdCategoria))
                        {
                            _logger.LogWarning($"Não existe nenhuma Categoria, com IdCategooria {model.IdCategoria}!");
                            erros.Add((int)ErrosEnumeration.CategoriaNaoExiste);
                        }
                        if (!ValidaIngredientes(model.Ingredientes))
                        {
                            _logger.LogDebug($"O Nome de um ingrediente é inválido.");
                            erros.Add((int)ErrosEnumeration.IngredientesProdutoInvalidos);
                        }
                        if (!ValidaAlergenios(model.Alergenios))
                        {
                            _logger.LogDebug($"O Nome de um alergenio é inválido.");
                            erros.Add((int)ErrosEnumeration.AlergeniosProdutoInvalidos);
                        }


                        if (!erros.Any())
                        {
                            Produto novoProduto = _mapper.Map <Produto>(model);
                            novoProduto.ExtensaoImagem = extensao;
                            _produtoDAO.EditarProduto(novoProduto);
                            string pathAnterior = Path.Combine("Images", "Produto", $"{model.IdProduto}.{produto.ExtensaoImagem}");;
                            string pathNova     = Path.Combine("Images", "Produto", $"{model.IdProduto}.{novoProduto.ExtensaoImagem}");
                            paths = new Tuple <string, string>(pathAnterior, pathNova);
                        }
                    }
                }
                else
                {
                    _logger.LogDebug($"O Produto com idProduto {model.IdProduto} encontra-se desativado!");
                    erros.Add((int)ErrosEnumeration.ProdutoDesativado);
                }
            }
            return(new ServiceResult <Tuple <string, string> > {
                Erros = new ErrosDTO {
                    Erros = erros
                }, Sucesso = !erros.Any(), Resultado = paths
            });
        }