diff --git a/src/main/java/br/com/stackpanel/duck_api/repository/ProductRepository.java b/src/main/java/br/com/stackpanel/duck_api/repository/ProductRepository.java index edb9ec0..a16e517 100644 --- a/src/main/java/br/com/stackpanel/duck_api/repository/ProductRepository.java +++ b/src/main/java/br/com/stackpanel/duck_api/repository/ProductRepository.java @@ -1,9 +1,26 @@ package br.com.stackpanel.duck_api.repository; import br.com.stackpanel.duck_api.entity.Product; + +import java.math.BigDecimal; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface ProductRepository extends JpaRepository { + + @Query(""" + SELECT prd + FROM Product prd + WHERE 1=1 + AND (:codigoProduto IS NULL OR prd.codigoProduto = :codigoProduto) + AND (:nomeProduto IS NULL OR prd.nomeProduto LIKE :nomeProduto) + AND (:descricao IS NULL OR prd.descricaoProdutos LIKE :descricao) + AND (:preco IS NULL OR prd.precoProdutoAtualizado = :preco) + """) + Product buscarProdutosFiltro(Long codigoProduto, String nomeProduto, String descricao, BigDecimal preco); + } 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 30f802b..5a74b11 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 @@ -42,6 +42,26 @@ public class ProductServiceImpl implements ProductService { @Override public ProductDTO salvarProduto(ProductDTO dto) { try { + + Product produtoExistente = productRepository.buscarProdutosFiltro(null, dto.getNomeProduto(), null, null); + + if (produtoExistente != null) { + log.warn("Produto '{}' ja existe no sistema.", dto.getNomeProduto()); + + if (produtoExistente.getPrecoProdutoAtualizado().equals(dto.getPrecoProdutoAtualizado())) { + log.info("Produto '{}' ja existe no sistema com o mesmo preco.", dto.getNomeProduto()); + return dto; + } else if (dto.getPrecoProdutoAtualizado() + .compareTo(produtoExistente.getPrecoProdutoAtualizado()) < 0) { + log.info("Produto '{}' teve preco atualizado para {}. Preco anterior: {}", + dto.getNomeProduto(), dto.getPrecoProdutoAtualizado(), + produtoExistente.getPrecoProdutoAtualizado()); + dto.setPrecoProdutoPrecoAnterior(produtoExistente.getPrecoProdutoAtualizado()); + + } + + } + Product produto = productRepository.save(productMapper.toProductEntity(dto)); log.info("Produto salvo com sucesso. ID: {}", produto.getCodigoProduto());