Adicionado verificacao se o preco que esta vindo do produe menor do que o que ja esta salvo no banco." #1
@@ -1,9 +1,26 @@
|
|||||||
package br.com.stackpanel.duck_api.repository;
|
package br.com.stackpanel.duck_api.repository;
|
||||||
|
|
||||||
import br.com.stackpanel.duck_api.entity.Product;
|
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.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface ProductRepository extends JpaRepository<Product, Long> {
|
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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ProductServiceImpl implements ProductService {
|
public class ProductServiceImpl implements ProductService {
|
||||||
@@ -42,6 +43,26 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
@Override
|
@Override
|
||||||
public ProductDTO salvarProduto(ProductDTO dto) {
|
public ProductDTO salvarProduto(ProductDTO dto) {
|
||||||
try {
|
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));
|
Product produto = productRepository.save(productMapper.toProductEntity(dto));
|
||||||
|
|
||||||
log.info("Produto salvo com sucesso. ID: {}", produto.getCodigoProduto());
|
log.info("Produto salvo com sucesso. ID: {}", produto.getCodigoProduto());
|
||||||
|
|||||||
Reference in New Issue
Block a user