diff --git a/src/main/java/br/com/stackpanel/duck_api/exception/ProductInvalidException.java b/src/main/java/br/com/stackpanel/duck_api/exception/ProductInvalidException.java new file mode 100644 index 0000000..e80298c --- /dev/null +++ b/src/main/java/br/com/stackpanel/duck_api/exception/ProductInvalidException.java @@ -0,0 +1,9 @@ +package br.com.stackpanel.duck_api.exception; + +public class ProductInvalidException extends RuntimeException { + + public ProductInvalidException(String message) { + super(message); + } + +} diff --git a/src/main/java/br/com/stackpanel/duck_api/service/impl/ProductServiceImpl.java b/src/main/java/br/com/stackpanel/duck_api/service/impl/ProductServiceImpl.java index 6866e86..0780e8f 100644 --- a/src/main/java/br/com/stackpanel/duck_api/service/impl/ProductServiceImpl.java +++ b/src/main/java/br/com/stackpanel/duck_api/service/impl/ProductServiceImpl.java @@ -1,18 +1,22 @@ package br.com.stackpanel.duck_api.service.impl; - import br.com.stackpanel.duck_api.entity.Product; import br.com.stackpanel.duck_api.entity.dto.ProductDTO; import br.com.stackpanel.duck_api.entity.mapper.ProductMapper; +import br.com.stackpanel.duck_api.exception.ProductInvalidException; import br.com.stackpanel.duck_api.repository.ProductRepository; import br.com.stackpanel.duck_api.service.ProductService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; - import java.util.List; @Service public class ProductServiceImpl implements ProductService { + private final Logger log = LoggerFactory.getLogger(ProductServiceImpl.class); + private final ProductRepository productRepository; private final ProductMapper productMapper; @@ -23,18 +27,35 @@ public class ProductServiceImpl implements ProductService { @Override public List buscarTodosProdutos() { - return productRepository.findAll().stream() - .map(productMapper::toProductDTO) - .toList(); + try { + return productRepository.findAll().stream() + .map(productMapper::toProductDTO) + .toList(); + } catch (Exception e) { + log.error("Ocorreu um erro ao buscar produtos. Erro original: {}", e.getMessage()); + + throw new RuntimeException("Ocorreu um erro interno ao buscar produtos."); + } + } @Override public ProductDTO salvarProduto(ProductDTO dto) { + try{ + Product produto = productRepository.save(productMapper.toProductEntity(dto)); - Product produto = productMapper.toProductEntity(dto); + log.info("Produto salvo com sucesso. ID: {}", produto.getCodigoProduto()); - Product produtoSalvo = productRepository.save(produto); + return productMapper.toProductDTO(produto); + } catch (DataIntegrityViolationException e) { + String message = e.getMostSpecificCause().getMessage(); - return productMapper.toProductDTO(produtoSalvo); + log.error("Erro de integridade ao salvar o produto '{}'. Motivo {}", dto.getNomeProduto(), message); + throw new ProductInvalidException("Os dados do produto sao invalidos ou ja existem no sistema.") + } catch (Exception e) { + log.error("Erro inesperado ao salvar produto '{}'. Erro original {}", dto.getNomeProduto(), e.getMessage()); + + throw new RuntimeException("Ocorreu um erro interno ao salvar o produto."); + } } }