Implementado logs no discord ao mudar preco, ao dar erros na busca e na cadastro do produto e erro ao atualizar preco do produto.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package br.com.stackpanel.duck_api.config;
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.enums.TypeError;
|
||||
import br.com.stackpanel.duck_api.service.impl.ProductServiceImpl;
|
||||
import com.eduardomcb.discord.webhook.WebhookClient;
|
||||
import com.eduardomcb.discord.webhook.WebhookManager;
|
||||
import com.eduardomcb.discord.webhook.models.Message;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class WebHookConfig {
|
||||
|
||||
private final String LOG_ERROR = "https://discord.com/api/webhooks/1510367769839800541/ikEQ4mnp8GBtSltnn5qwhOBawlBC8EkVfff-zFlDhBpyuTBH_-7DM0LWhEoHXNl3sHSu";
|
||||
private final String LOG_PRECO = "https://discord.com/api/webhooks/1510368038589829140/BIkXq8-n3ZxJBv5vEYrqvu7Agf-v-dz1P1RoLHmJ7J9IkJQhVWbA_hQyWKagC2ZPzPcV";
|
||||
private final String LOG_CADASTRO = "https://discord.com/api/webhooks/1510368356354490438/mYfx6EKfQk-MdOxbRj0rcvr49Z4MGfDHfeeHeneDWoMuTLGYIpjBpUzwi1vZwf5VA-pW";
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(ProductServiceImpl.class);
|
||||
|
||||
public void SendWebHook(String message, TypeError typeError){
|
||||
Message msgwh = new Message().setContent(message);
|
||||
|
||||
String urlWebHook = switch (typeError) {
|
||||
case LOG_ERROR -> LOG_ERROR;
|
||||
case LOG_PRECO -> LOG_PRECO;
|
||||
case LOG_CADASTRO -> LOG_CADASTRO;
|
||||
};
|
||||
|
||||
|
||||
WebhookManager webhookManager = new WebhookManager()
|
||||
.setChannelUrl(urlWebHook)
|
||||
.setMessage(msgwh);
|
||||
|
||||
webhookManager.setListener(
|
||||
new WebhookClient.Callback() {
|
||||
@Override
|
||||
public void onSuccess(String response) {
|
||||
log.info("Mensagem enviada com sucesso!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(int statusCode, String errorMessage) {
|
||||
log.error("Ouve uma falha ao enviar mensagem error: '{}' status: '{}'", errorMessage, statusCode);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
webhookManager.exec();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package br.com.stackpanel.duck_api.entity.enums;
|
||||
|
||||
public enum TypeError {
|
||||
LOG_ERROR,
|
||||
LOG_PRECO,
|
||||
LOG_CADASTRO;
|
||||
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
package br.com.stackpanel.duck_api.service.impl;
|
||||
|
||||
import br.com.stackpanel.duck_api.config.WebHookConfig;
|
||||
import br.com.stackpanel.duck_api.entity.Product;
|
||||
import br.com.stackpanel.duck_api.entity.dto.ProductDTO;
|
||||
import br.com.stackpanel.duck_api.entity.enums.TypeError;
|
||||
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;
|
||||
@@ -10,6 +12,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@@ -19,10 +23,12 @@ public class ProductServiceImpl implements ProductService {
|
||||
|
||||
private final ProductRepository productRepository;
|
||||
private final ProductMapper productMapper;
|
||||
private final WebHookConfig webHookConfig;
|
||||
|
||||
public ProductServiceImpl(ProductRepository productRepository, ProductMapper productMapper) {
|
||||
public ProductServiceImpl(ProductRepository productRepository, ProductMapper productMapper, WebHookConfig webHookConfig) {
|
||||
this.productRepository = productRepository;
|
||||
this.productMapper = productMapper;
|
||||
this.webHookConfig = webHookConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -34,6 +40,8 @@ public class ProductServiceImpl implements ProductService {
|
||||
} catch (Exception e) {
|
||||
log.error("Ocorreu um erro ao buscar produtos. Erro original: {}", e.getMessage());
|
||||
|
||||
webHookConfig.SendWebHook("<@&1510364267956928713> Ocorreu um erro ao buscar produtos. Erro original: " + e.getMessage(), TypeError.LOG_ERROR);
|
||||
|
||||
throw new RuntimeException("Ocorreu um erro interno ao buscar produtos.");
|
||||
}
|
||||
|
||||
@@ -42,38 +50,58 @@ public class ProductServiceImpl implements ProductService {
|
||||
@Override
|
||||
public ProductDTO salvarProduto(ProductDTO dto) {
|
||||
try {
|
||||
Product produtoExistente = productRepository.buscarProdutosFiltro(
|
||||
null, dto.getNomeProduto(), null, null
|
||||
);
|
||||
|
||||
Product produtoExistente = productRepository.buscarProdutosFiltro(null, dto.getNomeProduto(), null, null);
|
||||
Product produto;
|
||||
|
||||
if (produtoExistente != null) {
|
||||
log.warn("Produto '{}' ja existe no sistema.", dto.getNomeProduto());
|
||||
log.warn("Produto '{}' com ID: '{}' ja existe no sistema.", dto.getNomeProduto(), produtoExistente.getCodigoProduto());
|
||||
|
||||
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());
|
||||
BigDecimal precoAtual = produtoExistente.getPrecoProdutoAtualizado();
|
||||
BigDecimal precoNovo = dto.getPrecoProdutoAtualizado();
|
||||
|
||||
if (precoAtual.equals(precoNovo)) {
|
||||
log.info("Produto '{}' ID: '{}' ja existe com o mesmo preco.", dto.getNomeProduto(), produtoExistente.getCodigoProduto());
|
||||
return productMapper.toProductDTO(produtoExistente);
|
||||
|
||||
} else if (precoNovo.compareTo(precoAtual) < 0) {
|
||||
// precoNovo < precoAtual → atualiza (ficou mais barato)
|
||||
log.info("Produto '{}' ID: '{}' teve preco atualizado: {} -> {}",
|
||||
dto.getNomeProduto(), produtoExistente.getCodigoProduto(),precoAtual, precoNovo);
|
||||
|
||||
webHookConfig.SendWebHook("<@&1510364303776153803> O Produto " + dto.getNomeProduto() + " teve preco atualizado: " + precoAtual + " para " + precoNovo, TypeError.LOG_PRECO);
|
||||
|
||||
dto.setCodigoProduto(produtoExistente.getCodigoProduto());
|
||||
dto.setPrecoProdutoPrecoAnterior(precoAtual);
|
||||
produto = productRepository.save(productMapper.toProductEntity(dto));
|
||||
|
||||
} else {
|
||||
// precoNovo > precoAtual → nao atualiza
|
||||
log.info("Produto '{}' ID: '{}' ja existe com preco menor. Nenhuma alteracao feita.", dto.getNomeProduto(), produtoExistente.getCodigoProduto());
|
||||
return productMapper.toProductDTO(produtoExistente);
|
||||
}
|
||||
|
||||
} else {
|
||||
webHookConfig.SendWebHook("<@&1510364549717688460> O Produto " + dto.getNomeProduto() + " foi cadastrado com sucesso.", TypeError.LOG_CADASTRO);
|
||||
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: {}, Nome: '{}'", produto.getCodigoProduto(), produto.getNomeProduto());
|
||||
return productMapper.toProductDTO(produto);
|
||||
|
||||
} catch (DataIntegrityViolationException e) {
|
||||
String message = e.getMostSpecificCause().getMessage();
|
||||
log.error("Erro de integridade ao salvar o produto '{}'. Motivo: {}", dto.getNomeProduto(), message);
|
||||
|
||||
log.error("Erro de integridade ao salvar o produto '{}'. Motivo {}", dto.getNomeProduto(), message);
|
||||
webHookConfig.SendWebHook("<@&1510364267956928713> Erro de integridade ao salvar o produto: " + dto.getNomeProduto() + " Motivo: {}" + message, TypeError.LOG_ERROR);
|
||||
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());
|
||||
log.error("Erro inesperado ao salvar produto '{}'. Erro: {}", dto.getNomeProduto(), e.getMessage());
|
||||
|
||||
webHookConfig.SendWebHook("<@&1510364267956928713> Erro inesperado ao salvar produto: " + dto.getNomeProduto() + " Erro: " + e.getMessage(), TypeError.LOG_ERROR);
|
||||
|
||||
throw new RuntimeException("Ocorreu um erro interno ao salvar o produto.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user