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