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)); } }
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 }); }