diff --git a/.docker-compose/spring-app.yml b/.docker-compose/spring-app.yml
index 6448136..bd8b0ca 100644
--- a/.docker-compose/spring-app.yml
+++ b/.docker-compose/spring-app.yml
@@ -1,4 +1,4 @@
-version: '3.8'
+version: '3.3'
services:
@@ -7,7 +7,7 @@ services:
ports:
- 8080:8080
environment:
- MYSQL_URL: jdbc:mysql://db:3306/sample
+ MYSQL_URL: jdbc:mysql://sampledb:3306/sample
MYSQL_USER: user
- MYSQL_PASSWORD: pass
+ MYSQL_PASSWORD: pass123
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index cb55666..e0d4582 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -33,5 +33,8 @@ jobs:
restore-keys: |
${{ runner.os }}-maven-
- - name: Run Tests
+ - name: Run Tests with Quarkus (default)
run: mvn --batch-mode verify coveralls:report -DrepoToken=${{ secrets.COVERALLS_REPO_TOKEN }}
+
+ - name: Run Tests with Spring Boot
+ run: mvn --batch-mode verify -Pspring
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index bcd08b3..d618908 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,6 +57,7 @@ RUN curl https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/${FLYWAY
# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="quarkus-run.jar"
+
COPY app/quarkus-app/target/quarkus-app/ /deployments/
COPY resources/flyway/db/migration /flyway/sql
diff --git a/Dockerfile.spring b/Dockerfile.spring
new file mode 100644
index 0000000..8f2f444
--- /dev/null
+++ b/Dockerfile.spring
@@ -0,0 +1,34 @@
+FROM openjdk:17.0.2
+
+ARG RUN_JAVA_VERSION=1.3.8
+ENV FLYWAY_VERSION 7.5.2
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
+
+# Install java and the run-java script
+# Also set up permissions for user `1001`
+RUN microdnf update \
+ && microdnf install curl ca-certificates tar gzip \
+ && microdnf clean all \
+ && mkdir /deployments \
+ && mkdir /flyway \
+ && chown 1001 /deployments \
+ && chmod "g+rwX" /deployments \
+ && chown 1001:root /deployments \
+ && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
+ && chown 1001 /deployments/run-java.sh \
+ && chmod 540 /deployments/run-java.sh
+
+# Install and configure Flyway
+RUN curl https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/${FLYWAY_VERSION}/flyway-commandline-${FLYWAY_VERSION}.tar.gz -o /flyway/flyway-commandline-${FLYWAY_VERSION}.tar.gz \
+ && tar -xzf /flyway/flyway-commandline-${FLYWAY_VERSION}.tar.gz --strip-components=1 -C /flyway \
+ && rm /flyway/flyway-commandline-${FLYWAY_VERSION}.tar.gz \
+ && chown 1001 /flyway/flyway \
+ && chmod 540 /flyway/flyway
+
+COPY app/spring-app/target/*.jar /deployments/app.jar
+COPY resources/flyway/db/migration /flyway/sql
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT [ "/deployments/run-java.sh" ]
diff --git a/README.md b/README.md
index ffcb994..1429c96 100644
--- a/README.md
+++ b/README.md
@@ -79,7 +79,7 @@ Fornecendo toda infraestrutura necessária para o desenvolvedor.
### Requerido
-- Java 11+
+- Java 17+
- Maven 3+
- docker
- docker-compose
@@ -89,6 +89,7 @@ Fornecendo toda infraestrutura necessária para o desenvolvedor.
O framework é definido pelo profile, sendo que o default é do Quarkus.
#### Quarkus
+
```bash
mvn clean install -Pquarkus
# or by default:
@@ -96,6 +97,7 @@ mvn clean install
```
#### Spring boot
+
```bash
mvn clean install -Pspring
```
@@ -105,6 +107,11 @@ mvn clean install -Pspring
docker build -t helpdev/app-quarkus-jvm .
```
+## Gerando imagem docker com o Spring
+```bash
+docker build -t helpdev/app-spring-jvm .
+```
+
## Iniciando serviço
*O comando sobe toda infraestrutura necessária para a aplicação*
@@ -113,10 +120,17 @@ docker-compose -f .docker-compose/stack.yml up
```
*Agora podemos iniciar nossa aplicação*
+
+Quarkus:
```bash
docker-compose -f .docker-compose/quarkus-app.yml up
```
+Spring:
+```bash
+docker-compose -f .docker-compose/spring-app.yml up
+```
+
## Consumindo API
diff --git a/acceptance-test/pom.xml b/acceptance-test/pom.xml
index e927a61..b7f8fff 100644
--- a/acceptance-test/pom.xml
+++ b/acceptance-test/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
4.0.0
@@ -15,17 +15,16 @@
17
17
true
- 3.1.0
- 8.0.30
+ 8.0.33
0.38.1
true
- 2.35.0
+ 3.0.0-beta-10
${project.groupId}
- jaxrs-controller-v1
+ jakarta-controller-v1
org.junit.jupiter
@@ -73,9 +72,9 @@
rest-assured-all
- mysql
- mysql-connector-java
- ${mysql-connector-java.version}
+ com.mysql
+ mysql-connector-j
+ ${mysql-connector-j.version}
com.github.javafaker
@@ -84,12 +83,33 @@
com.github.tomakehurst
- wiremock-jre8
- ${wiremock-jre8.version}
+ wiremock
+ ${wiremock.version}
test
+
+
+ quarkus
+
+ true
+
+
+ Dockerfile
+
+
+
+ spring
+
+ false
+
+
+ Dockerfile.spring
+
+
+
+
@@ -112,7 +132,7 @@
dockerfile
${project.parent.basedir}
- ${project.parent.basedir}/Dockerfile
+ ${project.parent.basedir}/${dockerfile}
@@ -123,6 +143,11 @@
org.apache.maven.plugins
maven-failsafe-plugin
${maven-failsafe-plugin.version}
+
+
+ ${project.activeProfiles[0].id}
+
+
diff --git a/acceptance-test/src/test/java/br/com/helpdev/atdd/DefaultContainerStarterTest.java b/acceptance-test/src/test/java/br/com/helpdev/atdd/DefaultContainerStarterTest.java
index 3b023cd..17c0250 100644
--- a/acceptance-test/src/test/java/br/com/helpdev/atdd/DefaultContainerStarterTest.java
+++ b/acceptance-test/src/test/java/br/com/helpdev/atdd/DefaultContainerStarterTest.java
@@ -22,6 +22,8 @@ abstract class DefaultContainerStarterTest {
private static final GenericContainer> MYSQL_CONTAINER;
private static final Network NETWORK = Network.newNetwork();
protected static final WireMockServer MOCK_SERVER;
+ private static final String PROFILE_ID_SPRING = "spring";
+ public static final String PROP_PROFILE_ID = "profileId";
/* Containers are initialized in static block to create only once in test execution */
static {
@@ -66,7 +68,10 @@ private static GenericContainer> buildAppContainer(final Startable... dependsO
.withEnv("MYSQL_PASSWORD", "test")
.withEnv("MYSQL_URL", "jdbc:mysql://testdb:" + MySQLContainer.MYSQL_PORT + "/test?autoReconnect=true&useSSL=false")
.withExposedPorts(8080)
- .waitingFor(Wait.forHttp("/q/health/ready").forStatusCode(200))
+ .waitingFor(System.getProperty(PROP_PROFILE_ID).equals(PROFILE_ID_SPRING) ?
+ Wait.forHttp("/actuator/health").forStatusCode(200) :
+ Wait.forHttp("/q/health/ready").forStatusCode(200)
+ )
.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("APP_CONTAINER")));
}
diff --git a/adapter/input/jaxrs-controller-v1/pom.xml b/adapter/input/jakarta-controller-v1/pom.xml
similarity index 77%
rename from adapter/input/jaxrs-controller-v1/pom.xml
rename to adapter/input/jakarta-controller-v1/pom.xml
index 7bf8b9c..0e7ef5b 100644
--- a/adapter/input/jaxrs-controller-v1/pom.xml
+++ b/adapter/input/jakarta-controller-v1/pom.xml
@@ -5,18 +5,18 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../../pom.xml
4.0.0
- jaxrs-controller-v1
+ jakarta-controller-v1
17
17
- 2.2.6
- 2.1.5
+ 2.2.14
+ 2.2.15
@@ -25,19 +25,16 @@
lombok
- javax.ws.rs
- javax.ws.rs-api
+ jakarta.ws.rs
+ jakarta.ws.rs-api
io.swagger.core.v3
- swagger-core
+ swagger-core-jakarta
${swagger-core.version}
compile
-
- javax.validation
- validation-api
-
+
${project.groupId}
domain
@@ -85,32 +82,36 @@
+
+
- io.openapitools.swagger
- swagger-maven-plugin
+ io.swagger.core.v3
+ swagger-maven-plugin-jakarta
${swagger-maven-plugin.version}
br.com.helpdev.controller
- ${basedir}/target/resources/br/com/helpdev/controller
- openapi
- JSON,YAML
+ openapi
+ ${basedir}/target/resources/br/com/helpdev/controller
+ JSONANDYAML
+
true
- generate-doc
compile
- generate
+ resolve
+
+ org.apache.maven.plugins
maven-resources-plugin
- 2.6
+ ${maven-resources-plugin.version}
copy-resources
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java
similarity index 91%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java
index 224c217..6d18846 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/MessageController.java
@@ -13,16 +13,16 @@
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import javax.inject.Inject;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
@Path("/v1/message")
@Produces(MediaType.APPLICATION_JSON)
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java
similarity index 83%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java
index a0ce4a6..0ed9ab6 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/OpenApiController.java
@@ -4,12 +4,12 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
+import jakarta.inject.Named;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
import java.io.InputStream;
-import javax.inject.Named;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
@Named
@Path("/v1/openapi")
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/config/CustomObjectMapperConfig.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/config/CustomObjectMapperConfig.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/config/CustomObjectMapperConfig.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/config/CustomObjectMapperConfig.java
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java
similarity index 76%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java
index 03e3b9d..0f2500d 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java
@@ -2,11 +2,15 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.ZonedDateTime;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
@Builder
+@AllArgsConstructor
+@NoArgsConstructor
public class ChatResponseDto {
private StatusResponseDto status;
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/CommunicationChannelDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/CommunicationChannelDto.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/CommunicationChannelDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/CommunicationChannelDto.java
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java
similarity index 59%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java
index 3b10e76..05c9200 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java
@@ -1,14 +1,14 @@
package br.com.helpdev.controller.dto;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import lombok.NoArgsConstructor;
@Data
@Builder
-@EqualsAndHashCode
-@ToString
+@AllArgsConstructor
+@NoArgsConstructor
public class ErrorDto {
private String message;
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java
similarity index 72%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java
index e82d44c..f322991 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java
@@ -1,19 +1,19 @@
package br.com.helpdev.controller.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import java.time.ZonedDateTime;
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import lombok.NoArgsConstructor;
@Data
@Builder
-@ToString
-@EqualsAndHashCode
+@AllArgsConstructor
+@NoArgsConstructor
public class MessageCreateDto {
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java
similarity index 83%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java
index f1c5375..434dd82 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java
@@ -3,11 +3,15 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.ZonedDateTime;
import java.util.Collection;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
@Builder
+@AllArgsConstructor
+@NoArgsConstructor
public class MessageResponseDto {
private Long id;
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java
similarity index 73%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java
index 64c93f4..ab1c438 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java
@@ -1,16 +1,15 @@
package br.com.helpdev.controller.dto;
-import br.com.helpdev.domain.Recipient;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import lombok.NoArgsConstructor;
@Data
-@EqualsAndHashCode
-@ToString
@Builder
+@AllArgsConstructor
+@NoArgsConstructor
public class RecipientDto {
@NotBlank(message = "Recipient name can't be null!")
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/StatusResponseDto.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/StatusResponseDto.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/StatusResponseDto.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/dto/StatusResponseDto.java
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java
similarity index 81%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java
index 910ca1a..0fe2965 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotFoundExceptionMapper.java
@@ -2,9 +2,9 @@
import br.com.helpdev.controller.dto.ErrorDto;
import br.com.helpdev.usecase.exception.MessageNotFoundException;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.ext.ExceptionMapper;
+import jakarta.ws.rs.ext.Provider;
@Provider
public class NotFoundExceptionMapper implements ExceptionMapper {
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java
similarity index 80%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java
index 1b10be6..db32f11 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/handler/NotificationExceptionMapper.java
@@ -2,9 +2,9 @@
import br.com.helpdev.controller.dto.ErrorDto;
import br.com.helpdev.domain.exception.NotificationException;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.ext.ExceptionMapper;
+import jakarta.ws.rs.ext.Provider;
@Provider
public class NotificationExceptionMapper implements ExceptionMapper {
diff --git a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java
similarity index 97%
rename from adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java
rename to adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java
index f17d8e1..5952198 100644
--- a/adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java
+++ b/adapter/input/jakarta-controller-v1/src/main/java/br/com/helpdev/controller/mapper/ControllerMessageMapper.java
@@ -13,11 +13,11 @@
import br.com.helpdev.domain.vo.MessageBody;
import br.com.helpdev.domain.vo.MessageId;
import br.com.helpdev.domain.vo.Phone;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Named;
import java.util.Collection;
import java.util.Collections;
import java.util.stream.Collectors;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Named;
@Named
@ApplicationScoped
diff --git a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/MessageControllerTest.java b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/MessageControllerTest.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/MessageControllerTest.java
rename to adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/MessageControllerTest.java
diff --git a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java
similarity index 99%
rename from adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java
rename to adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java
index 3fd0ac5..f9b338f 100644
--- a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java
+++ b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/OpenApiControllerTest.java
@@ -1,3 +1,4 @@
+
package br.com.helpdev.controller;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotFoundExceptionMapperTest.java b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotFoundExceptionMapperTest.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotFoundExceptionMapperTest.java
rename to adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotFoundExceptionMapperTest.java
diff --git a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotificationExceptionMapperTest.java b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotificationExceptionMapperTest.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotificationExceptionMapperTest.java
rename to adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/handler/NotificationExceptionMapperTest.java
diff --git a/adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/mapper/ControllerMessageMapperTest.java b/adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/mapper/ControllerMessageMapperTest.java
similarity index 100%
rename from adapter/input/jaxrs-controller-v1/src/test/java/br/com/helpdev/controller/mapper/ControllerMessageMapperTest.java
rename to adapter/input/jakarta-controller-v1/src/test/java/br/com/helpdev/controller/mapper/ControllerMessageMapperTest.java
diff --git a/adapter/output/feign-http-services/pom.xml b/adapter/output/feign-http-services/pom.xml
new file mode 100644
index 0000000..e7b38c2
--- /dev/null
+++ b/adapter/output/feign-http-services/pom.xml
@@ -0,0 +1,95 @@
+
+
+
+ modular-architecture
+ br.com.helpdev
+ 0.0.4-SNAPSHOT
+ ../../../pom.xml
+
+ 4.0.0
+
+ feign-http-services
+
+
+ 17
+ 17
+ **/*Dto.*
+ **.dto.*
+ 12.4
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ provided
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ io.github.openfeign
+ feign-jakarta
+ ${feign-jakarta.version}
+
+
+
+
+ br.com.helpdev
+ use-case
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+ org.slf4j
+ slf4j-simple
+ test
+
+
+
+
\ No newline at end of file
diff --git a/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImpl.java b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImpl.java
new file mode 100644
index 0000000..d152efa
--- /dev/null
+++ b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImpl.java
@@ -0,0 +1,27 @@
+package br.com.helpdev.output.feign;
+
+
+import br.com.helpdev.output.feign.client.RandomDataApiClient;
+import br.com.helpdev.usecase.port.ProtocolGeneratorClient;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+
+@ApplicationScoped
+@Named
+public class ProtocolGeneratorClientImpl implements ProtocolGeneratorClient {
+
+ private final RandomDataApiClient randomDataApiClient;
+
+ @Inject
+ public ProtocolGeneratorClientImpl(final RandomDataApiClient randomDataApiClient) {
+ this.randomDataApiClient = randomDataApiClient;
+ }
+
+ @Override
+ public String generateNewProtocol() {
+ /* Generate US-SSN to simulate protocol */
+ return randomDataApiClient.generate().getValidUsSsn();
+ }
+
+}
diff --git a/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/RandomDataApiClient.java b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/RandomDataApiClient.java
new file mode 100644
index 0000000..4ce3862
--- /dev/null
+++ b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/RandomDataApiClient.java
@@ -0,0 +1,14 @@
+package br.com.helpdev.output.feign.client;
+
+import br.com.helpdev.output.feign.client.dto.RandomIdNumberDto;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Produces;
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(name = "random-data-api", url = "${random-data-api.url}", path = "/api/id_number/random_id_number")
+public interface RandomDataApiClient {
+
+ @GET
+ @Produces("application/json")
+ RandomIdNumberDto generate();
+}
diff --git a/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/dto/RandomIdNumberDto.java b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/dto/RandomIdNumberDto.java
new file mode 100644
index 0000000..74be14e
--- /dev/null
+++ b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/client/dto/RandomIdNumberDto.java
@@ -0,0 +1,14 @@
+package br.com.helpdev.output.feign.client.dto;
+
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import lombok.Data;
+
+@Data
+@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
+public class RandomIdNumberDto {
+ private String id;
+ private String uid;
+ private String validUsSsn;
+ private String invalidUsSsn;
+}
diff --git a/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/config/FeignContractConfiguration.java b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/config/FeignContractConfiguration.java
new file mode 100644
index 0000000..a47b1d0
--- /dev/null
+++ b/adapter/output/feign-http-services/src/main/java/br/com/helpdev/output/feign/config/FeignContractConfiguration.java
@@ -0,0 +1,21 @@
+package br.com.helpdev.output.feign.config;
+
+import feign.Contract;
+import feign.jaxrs.JakartaContract;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+@EnableFeignClients(
+ basePackages = {"br.com.helpdev.output.feign"}
+)
+public class FeignContractConfiguration {
+
+ @Bean
+ Contract contract() {
+ return new JakartaContract();
+ }
+
+}
diff --git a/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImplTest.java b/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImplTest.java
new file mode 100644
index 0000000..4084d54
--- /dev/null
+++ b/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/ProtocolGeneratorClientImplTest.java
@@ -0,0 +1,37 @@
+package br.com.helpdev.output.feign;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import br.com.helpdev.output.feign.client.RandomDataApiClient;
+import br.com.helpdev.output.feign.client.dto.RandomIdNumberDto;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+class ProtocolGeneratorClientImplTest {
+
+ @Mock
+ private RandomDataApiClient randomDataApiClient;
+
+ @InjectMocks
+ private ProtocolGeneratorClientImpl protocolGeneratorClient;
+
+ @Test
+ void shouldGeneratedProtocolWithSuccess() {
+ final var randomIdNumberDto = mock(RandomIdNumberDto.class);
+ final var expectedProtocol = "xpto";
+
+ when(randomDataApiClient.generate()).thenReturn(randomIdNumberDto);
+ when(randomIdNumberDto.getValidUsSsn()).thenReturn(expectedProtocol);
+
+ final var result = protocolGeneratorClient.generateNewProtocol();
+
+ Assertions.assertThat(result).isEqualTo(expectedProtocol);
+ }
+
+}
\ No newline at end of file
diff --git a/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/config/FeignContractConfigurationTest.java b/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/config/FeignContractConfigurationTest.java
new file mode 100644
index 0000000..4eddd07
--- /dev/null
+++ b/adapter/output/feign-http-services/src/test/java/br/com/helpdev/output/feign/config/FeignContractConfigurationTest.java
@@ -0,0 +1,24 @@
+package br.com.helpdev.output.feign.config;
+
+import feign.jaxrs.JakartaContract;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@ExtendWith(MockitoExtension.class)
+class FeignContractConfigurationTest {
+ @InjectMocks
+ private FeignContractConfiguration feignContractConfiguration;
+
+ @Test
+ void shouldGeneratedNonNullJaxRsContract() {
+ final var contract = feignContractConfiguration.contract();
+
+ assertThat(contract)
+ .isInstanceOf(JakartaContract.class)
+ .isNotNull();
+ }
+}
\ No newline at end of file
diff --git a/adapter/output/jpa-mysql-repository/pom.xml b/adapter/output/jpa-mysql-repository/pom.xml
index deaad9b..111c5e9 100644
--- a/adapter/output/jpa-mysql-repository/pom.xml
+++ b/adapter/output/jpa-mysql-repository/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../../pom.xml
4.0.0
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/MessageGateway.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/MessageGateway.java
index 61da72e..18cd34a 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/MessageGateway.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/MessageGateway.java
@@ -5,10 +5,10 @@
import br.com.helpdev.output.repository.entity.MessageEntityRepository;
import br.com.helpdev.output.repository.mapper.MessageMapper;
import br.com.helpdev.usecase.port.MessageRepository;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import java.util.Optional;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
@Named
@ApplicationScoped
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/ChatEntity.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/ChatEntity.java
index 42d0e3f..5712852 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/ChatEntity.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/ChatEntity.java
@@ -1,17 +1,17 @@
package br.com.helpdev.output.repository.entity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
import java.time.ZonedDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntity.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntity.java
index 186313a..a8b78b1 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntity.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntity.java
@@ -1,19 +1,19 @@
package br.com.helpdev.output.repository.entity;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embedded;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
import java.time.ZonedDateTime;
import java.util.List;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntityRepository.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntityRepository.java
index c472590..cf580d1 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntityRepository.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/MessageEntityRepository.java
@@ -1,11 +1,11 @@
package br.com.helpdev.output.repository.entity;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.persistence.EntityManager;
+import jakarta.transaction.Transactional;
import java.util.Optional;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.persistence.EntityManager;
-import javax.transaction.Transactional;
@Named
@ApplicationScoped
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/RecipientEntity.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/RecipientEntity.java
index b96189b..bb22d34 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/RecipientEntity.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/entity/RecipientEntity.java
@@ -1,7 +1,7 @@
package br.com.helpdev.output.repository.entity;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/mapper/MessageMapper.java b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/mapper/MessageMapper.java
index 6360920..2939c3e 100644
--- a/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/mapper/MessageMapper.java
+++ b/adapter/output/jpa-mysql-repository/src/main/java/br/com/helpdev/output/repository/mapper/MessageMapper.java
@@ -14,12 +14,12 @@
import br.com.helpdev.output.repository.entity.MessageEntity;
import br.com.helpdev.output.repository.entity.RecipientEntity;
import br.com.helpdev.output.repository.entity.StatusEntity;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Named;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Named;
@Named
@ApplicationScoped
diff --git a/adapter/output/jpa-mysql-repository/src/test/java/br/com/helpdev/output/repository/entity/MessageEntityRepositoryTest.java b/adapter/output/jpa-mysql-repository/src/test/java/br/com/helpdev/output/repository/entity/MessageEntityRepositoryTest.java
index bfc51a7..f60c674 100644
--- a/adapter/output/jpa-mysql-repository/src/test/java/br/com/helpdev/output/repository/entity/MessageEntityRepositoryTest.java
+++ b/adapter/output/jpa-mysql-repository/src/test/java/br/com/helpdev/output/repository/entity/MessageEntityRepositoryTest.java
@@ -5,7 +5,7 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
diff --git a/adapter/output/restclient-http-services/pom.xml b/adapter/output/restclient-http-services/pom.xml
index 75af23b..b8d3319 100644
--- a/adapter/output/restclient-http-services/pom.xml
+++ b/adapter/output/restclient-http-services/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../../pom.xml
4.0.0
@@ -21,8 +21,8 @@
- javax.ws.rs
- javax.ws.rs-api
+ jakarta.ws.rs
+ jakarta.ws.rs-api
org.eclipse.microprofile.rest.client
diff --git a/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/ProtocolGeneratorClientImpl.java b/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/ProtocolGeneratorClientImpl.java
index 697230a..a0bc96f 100644
--- a/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/ProtocolGeneratorClientImpl.java
+++ b/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/ProtocolGeneratorClientImpl.java
@@ -3,9 +3,9 @@
import br.com.helpdev.output.restclient.client.RandomDataApiClient;
import br.com.helpdev.usecase.port.ProtocolGeneratorClient;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import org.eclipse.microprofile.rest.client.inject.RestClient;
@ApplicationScoped
diff --git a/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/client/RandomDataApiClient.java b/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/client/RandomDataApiClient.java
index 95a4abc..c7e6729 100644
--- a/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/client/RandomDataApiClient.java
+++ b/adapter/output/restclient-http-services/src/main/java/br/com/helpdev/output/restclient/client/RandomDataApiClient.java
@@ -1,9 +1,9 @@
package br.com.helpdev.output.restclient.client;
import br.com.helpdev.output.restclient.client.dto.RandomIdNumberDto;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
@Path("/api/id_number/random_id_number")
diff --git a/app/quarkus-app/pom.xml b/app/quarkus-app/pom.xml
index f129f13..ad6e4c7 100644
--- a/app/quarkus-app/pom.xml
+++ b/app/quarkus-app/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../pom.xml
4.0.0
@@ -67,7 +67,7 @@
${project.groupId}
- jaxrs-controller-v1
+ jakarta-controller-v1
${project.groupId}
@@ -124,7 +124,7 @@
org.jboss.jandex
jandex-maven-plugin
- 1.2.2
+ 1.2.3
make-index
diff --git a/app/quarkus-app/src/main/java/br/com/helpdev/quarkus/ObjectMapperConfig.java b/app/quarkus-app/src/main/java/br/com/helpdev/quarkus/ObjectMapperConfig.java
index 7ae1082..b7c5f83 100644
--- a/app/quarkus-app/src/main/java/br/com/helpdev/quarkus/ObjectMapperConfig.java
+++ b/app/quarkus-app/src/main/java/br/com/helpdev/quarkus/ObjectMapperConfig.java
@@ -3,7 +3,7 @@
import br.com.helpdev.controller.config.CustomObjectMapperConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.jackson.ObjectMapperCustomizer;
-import javax.inject.Singleton;
+import jakarta.inject.Singleton;
@Singleton
public class ObjectMapperConfig implements ObjectMapperCustomizer {
diff --git a/app/quarkus-app/src/main/resources/application.properties b/app/quarkus-app/src/main/resources/application.properties
index 03c0952..a7a0ee5 100644
--- a/app/quarkus-app/src/main/resources/application.properties
+++ b/app/quarkus-app/src/main/resources/application.properties
@@ -1,15 +1,15 @@
+# DI use-case
+quarkus.index-dependency.use-case.group-id=br.com.helpdev
+quarkus.index-dependency.use-case.artifact-id=use-case
# DI output
quarkus.index-dependency.restclient-http-services.group-id=br.com.helpdev
quarkus.index-dependency.restclient-http-services.artifact-id=restclient-http-services
#
quarkus.index-dependency.jpa-mysql-repository.group-id=br.com.helpdev
quarkus.index-dependency.jpa-mysql-repository.artifact-id=jpa-mysql-repository
-# DI use-case
-quarkus.index-dependency.use-case.group-id=br.com.helpdev
-quarkus.index-dependency.use-case.artifact-id=use-case
# DI input
-quarkus.index-dependency.jaxrs-controller-v1.group-id=br.com.helpdev
-quarkus.index-dependency.jaxrs-controller-v1.artifact-id=jaxrs-controller-v1
+quarkus.index-dependency.jakarta-controller-v1.group-id=br.com.helpdev
+quarkus.index-dependency.jakarta-controller-v1.artifact-id=jakarta-controller-v1
# datasource configuration
quarkus.datasource.db-kind=mysql
quarkus.datasource.username=${MYSQL_USER:user}
@@ -27,4 +27,4 @@ quarkus.smallrye-health.ui.enable=true
quarkus.http.access-log.enabled=true
# rest client
br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/url=${RANDOM_DATA_API_URL:https://random-data-api.com}
-br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/scope=javax.inject.Singleton
\ No newline at end of file
+br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/scope=jakarta.inject.Singleton
\ No newline at end of file
diff --git a/app/quarkus-app/src/test/resources/application.properties b/app/quarkus-app/src/test/resources/application.properties
index b2e1ef0..63dc8d1 100644
--- a/app/quarkus-app/src/test/resources/application.properties
+++ b/app/quarkus-app/src/test/resources/application.properties
@@ -7,8 +7,8 @@ quarkus.index-dependency.jpa-mysql-repository.artifact-id=jpa-mysql-repository
quarkus.index-dependency.use-case.group-id=br.com.helpdev
quarkus.index-dependency.use-case.artifact-id=use-case
#
-quarkus.index-dependency.jaxrs-controller-v1.group-id=br.com.helpdev
-quarkus.index-dependency.jaxrs-controller-v1.artifact-id=jaxrs-controller-v1
+quarkus.index-dependency.jakarta-controller-v1.group-id=br.com.helpdev
+quarkus.index-dependency.jakarta-controller-v1.artifact-id=jakarta-controller-v1
#
quarkus.datasource.db-kind=h2
quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test
@@ -19,4 +19,4 @@ quarkus.hibernate-orm.log.bind-parameters=true
quarkus.hibernate-orm.default.log.sql=true
# rest client
br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/url=https://random-data-api.com
-br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/scope=javax.inject.Singleton
\ No newline at end of file
+br.com.helpdev.output.restclient.client.RandomDataApiClient/mp-rest/scope=jakarta.inject.Singleton
\ No newline at end of file
diff --git a/app/spring-app/pom.xml b/app/spring-app/pom.xml
index 046c32b..26fa030 100644
--- a/app/spring-app/pom.xml
+++ b/app/spring-app/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../pom.xml
4.0.0
@@ -31,6 +31,13 @@
pom
import
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
@@ -40,47 +47,68 @@
spring-boot-starter-jersey
- ${project.groupId}
- jaxrs-controller-v1
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
${project.groupId}
use-case
+
+ ${project.groupId}
+ jakarta-controller-v1
+
${project.groupId}
jpa-mysql-repository
- org.springframework.boot
- spring-boot-starter-data-jpa
+ ${project.groupId}
+ feign-http-services
- mysql
- mysql-connector-java
- runtime
+ com.mysql
+ mysql-connector-j
org.springframework.boot
spring-boot-starter-actuator
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+
+
+ io.micrometer
+ micrometer-core
io.micrometer
micrometer-registry-prometheus
- org.springframework.boot
- spring-boot-starter-test
- test
+ ch.qos.logback
+ logback-core
+
+
+ net.logstash.logback
+ logstash-logback-encoder
+ ${logstash-logback-encoder-version}
- spring-application
org.springframework.boot
spring-boot-maven-plugin
+ ${spring-boot.version}
br.com.helpdev.SpringSampleApplication
@@ -88,7 +116,6 @@
${project.basedir}/src/layers.xml
-
@@ -96,7 +123,6 @@
-
diff --git a/app/spring-app/src/layers.xml b/app/spring-app/src/layers.xml
index f318dbb..a8fd2ab 100644
--- a/app/spring-app/src/layers.xml
+++ b/app/spring-app/src/layers.xml
@@ -12,12 +12,16 @@
*:*:*SNAPSHOT
+
+ br.com.helpdev:*:*
+
dependencies
spring-boot-loader
+ internal-dependencies
snapshot-dependencies
application
-
+
\ No newline at end of file
diff --git a/app/spring-app/src/main/java/br/com/helpdev/config/ObjectMapperConfig.java b/app/spring-app/src/main/java/br/com/helpdev/config/ObjectMapperConfig.java
new file mode 100644
index 0000000..0abf383
--- /dev/null
+++ b/app/spring-app/src/main/java/br/com/helpdev/config/ObjectMapperConfig.java
@@ -0,0 +1,18 @@
+package br.com.helpdev.config;
+
+import br.com.helpdev.controller.config.CustomObjectMapperConfig;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+
+@Configuration
+public class ObjectMapperConfig {
+
+ @Bean
+ public ObjectMapper objectMapper(final Jackson2ObjectMapperBuilder builder) {
+ final var objectMapper = builder.build();
+ CustomObjectMapperConfig.customize(objectMapper);
+ return objectMapper;
+ }
+}
diff --git a/app/spring-app/src/main/java/br/com/helpdev/config/WebJerseyConfiguration.java b/app/spring-app/src/main/java/br/com/helpdev/config/WebJerseyConfiguration.java
index ec6a83d..3ff0899 100644
--- a/app/spring-app/src/main/java/br/com/helpdev/config/WebJerseyConfiguration.java
+++ b/app/spring-app/src/main/java/br/com/helpdev/config/WebJerseyConfiguration.java
@@ -1,12 +1,30 @@
package br.com.helpdev.config;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.ext.Provider;
+import java.util.Objects;
+import java.util.stream.Collectors;
import org.glassfish.jersey.server.ResourceConfig;
-import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
+import org.springframework.util.ClassUtils;
-@Component
+@Configuration
public class WebJerseyConfiguration extends ResourceConfig {
public WebJerseyConfiguration() {
- packages("br.com.helpdev.controller");
+ var scanner = new ClassPathScanningCandidateComponentProvider(false);
+ scanner.addIncludeFilter(new AnnotationTypeFilter(Provider.class));
+ scanner.addIncludeFilter(new AnnotationTypeFilter(Path.class));
+ registerClasses(
+ scanner.findCandidateComponents("br.com.helpdev.controller").stream()
+ .map(
+ beanDefinition ->
+ ClassUtils.resolveClassName(
+ Objects.requireNonNull(beanDefinition.getBeanClassName()),
+ getClassLoader()))
+ .collect(Collectors.toSet()));
+
}
}
diff --git a/app/spring-app/src/main/resources/application.properties b/app/spring-app/src/main/resources/application.properties
index 75de15a..3df7e44 100644
--- a/app/spring-app/src/main/resources/application.properties
+++ b/app/spring-app/src/main/resources/application.properties
@@ -1,7 +1,14 @@
spring.jpa.hibernate.ddl-auto=update
+spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=${MYSQL_URL:jdbc:mysql://localhost:3306/sample}
spring.datasource.username=${MYSQL_USER:user}
spring.datasource.password=${MYSQL_PASSWORD:pass123}
management.metrics.enable.all=true
management.endpoints.web.exposure.include=*
+
+random-data-api.url=${RANDOM_DATA_API_URL:https://random-data-api.com}
+
+# Issue: https://github.com/spring-cloud/spring-cloud-openfeign/issues/847
+spring.cloud.mvc.token-relay.enabled=false
\ No newline at end of file
diff --git a/app/spring-app/src/main/resources/logback.xml b/app/spring-app/src/main/resources/logback.xml
new file mode 100644
index 0000000..4d84cb2
--- /dev/null
+++ b/app/spring-app/src/main/resources/logback.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ ts
+ UTC
+
+
+ logger
+
+
+ severity
+
+
+ thread
+
+
+
+ false
+
+
+ stack
+
+
+ message
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%X{traceId},%X{spanId}] %X{external.id} [%t] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/domain/pom.xml b/core/domain/pom.xml
index 6d710bc..5f37350 100644
--- a/core/domain/pom.xml
+++ b/core/domain/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/core/use-case/pom.xml b/core/use-case/pom.xml
index 577e60c..132a0ba 100644
--- a/core/use-case/pom.xml
+++ b/core/use-case/pom.xml
@@ -5,7 +5,7 @@
modular-architecture
br.com.helpdev
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/core/use-case/src/main/java/br/com/helpdev/usecase/DeleteRequestNotification.java b/core/use-case/src/main/java/br/com/helpdev/usecase/DeleteRequestNotification.java
index dfbe684..5b217da 100644
--- a/core/use-case/src/main/java/br/com/helpdev/usecase/DeleteRequestNotification.java
+++ b/core/use-case/src/main/java/br/com/helpdev/usecase/DeleteRequestNotification.java
@@ -4,9 +4,9 @@
import br.com.helpdev.domain.vo.MessageId;
import br.com.helpdev.usecase.exception.MessageNotFoundException;
import br.com.helpdev.usecase.port.MessageRepository;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
@Named
@ApplicationScoped
diff --git a/core/use-case/src/main/java/br/com/helpdev/usecase/FindRequestNotification.java b/core/use-case/src/main/java/br/com/helpdev/usecase/FindRequestNotification.java
index a3c1afd..c28345c 100644
--- a/core/use-case/src/main/java/br/com/helpdev/usecase/FindRequestNotification.java
+++ b/core/use-case/src/main/java/br/com/helpdev/usecase/FindRequestNotification.java
@@ -6,9 +6,9 @@
import br.com.helpdev.domain.vo.MessageId;
import br.com.helpdev.usecase.exception.MessageNotFoundException;
import br.com.helpdev.usecase.port.MessageRepository;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
@Named
@ApplicationScoped
diff --git a/core/use-case/src/main/java/br/com/helpdev/usecase/PushRequestNotification.java b/core/use-case/src/main/java/br/com/helpdev/usecase/PushRequestNotification.java
index d774a92..0dbc904 100644
--- a/core/use-case/src/main/java/br/com/helpdev/usecase/PushRequestNotification.java
+++ b/core/use-case/src/main/java/br/com/helpdev/usecase/PushRequestNotification.java
@@ -6,11 +6,11 @@
import br.com.helpdev.domain.exception.NotificationException;
import br.com.helpdev.usecase.port.MessageRepository;
import br.com.helpdev.usecase.port.ProtocolGeneratorClient;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import java.time.ZonedDateTime;
import java.util.List;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.inject.Named;
@Named
@ApplicationScoped
diff --git a/pom.xml b/pom.xml
index d853a2b..17d7769 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
modular-architecture
pom
- 0.0.3-SNAPSHOT
+ 0.0.4-SNAPSHOT
@@ -17,7 +17,7 @@
true
- 2.15.0.Final
+ 3.2.0.Final
quarkus-bom
io.quarkus.platform
@@ -25,7 +25,7 @@
core/domain
core/use-case
- adapter/input/jaxrs-controller-v1
+ adapter/input/jakarta-controller-v1
adapter/output/jpa-mysql-repository
adapter/output/restclient-http-services
app/quarkus-app
@@ -35,15 +35,16 @@
spring
- 2.7.7
+ 3.1.1
+ 2022.0.3
core/domain
core/use-case
- adapter/input/jaxrs-controller-v1
+ adapter/input/jakarta-controller-v1
adapter/output/jpa-mysql-repository
- adapter/output/restclient-http-services
+ adapter/output/feign-http-services
app/spring-app
acceptance-test
@@ -70,43 +71,45 @@
1.7.4
- 3.10.1
- 3.1.1
- 3.3.0
- 4.5.3.0
- 4.5.3
+ 3.11.0
+ 3.3.0
+ 4.7.3.5
+ 4.7.3
8.39
4.3.0
- 3.0.0-M7
- 3.0.0-M7
+ 3.1.2
+ 3.1.2
0.15
0.8.8
+ 3.3.1
- 5.6.0
- 3.3.3
- 3.22.0
- 1.17.1
+ 5.9.3
+ 5.4.0
+ 3.24.2
+ 1.18.3
1.0.2
- 2.32
+ 3.1.2
- 2.0.2
- 2.1.1
- 1.3.3
- 2.2.3
- 2.0
- 2.0.1.Final
+ 4.0.1
+ 3.1.0
+ 2.0.1
+ 3.1.0
+ 3.0.1
+ 3.0.2
2.3.1
- 2.32
- 1.18.20
- 1.7.30
- 4.3.3
- 2.13.4.2
- 2.14.1
- 2.3.0
+ 1.18.28
+
+ 2.0.7
+ 1.4.8
+ 7.4
+
+ 5.2.0
+ 2.15.2
+ 2.15.2
@@ -122,7 +125,7 @@
${project.groupId}
- jaxrs-controller-v1
+ jakarta-controller-v1
${project.version}
@@ -145,14 +148,19 @@
restclient-http-services
${project.version}
+
+ ${project.groupId}
+ feign-http-services
+ ${project.version}
+
org.projectlombok
lombok
${lombok.version}
- javax.validation
- validation-api
+ jakarta.validation
+ jakarta.validation-api
${validation-api.version}
@@ -168,14 +176,9 @@
test
- javax.ws.rs
- javax.ws.rs-api
- ${javax.ws.rs-api.version}
-
-
- javax.xml.bind
- jaxb-api
- ${jaxb-api.version}
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ ${jakarta.ws.rs-api.version}
org.eclipse.microprofile.rest.client
@@ -183,11 +186,6 @@
${microprofile-rest-api.version}
provided
-
- org.modelmapper
- modelmapper
- ${modelmapper.version}
-
com.fasterxml.jackson.core
jackson-databind
@@ -292,18 +290,6 @@
${testcontainers.version}
test
-
- com.jparams
- to-string-verifier
- ${to-string-verifier.version}
- test
-
-
- nl.jqno.equalsverifier
- equalsverifier
- ${equals-verifier.version}
- test
-
com.github.javafaker
javafaker
@@ -314,17 +300,22 @@
jersey-server
${glassfish.test.version}
-
- com.github.tomakehurst
- wiremock-jre8
- ${wiremock.version}
- test
-
+
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${java.version}
+ ${java.version}
+
+ -parameters
+
+
+
org.eluder.coveralls
@@ -339,17 +330,6 @@
-
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- ${java.version}
- ${java.version}
-
- -parameters
-
-
-
org.apache.maven.plugins