Compare commits

..

5 Commits

2 changed files with 37 additions and 0 deletions

View File

@@ -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<Product, Long> {
@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);
}

View File

@@ -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());