Compare commits
5 Commits
fe6bb33fe4
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d815b3a3e | ||
|
|
f06a9de9c6 | ||
|
|
5cecff063d | ||
|
|
039bf13882 | ||
|
|
40f71bc2df |
15
.gitea/workflows/build.yaml
Normal file
15
.gitea/workflows/build.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Build e Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main", "master" ]
|
||||
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Chamar Webhook do Coolify
|
||||
run: |
|
||||
curl -X GET "${{ secrets.DUCK_WEBHOOK }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}"
|
||||
107
pom.xml
107
pom.xml
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
@@ -10,7 +10,7 @@
|
||||
</parent>
|
||||
<groupId>br.com.stackpanel</groupId>
|
||||
<artifactId>duck-api</artifactId>
|
||||
<version>0.2.0-BETA</version>
|
||||
<version>0.3.3-BETA</version>
|
||||
<name/>
|
||||
<description/>
|
||||
<url/>
|
||||
@@ -28,9 +28,7 @@
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
<kotlin.version>2.3.10</kotlin.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
@@ -45,6 +43,17 @@
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-amqp-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
@@ -93,17 +102,6 @@
|
||||
<artifactId>spring-boot-starter-webmvc-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-test</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
@@ -112,85 +110,6 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-maven-plugin</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<extensions>true</extensions>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration/>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>test-compile</id>
|
||||
<phase>test-compile</phase>
|
||||
<goals>
|
||||
<goal>test-compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-maven-noarg</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-maven-allopen</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<jvmTarget>1.8</jvmTarget>
|
||||
<compilerPlugins>
|
||||
<plugin>jpa</plugin>
|
||||
<plugin>all-open</plugin>
|
||||
<plugin>spring</plugin>
|
||||
</compilerPlugins>
|
||||
<pluginOptions>
|
||||
<option>all-open:annotation=javax.persistence.Entity</option>
|
||||
<option>all-open:annotation=javax.persistence.Embeddable</option>
|
||||
<option>all-open:annotation=javax.persistence.MappedSuperclass</option>
|
||||
<option>all-open:annotation=jakarta.persistence.Entity</option>
|
||||
<option>all-open:annotation=jakarta.persistence.Embeddable</option>
|
||||
<option>all-open:annotation=jakarta.persistence.MappedSuperclass</option>
|
||||
</pluginOptions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-compile</id>
|
||||
<phase>none</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>default-testCompile</id>
|
||||
<phase>none</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>testCompile</id>
|
||||
<phase>test-compile</phase>
|
||||
<goals>
|
||||
<goal>testCompile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package br.com.stackpanel.duck_api.config;
|
||||
|
||||
import org.springframework.amqp.core.Queue;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import static br.com.stackpanel.duck_api.entity.enums.QueueNames.QUEUE_NOTIFICATION_CAD;
|
||||
import static br.com.stackpanel.duck_api.entity.enums.QueueNames.QUEUE_NOTIFICATION_ERROR;
|
||||
|
||||
@Configuration
|
||||
public class RabbitConfig {
|
||||
|
||||
@Bean
|
||||
public Queue queueNotificationError() {
|
||||
return new Queue(QUEUE_NOTIFICATION_ERROR.label, true);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Queue queueNotificationCad() {
|
||||
return new Queue(QUEUE_NOTIFICATION_CAD.label, true);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -35,10 +35,13 @@ public class Product {
|
||||
@Column(name = "nomplt")
|
||||
private String nomePlataforma;
|
||||
|
||||
@Column(name = "lnkprd")
|
||||
private String linkProduto;
|
||||
|
||||
public Product() {
|
||||
}
|
||||
|
||||
public Product(Long codigoProduto, String nomeProduto, String descricaoProdutos, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma) {
|
||||
public Product(Long codigoProduto, String nomeProduto, String descricaoProdutos, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma, String linkProduto) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
this.nomeProduto = nomeProduto;
|
||||
this.descricaoProdutos = descricaoProdutos;
|
||||
@@ -47,6 +50,15 @@ public class Product {
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
this.linkProduto = linkProduto;
|
||||
}
|
||||
|
||||
public String getLinkProduto() {
|
||||
return linkProduto;
|
||||
}
|
||||
|
||||
public void setLinkProduto(String linkProduto) {
|
||||
this.linkProduto = linkProduto;
|
||||
}
|
||||
|
||||
public String getDescricaoProdutos() {
|
||||
|
||||
@@ -26,10 +26,12 @@ public class ProductDTO {
|
||||
@NotNull
|
||||
private String nomePlataforma;
|
||||
|
||||
private String linkProduto;
|
||||
|
||||
public ProductDTO() {
|
||||
}
|
||||
|
||||
public ProductDTO(Long codigoProduto, String nomeProduto, String descricaoProduto, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma) {
|
||||
public ProductDTO(Long codigoProduto, String nomeProduto, String descricaoProduto, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma, String linkProduto) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
this.nomeProduto = nomeProduto;
|
||||
this.descricaoProduto = descricaoProduto;
|
||||
@@ -38,6 +40,15 @@ public class ProductDTO {
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
this.linkProduto = linkProduto;
|
||||
}
|
||||
|
||||
public String getLinkProduto() {
|
||||
return linkProduto;
|
||||
}
|
||||
|
||||
public void setLinkProduto(String linkProduto) {
|
||||
this.linkProduto = linkProduto;
|
||||
}
|
||||
|
||||
public String getDescricaoProduto() {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package br.com.stackpanel.duck_api.entity.enums;
|
||||
|
||||
public enum QueueNames {
|
||||
|
||||
QUEUE_NOTIFICATION_ERROR("QUEUE_NOTIFICATION_ERROR"),
|
||||
QUEUE_NOTIFICATION_CAD("QUEUE_NOTIFICATION_CAD");
|
||||
|
||||
|
||||
public final String label;
|
||||
|
||||
private QueueNames(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,7 +21,8 @@ public class ProductMapper {
|
||||
product.getPrecoProdutoPrecoAnterior(),
|
||||
product.getUltimaDataConsultaProduto(),
|
||||
product.getDataEnvioProduto(),
|
||||
product.getNomePlataforma()
|
||||
product.getNomePlataforma(),
|
||||
product.getLinkProduto()
|
||||
);
|
||||
|
||||
}
|
||||
@@ -39,7 +40,8 @@ public class ProductMapper {
|
||||
dto.getPrecoProdutoPrecoAnterior(),
|
||||
dto.getUltimaDataConsultaProduto(),
|
||||
dto.getDataEnvioProduto(),
|
||||
dto.getNomePlataforma()
|
||||
dto.getNomePlataforma(),
|
||||
dto.getLinkProduto()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package br.com.stackpanel.duck_api.service;
|
||||
|
||||
public interface RabbitPublisherService {
|
||||
|
||||
void sendNotificationCad(String notificationCad);
|
||||
|
||||
}
|
||||
@@ -67,7 +67,6 @@ public class ProductServiceImpl implements ProductService {
|
||||
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);
|
||||
|
||||
@@ -78,7 +77,6 @@ public class ProductServiceImpl implements ProductService {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package br.com.stackpanel.duck_api.service.impl;
|
||||
|
||||
import br.com.stackpanel.duck_api.service.RabbitPublisherService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
|
||||
import static br.com.stackpanel.duck_api.entity.enums.QueueNames.QUEUE_NOTIFICATION_ERROR;
|
||||
|
||||
public class RabbitPublisherServiceImpl implements RabbitPublisherService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(RabbitPublisherServiceImpl.class);
|
||||
private final RabbitTemplate rabbitTemplate;
|
||||
|
||||
public RabbitPublisherServiceImpl(RabbitTemplate rabbitTemplate) {
|
||||
this.rabbitTemplate = rabbitTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendNotificationCad(String notificationCad) {
|
||||
log.info("Sending notification Cad: {}", notificationCad);
|
||||
rabbitTemplate.convertAndSend(QUEUE_NOTIFICATION_ERROR.label, notificationCad);
|
||||
}
|
||||
}
|
||||
@@ -5,4 +5,10 @@ spring.datasource.password=${db_pass}
|
||||
spring.datasource.username=${db_user}
|
||||
spring.datasource.driver-class-name=org.postgresql.Driver
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
spring.jpa.show-sql=true
|
||||
spring.jpa.show-sql=true
|
||||
|
||||
|
||||
spring.rabbitmq.host=rabbit.stackpanel.com.br
|
||||
spring.rabbitmq.port=5672
|
||||
spring.rabbitmq.username=${rabbit_username}
|
||||
spring.rabbitmq.password=${rabbit_password}
|
||||
@@ -4,3 +4,9 @@ spring.datasource.url=${db_host:jdbc:postgresql://db.stackpanel.com.br:5432/nexu
|
||||
spring.datasource.password=${db_pass}
|
||||
spring.datasource.username=${db_user}
|
||||
spring.datasource.driver-class-name=org.postgresql.Driver
|
||||
|
||||
|
||||
spring.rabbitmq.host=rabbit.stackpanel.com.br
|
||||
spring.rabbitmq.port=5672
|
||||
spring.rabbitmq.username=${rabbit_username}
|
||||
spring.rabbitmq.password=${rabbit_password}
|
||||
Reference in New Issue
Block a user