diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java
deleted file mode 100644
index b901097..0000000
--- a/.mvn/wrapper/MavenWrapperDownloader.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2007-present the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.Properties;
-
-public class MavenWrapperDownloader {
-
- private static final String WRAPPER_VERSION = "0.5.6";
- /**
- * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
- */
- private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
- + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
-
- /**
- * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
- * use instead of the default one.
- */
- private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
- ".mvn/wrapper/maven-wrapper.properties";
-
- /**
- * Path where the maven-wrapper.jar will be saved to.
- */
- private static final String MAVEN_WRAPPER_JAR_PATH =
- ".mvn/wrapper/maven-wrapper.jar";
-
- /**
- * Name of the property which should be used to override the default download url for the wrapper.
- */
- private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
-
- public static void main(String args[]) {
- System.out.println("- Downloader started");
- File baseDirectory = new File(args[0]);
- System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
-
- // If the maven-wrapper.properties exists, read it and check if it contains a custom
- // wrapperUrl parameter.
- File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
- String url = DEFAULT_DOWNLOAD_URL;
- if(mavenWrapperPropertyFile.exists()) {
- FileInputStream mavenWrapperPropertyFileInputStream = null;
- try {
- mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
- Properties mavenWrapperProperties = new Properties();
- mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
- url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
- } catch (IOException e) {
- System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
- } finally {
- try {
- if(mavenWrapperPropertyFileInputStream != null) {
- mavenWrapperPropertyFileInputStream.close();
- }
- } catch (IOException e) {
- // Ignore ...
- }
- }
- }
- System.out.println("- Downloading from: " + url);
-
- File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
- if(!outputFile.getParentFile().exists()) {
- if(!outputFile.getParentFile().mkdirs()) {
- System.out.println(
- "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
- }
- }
- System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
- try {
- downloadFileFromURL(url, outputFile);
- System.out.println("Done");
- System.exit(0);
- } catch (Throwable e) {
- System.out.println("- Error downloading");
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- private static void downloadFileFromURL(String urlString, File destination) throws Exception {
- if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
- String username = System.getenv("MVNW_USERNAME");
- char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
- Authenticator.setDefault(new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- });
- }
- URL website = new URL(urlString);
- ReadableByteChannel rbc;
- rbc = Channels.newChannel(website.openStream());
- FileOutputStream fos = new FileOutputStream(destination);
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
- fos.close();
- rbc.close();
- }
-
-}
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 2cc7d4a..0000000
Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index d58dfb7..c0bcafe 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -1,19 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wrapperVersion=3.3.2
+wrapperVersion=3.3.4
distributionType=only-script
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
diff --git a/README.md b/README.md
index 38363cc..0091d6a 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ Persistence/Search:
Test:
- Unit/integration with JUnit 5, Mockito and Spring Test
-- Tests with Spock Framework (Groovy 4, Spock 2)
+- Tests with Spock Framework (Groovy 5, Spock 2.4)
- e2e with Selenide, fixtures. default data generated using Spring
- Load test with Gatling/Scala
- Architecture tests using ArchUnit
diff --git a/common/pom.xml b/common/pom.xml
index 4d71608..aece4b8 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -64,33 +64,26 @@
provided
- com.fasterxml.jackson.core
+ tools.jackson.core
jackson-databind
true
provided
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- true
- provided
+ 3.0.3
-
- com.github.spotbugs
- spotbugs-maven-plugin
-
- ../spot-bugs.filter-exclude.xml
-
-
org.apache.maven.plugins
- maven-checkstyle-plugin
+ maven-compiler-plugin
- ../checkstyle.xml
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/common/src/main/java/gt/common/test/TestUtil.java b/common/src/main/java/gt/common/test/TestUtil.java
index a3d280f..d94d6c9 100644
--- a/common/src/main/java/gt/common/test/TestUtil.java
+++ b/common/src/main/java/gt/common/test/TestUtil.java
@@ -1,12 +1,8 @@
package gt.common.test;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.web.bind.annotation.GetMapping;
import java.io.File;
-import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
@@ -26,23 +22,4 @@ public static File fileFromClassPath(String name) {
throw new IllegalArgumentException(e);
}
}
-
- public static byte[] convertObjectToJsonBytes(Object object)
- throws IOException {
- ObjectMapper mapper = new ObjectMapper();
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-
- JavaTimeModule module = new JavaTimeModule();
- mapper.registerModule(module);
-
- return mapper.writeValueAsBytes(object);
- }
-
- public static byte[] createByteArray(int size, String data) {
- byte[] byteArray = new byte[size];
- for (int i = 0; i < size; i++) {
- byteArray[i] = Byte.parseByte(data, 2);
- }
- return byteArray;
- }
}
diff --git a/content-checker/content-checker-service-model/pom.xml b/content-checker/content-checker-service-model/pom.xml
index dfb1442..b979760 100644
--- a/content-checker/content-checker-service-model/pom.xml
+++ b/content-checker/content-checker-service-model/pom.xml
@@ -30,10 +30,15 @@
- com.github.spotbugs
- spotbugs-maven-plugin
+ org.apache.maven.plugins
+ maven-compiler-plugin
- ../../spot-bugs.filter-exclude.xml
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/content-checker/content-checker-service/pom.xml b/content-checker/content-checker-service/pom.xml
index e9d5482..c8e9eb2 100644
--- a/content-checker/content-checker-service/pom.xml
+++ b/content-checker/content-checker-service/pom.xml
@@ -27,7 +27,7 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
org.springdoc
@@ -35,18 +35,24 @@
+
+ org.springframework.boot
+ spring-boot-micrometer-tracing-brave
+
org.springframework.boot
spring-boot-starter-actuator
- io.micrometer
- micrometer-tracing-bridge-brave
+ org.springframework.boot
+ spring-boot-starter-zipkin
- io.zipkin.reporter2
- zipkin-reporter-brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
+
+
org.springframework.boot
spring-boot-starter-artemis
@@ -57,23 +63,17 @@
true
provided
-
- org.springdoc
- springdoc-openapi-starter-webmvc-ui
- ${springdoc-openapi-ui.version}
- true
-
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-starter-webmvc-test
test
- ${build.profile}-${artifactId}-${project.version}
+ ${artifactId}-${project.version}
spring-boot:run
@@ -85,6 +85,24 @@
true
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java b/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java
index 947c89f..4c65ca6 100644
--- a/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java
+++ b/content-checker/content-checker-service/src/main/java/gt/contentchecker/JMSConfig.java
@@ -1,13 +1,13 @@
package gt.contentchecker;
import jakarta.jms.ConnectionFactory;
-import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
+import org.springframework.boot.jms.autoconfigure.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
-import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
+import org.springframework.jms.support.converter.JacksonJsonMessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
@@ -25,7 +25,7 @@ public JmsListenerContainerFactory> myFactory(ConnectionFactory connectionFact
@Bean
public MessageConverter jacksonJmsMessageConverter() {
- var converter = new MappingJackson2MessageConverter();
+ var converter = new JacksonJsonMessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
diff --git a/content-checker/content-checker-service/src/main/resources/application-default.yml b/content-checker/content-checker-service/src/main/resources/application-default.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/content-checker/content-checker-service/src/main/resources/application.yml b/content-checker/content-checker-service/src/main/resources/application.yml
index d507af1..bd54085 100644
--- a/content-checker/content-checker-service/src/main/resources/application.yml
+++ b/content-checker/content-checker-service/src/main/resources/application.yml
@@ -22,9 +22,11 @@ management:
tracing:
sampling:
probability: 1.0
- zipkin:
- tracing:
- endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
health:
jms:
enabled: true
+ zipkin:
+ export:
+ tracing:
+ endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+
diff --git a/email/email-service-api/pom.xml b/email/email-service-api/pom.xml
index 1c6a0e3..60eae7d 100644
--- a/email/email-service-api/pom.xml
+++ b/email/email-service-api/pom.xml
@@ -33,4 +33,21 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
diff --git a/email/email-service/pom.xml b/email/email-service/pom.xml
index 434f4a1..6be9dff 100755
--- a/email/email-service/pom.xml
+++ b/email/email-service/pom.xml
@@ -14,7 +14,7 @@
${project.parent.version}
- 2025.0.0
+ 2025.1.0
@@ -29,7 +29,7 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
org.springframework.boot
@@ -45,18 +45,24 @@
springdoc-openapi-starter-webmvc-ui
+
+ org.springframework.boot
+ spring-boot-micrometer-tracing-brave
+
org.springframework.boot
spring-boot-starter-actuator
- io.micrometer
- micrometer-tracing-bridge-brave
+ org.springframework.boot
+ spring-boot-starter-zipkin
- io.zipkin.reporter2
- zipkin-reporter-brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
+
+
org.projectlombok
@@ -69,7 +75,12 @@
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-starter-mail-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-webmvc-test
test
@@ -85,7 +96,7 @@
org.testcontainers
- junit-jupiter
+ testcontainers-junit-jupiter
@@ -104,7 +115,7 @@
- ${build.profile}-${artifactId}-${project.version}
+ ${artifactId}-${project.version}
spring-boot:run
@@ -115,17 +126,39 @@
true
+
+
+ org.projectlombok
+ lombok
+
+
- org.springframework.cloud
- spring-cloud-contract-maven-plugin
- true
+ org.apache.maven.plugins
+ maven-compiler-plugin
- gt.mail.BaseTestCloudContract
- JUNIT5
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
com.github.spotbugs
spotbugs-maven-plugin
diff --git a/email/email-service/src/main/resources/application.yml b/email/email-service/src/main/resources/application.yml
index 73e718c..e7b3da1 100755
--- a/email/email-service/src/main/resources/application.yml
+++ b/email/email-service/src/main/resources/application.yml
@@ -6,15 +6,17 @@ spring:
port: ${MAILHOG_PORT:1025}
username:
password:
-
+ web:
+ error:
+ include-stacktrace: never
+ include-exception: true
+ include-binding-errors: always
+ include-message: always
+logging:
server:
port: 8085
- error:
- include-stacktrace: never
- include-exception: true
- include-binding-errors: always
- include-message: always
-logging:
+
+
level:
org.springframework.web: INFO
ROOT: WARN
@@ -25,7 +27,6 @@ management:
sampling:
probability: 1.0
zipkin:
- tracing:
- endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
-
-
+ export:
+ tracing:
+ endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
diff --git a/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java b/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java
index f2b74bf..ceda93c 100644
--- a/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java
+++ b/email/email-service/src/test/java/gt/mail/web/rest/EmailResourceIT.java
@@ -2,8 +2,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.web.servlet.MockMvc;
diff --git a/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java b/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java
index fd24e21..5f5bd28 100755
--- a/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java
+++ b/email/email-service/src/test/java/gt/mail/web/rest/HelloResourceIT.java
@@ -2,8 +2,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
diff --git a/main-app/main-orm-jooq/pom.xml b/main-app/main-orm-jooq/pom.xml
index c832db2..b75edbc 100644
--- a/main-app/main-orm-jooq/pom.xml
+++ b/main-app/main-orm-jooq/pom.xml
@@ -14,7 +14,7 @@
${project.parent.version}
- 6.5.7
+ 7.0.0
@@ -101,7 +101,7 @@
hibernate.implicit_naming_strategy
- org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+ org.springframework.boot.hibernate.SpringImplicitNamingStrategy
diff --git a/main-app/main-orm/pom.xml b/main-app/main-orm/pom.xml
index a3e8d30..3fd189d 100644
--- a/main-app/main-orm/pom.xml
+++ b/main-app/main-orm/pom.xml
@@ -14,7 +14,7 @@
yyyyMMddHHmmss
- 6.2.15
+ 7.0.2
@@ -50,21 +50,6 @@
spring-data-commons
true
-
- com.querydsl
- querydsl-apt
- ${querydsl.version}
- true
- jakarta
-
-
- com.querydsl
- querydsl-jpa
- ${querydsl.version}
- jakarta
- true
-
-
jakarta.validation
jakarta.validation-api
@@ -126,23 +111,16 @@
-
- com.github.spotbugs
- spotbugs-maven-plugin
-
- ../../spot-bugs.filter-exclude.xml
-
-
org.apache.maven.plugins
- maven-checkstyle-plugin
+ maven-compiler-plugin
- ../../checkstyle.xml
-
-
- ${project.build.sourceDirectory}
-
-
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java b/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java
index 71762f5..42e489d 100644
--- a/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java
+++ b/main-app/main-orm/src/main/java/gt/app/domain/AppUser.java
@@ -9,13 +9,18 @@
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
+import java.io.Serial;
+import java.io.Serializable;
import java.util.UUID;
@Entity
@Getter
@Setter
@Table(name = "APP_USER")
-public class AppUser {
+public class AppUser implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = -420530763778423332L;
@Id
@JdbcTypeCode(SqlTypes.BINARY)
diff --git a/main-app/main-orm/src/main/java/gt/app/domain/Article.java b/main-app/main-orm/src/main/java/gt/app/domain/Article.java
index a00fbfc..aa8bf43 100644
--- a/main-app/main-orm/src/main/java/gt/app/domain/Article.java
+++ b/main-app/main-orm/src/main/java/gt/app/domain/Article.java
@@ -6,6 +6,7 @@
import lombok.Getter;
import lombok.Setter;
+import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
@@ -16,6 +17,8 @@
@Getter
@Setter
public class Article extends BaseAuditingEntity implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -420530763778423324L;
@NotEmpty
private String title;
diff --git a/main-app/main-orm/src/main/java/gt/app/domain/Comment.java b/main-app/main-orm/src/main/java/gt/app/domain/Comment.java
index 1c3c49b..cc35f1c 100644
--- a/main-app/main-orm/src/main/java/gt/app/domain/Comment.java
+++ b/main-app/main-orm/src/main/java/gt/app/domain/Comment.java
@@ -6,11 +6,16 @@
import jakarta.persistence.JoinColumn;
import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
import java.util.Objects;
@Entity
@Data
-public class Comment extends BaseAuditingEntity {
+public class Comment extends BaseAuditingEntity implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -420530763778423311L;
+
private String content;
@Enumerated(EnumType.STRING)
diff --git a/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java b/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java
index 24043b5..ac4729b 100644
--- a/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java
+++ b/main-app/main-orm/src/main/java/gt/app/domain/ReceivedFile.java
@@ -10,6 +10,8 @@
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
+import java.io.Serial;
+import java.io.Serializable;
import java.time.Instant;
import java.util.UUID;
@@ -17,7 +19,10 @@
@Getter
@Setter
@NoArgsConstructor
-public class ReceivedFile {
+public class ReceivedFile implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = -420530763778423322L;
@Id
@JdbcTypeCode(SqlTypes.CHAR)
diff --git a/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties b/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties
index ab39387..3bab61e 100644
--- a/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties
+++ b/main-app/main-orm/src/main/resources/liquibase-jpa-diff.properties
@@ -5,9 +5,9 @@ driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/seedapp?allowPublicKeyRetrieval=true
username=root
password=password
-referenceUrl=hibernate:spring:gt.app.domain?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=gt.app.hibernate.PrefixedNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+referenceUrl=hibernate:spring:gt.app.domain?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=gt.app.hibernate.PrefixedNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.hibernate.SpringImplicitNamingStrategy
-#referenceUrl=hibernate:spring:gt.app.domain?dialect=${liquibase-plugin.hibernate-dialect}&hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+#referenceUrl=hibernate:spring:gt.app.domain?dialect=${liquibase-plugin.hibernate-dialect}&hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.hibernate.SpringImplicitNamingStrategy
## the default naming strategies are configured here: org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.Naming.applyNamingStrategies
## we have to map the same for liquibase so that it will generate the column/tables that's compatible with Spring-Data-JPA
diff --git a/main-app/main-webapp/pom.xml b/main-app/main-webapp/pom.xml
index 5741c64..9616830 100644
--- a/main-app/main-webapp/pom.xml
+++ b/main-app/main-webapp/pom.xml
@@ -63,8 +63,8 @@
spring-boot-starter-data-jpa
- org.liquibase
- liquibase-core
+ org.springframework.boot
+ spring-boot-starter-liquibase
org.springframework.boot
@@ -75,17 +75,21 @@
spring-cloud-starter-openfeign
+
+ org.springframework.boot
+ spring-boot-micrometer-tracing-brave
+
org.springframework.boot
spring-boot-starter-actuator
- io.micrometer
- micrometer-tracing-bridge-brave
+ org.springframework.boot
+ spring-boot-starter-zipkin
- io.zipkin.reporter2
- zipkin-reporter-brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
io.github.openfeign
@@ -98,7 +102,7 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
org.springframework.boot
@@ -116,10 +120,6 @@
org.springframework.boot
spring-boot-starter-websocket
-
- com.querydsl
- querydsl-jpa
-
commons-io
commons-io
@@ -142,11 +142,11 @@
org.springframework.boot
- spring-boot-starter-oauth2-client
+ spring-boot-starter-security-oauth2-client
org.springframework.boot
- spring-boot-starter-oauth2-resource-server
+ spring-boot-starter-security-oauth2-resource-server
@@ -178,11 +178,6 @@
${springdoc-openapi-ui.version}
true
-
- org.springframework.boot
- spring-boot-devtools
- true
-
org.webjars
@@ -208,13 +203,32 @@
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-starter-data-jpa-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-liquibase-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-security-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-webmvc-test
test
org.springframework.cloud
spring-cloud-starter-contract-stub-runner
-
test
@@ -255,12 +269,12 @@
org.testcontainers
- junit-jupiter
+ testcontainers-junit-jupiter
test
org.testcontainers
- mysql
+ testcontainers-mysql
true
test
@@ -268,9 +282,9 @@
io.hypersistence
- hypersistence-utils-hibernate-63
+ hypersistence-utils-hibernate-71
test
- 3.8.3
+ 3.13.3
com.github.gavlyukovskiy
@@ -324,7 +338,7 @@
- ${build.profile}-${artifactId}-${project.version}
+ ${artifactId}-${project.version}
spring-boot:run
diff --git a/main-app/main-webapp/src/main/java/gt/app/DataCreator.java b/main-app/main-webapp/src/main/java/gt/app/DataCreator.java
index d2c39de..ddbd59a 100644
--- a/main-app/main-webapp/src/main/java/gt/app/DataCreator.java
+++ b/main-app/main-webapp/src/main/java/gt/app/DataCreator.java
@@ -9,7 +9,6 @@
import gt.app.modules.user.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Profile;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@@ -19,7 +18,6 @@
import java.util.stream.Stream;
@Component
-@Profile({"local", "test"})
@RequiredArgsConstructor
@Slf4j
public class DataCreator {
diff --git a/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java b/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java
index a7a43b7..59ff19c 100644
--- a/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java
+++ b/main-app/main-webapp/src/main/java/gt/app/config/JMSConfig.java
@@ -1,19 +1,20 @@
package gt.app.config;
import jakarta.jms.ConnectionFactory;
-import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
+import org.springframework.boot.jms.autoconfigure.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
-import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
+import org.springframework.jms.support.converter.JacksonJsonMessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;
+
@Configuration
@EnableJms
-class JMSConfig {
+public class JMSConfig {
@Bean
public JmsListenerContainerFactory> myFactory(ConnectionFactory connectionFactory,
@@ -25,7 +26,7 @@ public JmsListenerContainerFactory> myFactory(ConnectionFactory connectionFact
@Bean
public MessageConverter jacksonJmsMessageConverter() {
- var converter = new MappingJackson2MessageConverter();
+ var converter = new JacksonJsonMessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
diff --git a/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java b/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java
index 1fc66f6..3fab732 100644
--- a/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java
+++ b/main-app/main-webapp/src/main/java/gt/app/config/metrics/RequestStatisticsConfiguration.java
@@ -4,7 +4,7 @@
import gt.app.config.logging.WebRequestInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.cfg.AvailableSettings;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
+import org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java
index 2ba5063..09c431c 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustom.java
@@ -1,13 +1,8 @@
package gt.app.modules.article;
-import gt.app.domain.Article;
import gt.app.domain.ArticleStatus;
-import java.util.List;
-
interface ArticleRepositoryCustom {
- List findArticles(ArticleStatus status);
-
long countArticles(ArticleStatus status);
}
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java
index e044c6a..6bf0e52 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleRepositoryCustomImpl.java
@@ -8,9 +8,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
-import java.util.List;
-
-import static gt.app.domain.QArticle.article;
import static gtapp.jooq.tables.GArticle.G_ARTICLE;
@Slf4j
@@ -29,13 +26,6 @@ public void setRepository(ArticleRepository repository) {
this.repository = repository;
}
- @Override
- public List findArticles(ArticleStatus status) {
- return from(article)
- .where(article.status.eq(status))
- .fetch();
- }
-
@Override
public long countArticles(ArticleStatus status) {
return jooq.fetchCount(G_ARTICLE.where(G_ARTICLE.STATUS.eq(status.name())));
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java
index 8c214a3..4ec4525 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/ArticleService.java
@@ -75,7 +75,7 @@ public Article update(ArticleEditDto dto) {
@Cacheable(cacheNames = "articleRead", key = "#id")
public ArticleReadDto read(Long id) {
- //TODO: filter out unpublished comments - write a jooq or querydsl query
+ //TODO: filter out unpublished comments - write a jooq
ArticleReadDto dto = articleRepository.findOneWithAllByIdAndStatus(id, ArticleStatus.PUBLISHED, Sort.by(Sort.Direction.DESC, "id"))
.map(ArticleMapper.INSTANCE::mapForRead)
.map(this::mapNested)
@@ -156,9 +156,4 @@ public Optional handleReview(ArticleReviewResultDto dto) {
});
}
- public void testCountStatuses() {
- log.info("Size of flagged articles {}", articleRepository.findArticles(ArticleStatus.FLAGGED_FOR_MANUAL_REVIEW).size());
- log.info("Size of flagged articles {}", articleRepository.countArticles(ArticleStatus.FLAGGED_FOR_MANUAL_REVIEW));
- }
-
}
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java
index 625be4b..b3392dc 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustom.java
@@ -1,13 +1,8 @@
package gt.app.modules.article;
-import gt.app.domain.Comment;
import gt.app.domain.CommentStatus;
-import java.util.List;
-
interface CommentRepositoryCustom {
- List findComments(CommentStatus status);
-
long findFlaggedComments(CommentStatus status);
}
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java
index d416538..ed4fbad 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/article/CommentRepositoryCustomImpl.java
@@ -8,9 +8,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
-import java.util.List;
-
-import static gt.app.domain.QComment.comment;
import static gtapp.jooq.tables.GComment.G_COMMENT;
@Slf4j
@@ -29,12 +26,6 @@ public void setRepository(CommentRepository repository) {
this.repository = repository;
}
- @Override
- public List findComments(CommentStatus status) {
- return from(comment)
- .where(comment.status.eq(status))
- .fetch();
- }
@Override
public long findFlaggedComments(CommentStatus status) {
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java
index d1f48af..971da16 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepository.java
@@ -1,12 +1,10 @@
package gt.app.modules.common;
import gt.app.domain.BaseEntity;
-import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.data.repository.ListCrudRepository;
import org.springframework.data.repository.NoRepositoryBean;
@NoRepositoryBean
-public interface AbstractRepository extends ListCrudRepository,
- QuerydslPredicateExecutor {
+public interface AbstractRepository extends ListCrudRepository {
}
diff --git a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java
index 6580475..b6d2cc0 100644
--- a/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java
+++ b/main-app/main-webapp/src/main/java/gt/app/modules/common/AbstractRepositoryImpl.java
@@ -1,18 +1,15 @@
package gt.app.modules.common;
-import com.querydsl.jpa.JPQLQuery;
import gt.app.domain.BaseEntity;
import org.springframework.beans.factory.InitializingBean;
-import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import org.springframework.util.Assert;
public abstract class AbstractRepositoryImpl>
- extends QuerydslRepositorySupport implements AbstractRepositoryCustom, InitializingBean {
+ implements AbstractRepositoryCustom, InitializingBean {
protected R repository;
public AbstractRepositoryImpl(Class domainClass) {
- super(domainClass);
}
@Override
@@ -20,8 +17,5 @@ public void afterPropertiesSet() {
Assert.notNull(repository, "Repository must not be null.\nAutowire repository with Setter Injection.");
}
- public boolean exists(JPQLQuery query) {
- return query.fetchCount() > 0L;
- }
}
diff --git a/main-app/main-webapp/src/main/resources/application.yml b/main-app/main-webapp/src/main/resources/application.yml
index 2ac2d71..cc79b27 100644
--- a/main-app/main-webapp/src/main/resources/application.yml
+++ b/main-app/main-webapp/src/main/resources/application.yml
@@ -15,7 +15,7 @@ spring:
generate_statistics: true
naming:
physical-strategy: gt.app.hibernate.PrefixedNamingStrategy
- implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+ implicit-strategy: org.springframework.boot.hibernate.SpringImplicitNamingStrategy
datasource:
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:seedapp}?useUnicode=true&allowPublicKeyRetrieval=true
username: ${MYSQL_USERNAME:root}
@@ -104,9 +104,10 @@ management:
tracing:
sampling:
probability: 1.0
- zipkin:
- tracing:
- endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+ zipkin:
+ export:
+ tracing:
+ endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
health:
jms:
enabled: true
diff --git a/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java b/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java
index 4939cd2..11e43b5 100644
--- a/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java
+++ b/main-app/main-webapp/src/test/java/gt/app/e2e/PublicPageIT.java
@@ -7,8 +7,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.http.MediaType;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.web.servlet.MockMvc;
diff --git a/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java b/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java
index 8c493a0..292fa92 100644
--- a/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java
+++ b/main-app/main-webapp/src/test/java/gt/app/frwk/TestDataManager.java
@@ -1,42 +1,23 @@
package gt.app.frwk;
import gt.app.DataCreator;
-import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import lombok.RequiredArgsConstructor;
-import org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl;
-import org.hibernate.persister.collection.AbstractCollectionPersister;
-import org.hibernate.persister.entity.AbstractEntityPersister;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
@Service
@RequiredArgsConstructor
public class TestDataManager implements InitializingBean {
- final EntityManager em;
+ final EntityManagerFactory entityManagerFactory;
final DataCreator dataCreator;
final CacheManager cacheManager;
- private Set tableNames;
-
@Override
public void afterPropertiesSet() {
- MappingMetamodelImpl metaModelImpl = (MappingMetamodelImpl) em.getMetamodel();
- tableNames = metaModelImpl
- .entityPersisters()
- .values().stream()
- .map(ep -> ((AbstractEntityPersister) ep).getTableName())
- .collect(Collectors.toSet());
-
- tableNames.addAll(metaModelImpl
- .collectionPersisters()
- .values().stream()
- .map(ep -> ((AbstractCollectionPersister) ep).getTableName())
- .collect(Collectors.toSet()));
}
@Transactional
@@ -52,21 +33,10 @@ public void cleanDataAndCache() {
}
public void truncateTables() {
-
- //for H2
- em.createNativeQuery("SET REFERENTIAL_INTEGRITY FALSE").executeUpdate();
- for (String tableName : tableNames) {
- em.createNativeQuery("TRUNCATE TABLE " + tableName).executeUpdate();
- }
- em.createNativeQuery("SET REFERENTIAL_INTEGRITY TRUE").executeUpdate();
-
-// //for MySQL:
-// em.createNativeQuery("SET @@foreign_key_checks = 0").executeUpdate();
-// for (String tableName : tableNames) {
-// em.createNativeQuery("TRUNCATE TABLE " + tableName).executeUpdate();
-// }
-// em.createNativeQuery("SET @@foreign_key_checks = 1").executeUpdate();
-
+ entityManagerFactory
+ .unwrap(SessionFactoryImplementor.class)
+ .getSchemaManager()
+ .truncateMappedObjects();
}
diff --git a/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java b/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java
index 904bfc8..9d05cad 100644
--- a/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java
+++ b/main-app/main-webapp/src/test/java/gt/app/web/rest/HelloResourceIT.java
@@ -4,8 +4,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
diff --git a/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java b/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java
index 77e4023..278c327 100644
--- a/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java
+++ b/main-app/main-webapp/src/test/java/gt/app/web/rest/I18Test.java
@@ -2,8 +2,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
diff --git a/main-app/main-webapp/src/test/resources/application.yml b/main-app/main-webapp/src/test/resources/application.yml
index fcd6e21..27f1528 100644
--- a/main-app/main-webapp/src/test/resources/application.yml
+++ b/main-app/main-webapp/src/test/resources/application.yml
@@ -15,7 +15,7 @@ spring:
ddl-auto: none # we use liquibase
naming:
physical-strategy: gt.app.hibernate.PrefixedNamingStrategy
- implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+ implicit-strategy: org.springframework.boot.hibernate.SpringImplicitNamingStrategy
mvc:
static-path-pattern: /static/**
jooq:
diff --git a/main-app/report-service/pom.xml b/main-app/report-service/pom.xml
index d599783..29df751 100644
--- a/main-app/report-service/pom.xml
+++ b/main-app/report-service/pom.xml
@@ -27,7 +27,7 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
org.springframework.boot
@@ -43,33 +43,32 @@
org.springframework.boot
- spring-boot-starter-oauth2-resource-server
+ spring-boot-starter-security-oauth2-resource-server
+
+ org.springframework.boot
+ spring-boot-micrometer-tracing-brave
+
org.springframework.boot
spring-boot-starter-actuator
- io.micrometer
- micrometer-tracing-bridge-brave
+ org.springframework.boot
+ spring-boot-starter-zipkin
- io.zipkin.reporter2
- zipkin-reporter-brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
+
org.projectlombok
lombok
true
provided
-
- org.springdoc
- springdoc-openapi-starter-webmvc-ui
- ${springdoc-openapi-ui.version}
- true
-
com.mysql
mysql-connector-j
@@ -83,7 +82,7 @@
- ${build.profile}-${artifactId}-${project.version}
+ ${artifactId}-${project.version}
spring-boot:run
@@ -95,6 +94,24 @@
true
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/main-app/report-service/src/main/resources/application.yml b/main-app/report-service/src/main/resources/application.yml
index 3acfc04..b27a31d 100755
--- a/main-app/report-service/src/main/resources/application.yml
+++ b/main-app/report-service/src/main/resources/application.yml
@@ -26,5 +26,7 @@ management:
sampling:
probability: 1.0
zipkin:
- tracing:
- endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+ export:
+ tracing:
+ endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+
diff --git a/mvnw b/mvnw
index 19529dd..bd8896b 100755
--- a/mvnw
+++ b/mvnw
@@ -19,7 +19,7 @@
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
-# Apache Maven Wrapper startup batch script, version 3.3.2
+# Apache Maven Wrapper startup batch script, version 3.3.4
#
# Optional ENV vars
# -----------------
@@ -105,14 +105,17 @@ trim() {
printf "%s" "${1}" | tr -d '[:space:]'
}
+scriptDir="$(dirname "$0")"
+scriptName="$(basename "$0")"
+
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
-done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
-[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
@@ -130,7 +133,7 @@ maven-mvnd-*bin.*)
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
-*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
@@ -227,7 +230,7 @@ if [ -n "${distributionSha256Sum-}" ]; then
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
- if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
@@ -252,8 +255,41 @@ if command -v unzip >/dev/null; then
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
-printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
-mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+actualDistributionDir=""
+
+# First try the expected directory name (for regular distributions)
+if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
+ if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
+ actualDistributionDir="$distributionUrlNameMain"
+ fi
+fi
+
+# If not found, search for any directory with the Maven executable (for snapshots)
+if [ -z "$actualDistributionDir" ]; then
+ # enable globbing to iterate over items
+ set +f
+ for dir in "$TMP_DOWNLOAD_DIR"/*; do
+ if [ -d "$dir" ]; then
+ if [ -f "$dir/bin/$MVN_CMD" ]; then
+ actualDistributionDir="$(basename "$dir")"
+ break
+ fi
+ fi
+ done
+ set -f
+fi
+
+if [ -z "$actualDistributionDir" ]; then
+ verbose "Contents of $TMP_DOWNLOAD_DIR:"
+ verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
+ die "Could not find Maven distribution directory in extracted archive"
+fi
+
+verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
index 249bdf3..92450f9 100644
--- a/mvnw.cmd
+++ b/mvnw.cmd
@@ -19,7 +19,7 @@
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
-@REM Apache Maven Wrapper startup batch script, version 3.3.2
+@REM Apache Maven Wrapper startup batch script, version 3.3.4
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@@ -40,7 +40,7 @@
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
-@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
+@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
@@ -73,16 +73,30 @@ switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
if ($env:MVNW_REPOURL) {
- $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
- $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
+ $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+ $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
-$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
+
+$MAVEN_M2_PATH = "$HOME/.m2"
if ($env:MAVEN_USER_HOME) {
- $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
+ $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
+}
+
+if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
+ New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
+}
+
+$MAVEN_WRAPPER_DISTS = $null
+if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
+ $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
+} else {
+ $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
}
-$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+
+$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
@@ -134,7 +148,33 @@ if ($distributionSha256Sum) {
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
-Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
+
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+$actualDistributionDir = ""
+
+# First try the expected directory name (for regular distributions)
+$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
+$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
+if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
+ $actualDistributionDir = $distributionUrlNameMain
+}
+
+# If not found, search for any directory with the Maven executable (for snapshots)
+if (!$actualDistributionDir) {
+ Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
+ $testPath = Join-Path $_.FullName "bin/$MVN_CMD"
+ if (Test-Path -Path $testPath -PathType Leaf) {
+ $actualDistributionDir = $_.Name
+ }
+ }
+}
+
+if (!$actualDistributionDir) {
+ Write-Error "Could not find Maven distribution directory in extracted archive"
+}
+
+Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
diff --git a/pom.xml b/pom.xml
index 9ab9dc6..be62a8c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.5.8
+ 4.0.0
@@ -30,13 +30,13 @@
${java.version}
${java.version}
- 3.4.3
- 2025.0.0
- 3.7.7
- 3.7.7
- 1.10.0
- 1.0.5
- 2.8.5
+
+ 4.0.0
+ 2025.1.0
+ 3.13.3
+ 2.0.0
+ 2.0.1
+ 3.0.0
1.6.3
7.5.1
@@ -44,25 +44,25 @@
33.3.0-jre
2.1.1
1.3.0
- 3.4.0
- 1.20.1
+ 4.0.1
+ 2.0.2
2.17.0
3.6.1
5.0.1
1.3.2
- 2.4-M4-groovy-4.0
+ 2.4-groovy-5.0
3.4
4.0.0.4121
- 0.8.12
+ 0.8.14
3.6.0
10.18.1
src/main/resources/checkstyle.xml
- 3.0.2
- 3.5.0
- 3.5.0
+ 4.2.1
+ 3.5.4
+ 3.5.4
2.9.0
4.9.8.2
8.4.0
@@ -142,8 +142,8 @@
io.hypersistence
- hypersistence-utils-hibernate-63
- ${hibernate-types60.version}
+ hypersistence-utils-hibernate-71
+ ${hibernate-hypersistence-utils}
com.github.gavlyukovskiy
@@ -217,7 +217,7 @@
true
- org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5
+ org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0
diff --git a/spot-bugs.filter-exclude.xml b/spot-bugs.filter-exclude.xml
index 99ccc9e..24e091f 100644
--- a/spot-bugs.filter-exclude.xml
+++ b/spot-bugs.filter-exclude.xml
@@ -1,6 +1,8 @@
+
+
diff --git a/trend/trend-service-api/pom.xml b/trend/trend-service-api/pom.xml
index 8830fdb..5325d4a 100644
--- a/trend/trend-service-api/pom.xml
+++ b/trend/trend-service-api/pom.xml
@@ -35,18 +35,16 @@
-
- com.github.spotbugs
- spotbugs-maven-plugin
-
- ../../spot-bugs.filter-exclude.xml
-
-
org.apache.maven.plugins
- maven-checkstyle-plugin
+ maven-compiler-plugin
- ../../checkstyle.xml
+
+
+ org.projectlombok
+ lombok
+
+
diff --git a/trend/trend-service/pom.xml b/trend/trend-service/pom.xml
index 3400d3c..a096252 100644
--- a/trend/trend-service/pom.xml
+++ b/trend/trend-service/pom.xml
@@ -28,21 +28,27 @@
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter-webmvc
+
+ org.springframework.boot
+ spring-boot-micrometer-tracing-brave
+
org.springframework.boot
spring-boot-starter-actuator
- io.micrometer
- micrometer-tracing-bridge-brave
+ org.springframework.boot
+ spring-boot-starter-zipkin
- io.zipkin.reporter2
- zipkin-reporter-brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
+
+
org.springframework.boot
spring-boot-starter-artemis
@@ -64,13 +70,13 @@
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-starter-webmvc-test
test
- ${build.profile}-${artifactId}-${project.version}
+ ${artifactId}-${project.version}
spring-boot:run
@@ -82,9 +88,26 @@
true
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
-
com.github.spotbugs
spotbugs-maven-plugin
diff --git a/trend/trend-service/src/main/resources/application.yml b/trend/trend-service/src/main/resources/application.yml
index 2fd5bdd..975f29d 100644
--- a/trend/trend-service/src/main/resources/application.yml
+++ b/trend/trend-service/src/main/resources/application.yml
@@ -20,5 +20,7 @@ management:
sampling:
probability: 1.0
zipkin:
- tracing:
- endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+ export:
+ tracing:
+ endpoint: http://${ZIPKIN_HOST:localhost}:${ZIPKIN_PORT:9411}/api/v2/spans
+