diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 18cb6a3..04c506f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,6 +18,7 @@ permissions:
actions: write
id-token: write
contents: write
+ checks: write
concurrency:
# On master, we don't want any jobs cancelled so the sha is used to name the group
@@ -91,7 +92,7 @@ jobs:
restore-keys: ${{ runner.os }}-sonar
- name: Build with Gradle
- run: ./gradlew -q --no-daemon --scan build
+ run: ./gradlew -q build
- name: Publish Test Report
uses: mikepenz/action-junit-report@v4
@@ -144,7 +145,7 @@ jobs:
uses: gradle/actions/setup-gradle@v4
- name: Publish with Gradle
- run: ./gradlew -q --no-daemon --scan publish
+ run: ./gradlew -q publish
- name: Release with Gradle
- run: ./gradlew -q --no-daemon --scan jreleaserFullRelease --no-configuration-cache --full-stacktrace
\ No newline at end of file
+ run: ./gradlew -q jreleaserFullRelease --no-configuration-cache --full-stacktrace
\ No newline at end of file
diff --git a/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/CleanupScheduler.java b/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/CleanupScheduler.java
similarity index 80%
rename from auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/CleanupScheduler.java
rename to auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/CleanupScheduler.java
index 6ac45c1..2c4972c 100644
--- a/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/CleanupScheduler.java
+++ b/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/CleanupScheduler.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.cleanup.service;
+package io.github.tkaczenko.auditor.cleanup.internal.service;
-import io.github.tkaczenko.auditor.core.model.AuditRequestResponse;
-import io.github.tkaczenko.auditor.core.repository.AuditRequestResponseRepository;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRequestResponse;
+import io.github.tkaczenko.auditor.core.internal.repository.AuditRequestResponseRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
diff --git a/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/package-info.java b/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/package-info.java
similarity index 54%
rename from auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/package-info.java
rename to auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/package-info.java
index f028c1a..277fb48 100644
--- a/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/service/package-info.java
+++ b/auditor.cleanup/src/main/java/io/github/tkaczenko/auditor/cleanup/internal/service/package-info.java
@@ -1,2 +1,2 @@
/** Provides utility classes and services for cleaning up audited data. */
-package io.github.tkaczenko.auditor.cleanup.service;
+package io.github.tkaczenko.auditor.cleanup.internal.service;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/Auditable.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/Auditable.java
similarity index 88%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/Auditable.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/Auditable.java
index 4564520..446895a 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/Auditable.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/Auditable.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core;
+package io.github.tkaczenko.auditor.core.api;
/** Provides methods to determine the execution of a specific request. */
public interface Auditable {
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/package-info.java
new file mode 100644
index 0000000..d85c0d7
--- /dev/null
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * Provides the core functionality for the Auditor.
+ * This package contains classes/interfaces exposed to library users.
+ */
+package io.github.tkaczenko.auditor.core.api;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HttpReader.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/HttpReader.java
similarity index 86%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HttpReader.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/HttpReader.java
index cd4fc54..f206c5b 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HttpReader.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/HttpReader.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core;
+package io.github.tkaczenko.auditor.core.api.reader;
/**
* Provides an interface for reading and processing HTTP data.
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/BodyHttpReader.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/body/BodyHttpReader.java
similarity index 92%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/BodyHttpReader.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/body/BodyHttpReader.java
index 0a24877..5874832 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/BodyHttpReader.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/body/BodyHttpReader.java
@@ -1,5 +1,6 @@
-package io.github.tkaczenko.auditor.core;
+package io.github.tkaczenko.auditor.core.api.reader.body;
+import io.github.tkaczenko.auditor.core.api.reader.HttpReader;
import java.io.InputStream;
import java.nio.charset.Charset;
import lombok.SneakyThrows;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HeadersHttpReader.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/headers/HeadersHttpReader.java
similarity index 93%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HeadersHttpReader.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/headers/HeadersHttpReader.java
index d4574ba..d055471 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/HeadersHttpReader.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/api/reader/headers/HeadersHttpReader.java
@@ -1,5 +1,6 @@
-package io.github.tkaczenko.auditor.core;
+package io.github.tkaczenko.auditor.core.api.reader.headers;
+import io.github.tkaczenko.auditor.core.api.reader.HttpReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditFacade.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/AuditFacade.java
similarity index 78%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditFacade.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/AuditFacade.java
index 4e2bf0d..4a6e2c2 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditFacade.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/AuditFacade.java
@@ -1,6 +1,8 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal;
-import io.github.tkaczenko.auditor.core.model.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.service.AuditService;
+import io.github.tkaczenko.auditor.core.internal.service.ThreadLocalAuditRequestResponseContext;
import java.time.LocalDateTime;
import java.util.Optional;
import lombok.Builder;
@@ -28,8 +30,10 @@ public class AuditFacade {
*/
public void setRequest(AuditRequest auditRequest) {
var auditRequestBuilder =
- Optional.ofNullable(AuditRequestContext.getAuditRequestResponseBuilderThreadLocal())
- .orElseGet(AuditRequestContext::initializeAuditRequestBuilderThreadLocal);
+ Optional.ofNullable(
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal())
+ .orElseGet(
+ ThreadLocalAuditRequestResponseContext::initializeAuditRequestBuilderThreadLocal);
auditRequestBuilder
.createDateTime(auditRequest.createDateTime)
@@ -39,7 +43,8 @@ public void setRequest(AuditRequest auditRequest) {
.requestBody(auditRequest.requestBody)
.remoteAddress(auditRequest.remoteAddress);
- AuditRequestContext.setAuditRequestResponseBuilderThreadLocal(auditRequestBuilder);
+ ThreadLocalAuditRequestResponseContext.setAuditRequestResponseBuilderThreadLocal(
+ auditRequestBuilder);
}
/**
@@ -50,7 +55,8 @@ public void setRequest(AuditRequest auditRequest) {
* @param auditResponse the audit response object containing the necessary details
*/
public void setResponse(AuditResponse auditResponse) {
- var auditRequestBuilder = AuditRequestContext.getAuditRequestResponseBuilderThreadLocal();
+ var auditRequestBuilder =
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal();
auditRequestBuilder
.error(auditResponse.error())
@@ -59,7 +65,8 @@ public void setResponse(AuditResponse auditResponse) {
.responseBody(auditResponse.responseBody())
.spendTimeInMs(auditResponse.callDurationMillis());
- AuditRequestContext.setAuditRequestResponseBuilderThreadLocal(auditRequestBuilder);
+ ThreadLocalAuditRequestResponseContext.setAuditRequestResponseBuilderThreadLocal(
+ auditRequestBuilder);
}
/**
@@ -70,7 +77,8 @@ public void setResponse(AuditResponse auditResponse) {
* @param requestType the type of request, e.g., "GET_REPORT", "POST_TRANSACTION", etc.
*/
public void save(String error, String provider, String requestType) {
- var auditRequestBuilder = AuditRequestContext.getAuditRequestResponseBuilderThreadLocal();
+ var auditRequestBuilder =
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal();
AuditRequestResponseDto dto =
auditRequestBuilder.provider(provider).requestType(requestType).build();
@@ -87,7 +95,7 @@ public void save(String error, String provider, String requestType) {
}
auditService.save(dto);
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
}
/**
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/AuditRequestResponseDto.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/AuditRequestResponseDto.java
similarity index 96%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/AuditRequestResponseDto.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/AuditRequestResponseDto.java
index eb7232c..0b84024 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/AuditRequestResponseDto.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/AuditRequestResponseDto.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.model.dto;
+package io.github.tkaczenko.auditor.core.internal.dto;
import java.time.LocalDateTime;
import lombok.Builder;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/package-info.java
similarity index 82%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/package-info.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/package-info.java
index 24f3555..92f3996 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/dto/package-info.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/dto/package-info.java
@@ -3,4 +3,4 @@
* used in the auditor core module. DTOs are used to transfer data between different layers of the
* application, such as the controller and the service layer.
*/
-package io.github.tkaczenko.auditor.core.model.dto;
+package io.github.tkaczenko.auditor.core.internal.dto;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/AuditRequestResponse.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRequestResponse.java
similarity index 98%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/AuditRequestResponse.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRequestResponse.java
index 006bb32..2125eb2 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/AuditRequestResponse.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRequestResponse.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.model;
+package io.github.tkaczenko.auditor.core.internal.entity;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.persistence.Column;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/package-info.java
similarity index 82%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/package-info.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/package-info.java
index dbd8c61..302f3d0 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/model/package-info.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/entity/package-info.java
@@ -3,4 +3,4 @@
* represent the main entities and data structures used throughout the application. This package
* includes classes for managing audit logs, and other core functionality.
*/
-package io.github.tkaczenko.auditor.core.model;
+package io.github.tkaczenko.auditor.core.internal.entity;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactory.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactory.java
similarity index 95%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactory.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactory.java
index e9c3b2b..8988ba2 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactory.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactory.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.factory;
-import io.github.tkaczenko.auditor.core.HttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.HttpReader;
import java.util.List;
import java.util.Map;
import java.util.Optional;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/BodyHttpReaderService.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyHttpReaderService.java
similarity index 83%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/BodyHttpReaderService.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyHttpReaderService.java
index 68c2cb0..904c232 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/BodyHttpReaderService.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyHttpReaderService.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.core.service.reader;
+package io.github.tkaczenko.auditor.core.internal.factory.body;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
-import io.github.tkaczenko.auditor.core.service.HttpReaderFactory;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.internal.factory.HttpReaderFactory;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/HeadersHttpReaderService.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersHttpReaderService.java
similarity index 88%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/HeadersHttpReaderService.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersHttpReaderService.java
index d2f62d9..286b5da 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/HeadersHttpReaderService.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersHttpReaderService.java
@@ -1,10 +1,10 @@
-package io.github.tkaczenko.auditor.core.service.reader;
+package io.github.tkaczenko.auditor.core.internal.factory.headers;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
-import io.github.tkaczenko.auditor.core.service.HttpReaderFactory;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.internal.factory.HttpReaderFactory;
import java.util.List;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/package-info.java
new file mode 100644
index 0000000..c834b80
--- /dev/null
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/factory/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Provides classes and interfaces for reading data from various sources. The main entry point is
+ * the {@link io.github.tkaczenko.auditor.core.api.reader.HttpReader} interface, which defines the
+ * contract for reading data. Implementations of this interface can be used to read data from
+ * different sources, such as requests, responses for HTTP clients. The package also includes
+ * utility classes and helper methods to facilitate the reading of data.
+ */
+package io.github.tkaczenko.auditor.core.internal.factory;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/AuditRequestResponseRepository.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRequestResponseRepository.java
similarity index 83%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/AuditRequestResponseRepository.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRequestResponseRepository.java
index 676e68d..d34ab99 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/AuditRequestResponseRepository.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRequestResponseRepository.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.core.repository;
+package io.github.tkaczenko.auditor.core.internal.repository;
-import io.github.tkaczenko.auditor.core.model.AuditRequestResponse;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRequestResponse;
import org.springframework.data.repository.NoRepositoryBean;
/**
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/EntitySupplier.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplier.java
similarity index 98%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/EntitySupplier.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplier.java
index 0d461e7..f26cc9a 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/EntitySupplier.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplier.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.repository;
+package io.github.tkaczenko.auditor.core.internal.repository;
import java.lang.reflect.Array;
import java.lang.reflect.GenericArrayType;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/package-info.java
similarity index 78%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/package-info.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/package-info.java
index 18cbd76..c48a813 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/repository/package-info.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/repository/package-info.java
@@ -3,4 +3,4 @@
* the methods for interacting with the underlying data storage, such as querying, creating,
* updating, and deleting entities.
*/
-package io.github.tkaczenko.auditor.core.repository;
+package io.github.tkaczenko.auditor.core.internal.repository;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProvider.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProvider.java
similarity index 95%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProvider.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProvider.java
index 352a988..5aed4f6 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProvider.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProvider.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.service;
import java.time.LocalDateTime;
import java.util.Optional;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditService.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditService.java
similarity index 90%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditService.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditService.java
index bc28b71..8b31692 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditService.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/AuditService.java
@@ -1,9 +1,9 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.service;
import io.github.tkaczenko.auditor.core.config.PropertiesConfig.PersistingProperties;
-import io.github.tkaczenko.auditor.core.model.AuditRequestResponse;
-import io.github.tkaczenko.auditor.core.model.dto.AuditRequestResponseDto;
-import io.github.tkaczenko.auditor.core.repository.AuditRequestResponseRepository;
+import io.github.tkaczenko.auditor.core.internal.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRequestResponse;
+import io.github.tkaczenko.auditor.core.internal.repository.AuditRequestResponseRepository;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditRequestContext.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContext.java
similarity index 83%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditRequestContext.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContext.java
index 0981a93..9c78fb9 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/AuditRequestContext.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContext.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.service;
-import io.github.tkaczenko.auditor.core.model.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.dto.AuditRequestResponseDto;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
@@ -9,9 +9,10 @@
* initializing, setting, and clearing the thread-local {@link
* AuditRequestResponseDto.AuditRequestResponseDtoBuilder} instance.
*
- *
The {@link AuditRequestContext} class serves as a utility for managing the lifecycle of the
- * {@link AuditRequestResponseDto.AuditRequestResponseDtoBuilder} instance. It ensures that the
- * builder is properly initialized, set, and cleared within the current thread's context.
+ *
The {@link ThreadLocalAuditRequestResponseContext} class serves as a utility for managing the
+ * lifecycle of the {@link AuditRequestResponseDto.AuditRequestResponseDtoBuilder} instance. It
+ * ensures that the builder is properly initialized, set, and cleared within the current thread's
+ * context.
*
*
This class follows the Utility Class pattern, as it contains only static methods and does not
* require instantiation. It provides a centralized and thread-safe way to work with the
@@ -19,7 +20,7 @@
*/
@Slf4j
@UtilityClass
-public class AuditRequestContext {
+public class ThreadLocalAuditRequestResponseContext {
private static final ThreadLocal
auditRequestResponseBuilderThreadLocal = new ThreadLocal<>();
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/package-info.java
similarity index 70%
rename from auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/package-info.java
rename to auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/package-info.java
index 3e3df15..0791494 100644
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/package-info.java
+++ b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/internal/service/package-info.java
@@ -2,4 +2,4 @@
* Provides the core services for the Auditor. This package contains the main business
* logic and functionality of the Auditor.
*/
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.service;
diff --git a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/package-info.java b/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/package-info.java
deleted file mode 100644
index 0b0f83e..0000000
--- a/auditor.core/src/main/java/io/github/tkaczenko/auditor/core/service/reader/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Provides classes and interfaces for reading data from various sources. The main entry point is
- * the {@link io.github.tkaczenko.auditor.core.HttpReader} interface, which defines the contract
- * for reading data. Implementations of this interface can be used to read data from different
- * sources, such as requests, responses for HTTP clients. The package also includes utility classes
- * and helper methods to facilitate the reading of data.
- */
-package io.github.tkaczenko.auditor.core.service.reader;
diff --git a/auditor.core/src/main/java/module-info.java b/auditor.core/src/main/java/module-info.java
index 4b91a5d..f031689 100644
--- a/auditor.core/src/main/java/module-info.java
+++ b/auditor.core/src/main/java/module-info.java
@@ -5,10 +5,17 @@
module auditor.core {
exports io.github.tkaczenko.auditor.core;
exports io.github.tkaczenko.auditor.core.config;
- exports io.github.tkaczenko.auditor.core.model;
- exports io.github.tkaczenko.auditor.core.repository;
- exports io.github.tkaczenko.auditor.core.service;
- exports io.github.tkaczenko.auditor.core.service.reader;
+ exports io.github.tkaczenko.auditor.core.internal.repository;
+ exports io.github.tkaczenko.auditor.core.internal;
+ exports io.github.tkaczenko.auditor.core.api;
+ exports io.github.tkaczenko.auditor.core.api.reader;
+ exports io.github.tkaczenko.auditor.core.api.reader.body;
+ exports io.github.tkaczenko.auditor.core.api.reader.headers;
+ exports io.github.tkaczenko.auditor.core.internal.service;
+ exports io.github.tkaczenko.auditor.core.internal.factory;
+ exports io.github.tkaczenko.auditor.core.internal.factory.headers;
+ exports io.github.tkaczenko.auditor.core.internal.factory.body;
+ exports io.github.tkaczenko.auditor.core.internal.entity;
requires com.fasterxml.jackson.annotation;
requires com.fasterxml.jackson.databind;
@@ -24,5 +31,5 @@
requires spring.data.jpa;
requires spring.tx;
requires spring.web;
- requires com.github.spotbugs.annotations;
+ requires com.github.spotbugs.annotations;
}
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditFacadeTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/AuditFacadeTest.java
similarity index 86%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditFacadeTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/AuditFacadeTest.java
index 757de76..f8ebec8 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditFacadeTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/AuditFacadeTest.java
@@ -1,9 +1,11 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.verify;
-import io.github.tkaczenko.auditor.core.model.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.dto.AuditRequestResponseDto;
+import io.github.tkaczenko.auditor.core.internal.service.AuditService;
+import io.github.tkaczenko.auditor.core.internal.service.ThreadLocalAuditRequestResponseContext;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -55,7 +57,7 @@ void setRequest() {
auditFacade.setRequest(EXPECTED_AUDIT_REQUEST);
AuditRequestResponseDto actual =
- AuditRequestContext.getAuditRequestResponseBuilderThreadLocal().build();
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal().build();
assertEquals(EXPECTED_AUDIT_REQUEST.url(), actual.getUrl());
assertEquals(EXPECTED_AUDIT_REQUEST.requestMethod(), actual.getRequestMethod());
@@ -69,7 +71,7 @@ void setResponse() {
auditFacade.setResponse(EXPECTED_AUDIT_RESPONSE);
AuditRequestResponseDto actual =
- AuditRequestContext.getAuditRequestResponseBuilderThreadLocal().build();
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal().build();
assertEquals(EXPECTED_AUDIT_RESPONSE.error(), actual.getError());
assertEquals(EXPECTED_AUDIT_RESPONSE.responseBody(), actual.getResponseBody());
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/model/AuditRecord.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRecord.java
similarity index 89%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/model/AuditRecord.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRecord.java
index 077dcf9..91b6f75 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/model/AuditRecord.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/entity/AuditRecord.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.model;
+package io.github.tkaczenko.auditor.core.internal.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactoryTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactoryTest.java
similarity index 81%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactoryTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactoryTest.java
index d76c961..8ebfc30 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/HttpReaderFactoryTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/HttpReaderFactoryTest.java
@@ -1,8 +1,8 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.factory;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import io.github.tkaczenko.auditor.core.HttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.HttpReader;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.Test;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/BodyReaderServiceTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyReaderServiceTest.java
similarity index 88%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/BodyReaderServiceTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyReaderServiceTest.java
index abea2e6..dd498e3 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/BodyReaderServiceTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/body/BodyReaderServiceTest.java
@@ -1,9 +1,9 @@
-package io.github.tkaczenko.auditor.core.service.reader;
+package io.github.tkaczenko.auditor.core.internal.factory.body;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.Test;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/HeadersReaderServiceTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersReaderServiceTest.java
similarity index 90%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/HeadersReaderServiceTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersReaderServiceTest.java
index c294be7..9812f64 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/reader/HeadersReaderServiceTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/factory/headers/HeadersReaderServiceTest.java
@@ -1,9 +1,9 @@
-package io.github.tkaczenko.auditor.core.service.reader;
+package io.github.tkaczenko.auditor.core.internal.factory.headers;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import java.util.Collections;
import java.util.List;
import java.util.Map;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/AuditRecordRepository.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRecordRepository.java
similarity index 54%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/AuditRecordRepository.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRecordRepository.java
index 95d0f70..6d13ada 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/AuditRecordRepository.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/AuditRecordRepository.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.core.repository;
+package io.github.tkaczenko.auditor.core.internal.repository;
-import io.github.tkaczenko.auditor.core.model.AuditRecord;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRecord;
import org.springframework.stereotype.Repository;
@Repository
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/EntitySupplierTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplierTest.java
similarity index 89%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/EntitySupplierTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplierTest.java
index 82199ff..5c4a432 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/repository/EntitySupplierTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/repository/EntitySupplierTest.java
@@ -1,11 +1,11 @@
-package io.github.tkaczenko.auditor.core.repository;
+package io.github.tkaczenko.auditor.core.internal.repository;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import io.github.tkaczenko.auditor.core.Auditable;
-import io.github.tkaczenko.auditor.core.model.AuditRecord;
-import io.github.tkaczenko.auditor.core.model.AuditRequestResponse;
+import io.github.tkaczenko.auditor.core.api.Auditable;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRecord;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRequestResponse;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAccessor;
import java.util.Optional;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProviderTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProviderTest.java
similarity index 90%
rename from auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProviderTest.java
rename to auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProviderTest.java
index 194b730..1ec1789 100644
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditDateTimeProviderTest.java
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/AuditDateTimeProviderTest.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.core.service;
+package io.github.tkaczenko.auditor.core.internal.service;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContextTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContextTest.java
new file mode 100644
index 0000000..5d7dd14
--- /dev/null
+++ b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/internal/service/ThreadLocalAuditRequestResponseContextTest.java
@@ -0,0 +1,52 @@
+package io.github.tkaczenko.auditor.core.internal.service;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import io.github.tkaczenko.auditor.core.internal.dto.AuditRequestResponseDto;
+import org.junit.jupiter.api.Test;
+
+class ThreadLocalAuditRequestResponseContextTest {
+
+ @Test
+ void initializeAuditRequestBuilderThreadLocal() {
+ AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
+ AuditRequestResponseDto.AuditRequestResponseDtoBuilder actual =
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal();
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ void setAuditRequestBuilderThreadLocal() {
+ AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
+ expected.url("url");
+
+ ThreadLocalAuditRequestResponseContext.setAuditRequestResponseBuilderThreadLocal(expected);
+
+ assertEquals(
+ expected,
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal());
+ }
+
+ @Test
+ void clearAuditRequestBuilderThreadLocal() {
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
+
+ ThreadLocalAuditRequestResponseContext.clearAuditRequestBuilderThreadLocal();
+
+ assertNull(ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal());
+ }
+
+ @Test
+ void getAuditRequestBuilderThreadLocal() {
+ AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
+
+ assertEquals(
+ expected,
+ ThreadLocalAuditRequestResponseContext.getAuditRequestResponseBuilderThreadLocal());
+ }
+}
diff --git a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditRequestResponseContextTest.java b/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditRequestResponseContextTest.java
deleted file mode 100644
index 9e62c2d..0000000
--- a/auditor.core/src/test/java/io/github/tkaczenko/auditor/core/service/AuditRequestResponseContextTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package io.github.tkaczenko.auditor.core.service;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-
-import io.github.tkaczenko.auditor.core.model.dto.AuditRequestResponseDto;
-import org.junit.jupiter.api.Test;
-
-class AuditRequestResponseContextTest {
-
- @Test
- void initializeAuditRequestBuilderThreadLocal() {
- AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
- AuditRequestResponseDto.AuditRequestResponseDtoBuilder actual =
- AuditRequestContext.getAuditRequestResponseBuilderThreadLocal();
-
- assertEquals(expected, actual);
- }
-
- @Test
- void setAuditRequestBuilderThreadLocal() {
- AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
- expected.url("url");
-
- AuditRequestContext.setAuditRequestResponseBuilderThreadLocal(expected);
-
- assertEquals(expected, AuditRequestContext.getAuditRequestResponseBuilderThreadLocal());
- }
-
- @Test
- void clearAuditRequestBuilderThreadLocal() {
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
-
- AuditRequestContext.clearAuditRequestBuilderThreadLocal();
-
- assertNull(AuditRequestContext.getAuditRequestResponseBuilderThreadLocal());
- }
-
- @Test
- void getAuditRequestBuilderThreadLocal() {
- AuditRequestResponseDto.AuditRequestResponseDtoBuilder expected =
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
-
- assertEquals(expected, AuditRequestContext.getAuditRequestResponseBuilderThreadLocal());
- }
-}
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/AuditInboundRequestFilter.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundRequestFilter.java
similarity index 86%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/AuditInboundRequestFilter.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundRequestFilter.java
index e737125..ed87157 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/AuditInboundRequestFilter.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundRequestFilter.java
@@ -1,11 +1,12 @@
-package io.github.tkaczenko.auditor.inbound;
+package io.github.tkaczenko.auditor.inbound.api;
-import io.github.tkaczenko.auditor.core.Auditable;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.AuditRequestContext;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.api.Auditable;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
+import io.github.tkaczenko.auditor.core.internal.service.ThreadLocalAuditRequestResponseContext;
+import io.github.tkaczenko.auditor.inbound.internal.service.IpAddressSupplier;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -58,7 +59,7 @@ protected void doFilterInternal(
final HttpServletResponse response,
final FilterChain filterChain)
throws ServletException, IOException {
- AuditRequestContext.clearAuditRequestBuilderThreadLocal();
+ ThreadLocalAuditRequestResponseContext.clearAuditRequestBuilderThreadLocal();
Optional createDateTime = auditDateTimeProvider.fromNow();
if (createDateTime.isEmpty()) {
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestBodyHttpReader.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundRequestBodyHttpReader.java
similarity index 87%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestBodyHttpReader.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundRequestBodyHttpReader.java
index e9392d1..f17b185 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestBodyHttpReader.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundRequestBodyHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.inbound.reader;
+package io.github.tkaczenko.auditor.inbound.api.reader.body;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.nio.charset.Charset;
import org.springframework.stereotype.Component;
import org.springframework.web.util.ContentCachingRequestWrapper;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseBodyHttpReader.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundResponseBodyHttpReader.java
similarity index 86%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseBodyHttpReader.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundResponseBodyHttpReader.java
index 8120940..fd7ed96 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseBodyHttpReader.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/body/InboundResponseBodyHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.inbound.reader;
+package io.github.tkaczenko.auditor.inbound.api.reader.body;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.nio.charset.Charset;
import org.springframework.stereotype.Component;
import org.springframework.web.util.ContentCachingResponseWrapper;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestHeadersHttpReader.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundRequestHeadersHttpReader.java
similarity index 89%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestHeadersHttpReader.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundRequestHeadersHttpReader.java
index 2a28898..2676bc9 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundRequestHeadersHttpReader.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundRequestHeadersHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.inbound.reader;
+package io.github.tkaczenko.auditor.inbound.api.reader.headers;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseHeadersHttpReader.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundResponseHeadersHttpReader.java
similarity index 90%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseHeadersHttpReader.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundResponseHeadersHttpReader.java
index 8ad800c..e973fa6 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/InboundResponseHeadersHttpReader.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/headers/InboundResponseHeadersHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.inbound.reader;
+package io.github.tkaczenko.auditor.inbound.api.reader.headers;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/package-info.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/package-info.java
new file mode 100644
index 0000000..fef76be
--- /dev/null
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/api/reader/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Provides classes and interfaces for reading data from various sources. The main entry point is
+ * the {@link io.github.tkaczenko.auditor.core.api.reader.HttpReader} interface, which defines the
+ * contract for reading data. Implementations of this interface can be used to read data from
+ * different sources, such as requests, responses for HTTP clients. The package also includes
+ * utility classes and helper methods to facilitate the reading of data.
+ */
+package io.github.tkaczenko.auditor.inbound.api.reader;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/config/AuditorConfig.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/config/AuditorConfig.java
index dffccaa..534d0e5 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/config/AuditorConfig.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/config/AuditorConfig.java
@@ -1,6 +1,6 @@
package io.github.tkaczenko.auditor.inbound.config;
-import io.github.tkaczenko.auditor.inbound.AuditInboundRequestFilter;
+import io.github.tkaczenko.auditor.inbound.api.AuditInboundRequestFilter;
import java.util.List;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplier.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplier.java
similarity index 97%
rename from auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplier.java
rename to auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplier.java
index 1fa8914..3bf871a 100644
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplier.java
+++ b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplier.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.inbound;
+package io.github.tkaczenko.auditor.inbound.internal.service;
import jakarta.servlet.http.HttpServletRequest;
import java.util.stream.Stream;
diff --git a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/package-info.java b/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/package-info.java
deleted file mode 100644
index 003f27a..0000000
--- a/auditor.inbound/src/main/java/io/github/tkaczenko/auditor/inbound/reader/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Provides classes and interfaces for reading data from various sources. The main entry point is
- * the {@link io.github.tkaczenko.auditor.core.HttpReader} interface, which defines the contract
- * for reading data. Implementations of this interface can be used to read data from different
- * sources, such as requests, responses for HTTP clients. The package also includes utility classes
- * and helper methods to facilitate the reading of data.
- */
-package io.github.tkaczenko.auditor.inbound.reader;
diff --git a/auditor.inbound/src/main/java/module-info.java b/auditor.inbound/src/main/java/module-info.java
index c7d343d..7c118ca 100644
--- a/auditor.inbound/src/main/java/module-info.java
+++ b/auditor.inbound/src/main/java/module-info.java
@@ -6,6 +6,8 @@
module auditor.inbound {
exports io.github.tkaczenko.auditor.inbound;
exports io.github.tkaczenko.auditor.inbound.config;
+ exports io.github.tkaczenko.auditor.inbound.internal.service;
+ exports io.github.tkaczenko.auditor.inbound.api;
requires auditor.core;
requires static lombok;
diff --git a/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/AuditInboundAuditRequestFilterTest.java b/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundAuditRequestFilterTest.java
similarity index 90%
rename from auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/AuditInboundAuditRequestFilterTest.java
rename to auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundAuditRequestFilterTest.java
index 692af59..5603104 100644
--- a/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/AuditInboundAuditRequestFilterTest.java
+++ b/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/api/AuditInboundAuditRequestFilterTest.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.inbound;
+package io.github.tkaczenko.auditor.inbound.api;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
@@ -11,10 +11,11 @@
import static org.mockito.Mockito.when;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
+import io.github.tkaczenko.auditor.inbound.internal.service.IpAddressSupplier;
import jakarta.servlet.FilterChain;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
diff --git a/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplierTest.java b/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplierTest.java
similarity index 95%
rename from auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplierTest.java
rename to auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplierTest.java
index 1ce9dff..8637750 100644
--- a/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/IpAddressSupplierTest.java
+++ b/auditor.inbound/src/test/java/io/github/tkaczenko/auditor/inbound/internal/service/IpAddressSupplierTest.java
@@ -1,8 +1,8 @@
-package io.github.tkaczenko.auditor.inbound;
+package io.github.tkaczenko.auditor.inbound.internal.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import io.github.tkaczenko.auditor.inbound.IpAddressSupplier.HttpRequestHeader;
+import io.github.tkaczenko.auditor.inbound.internal.service.IpAddressSupplier.HttpRequestHeader;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockHttpServletRequest;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/FeignAuditRequestLogger.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/FeignAuditRequestLogger.java
similarity index 89%
rename from auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/FeignAuditRequestLogger.java
rename to auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/FeignAuditRequestLogger.java
index f47e65e..8979af1 100644
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/FeignAuditRequestLogger.java
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/FeignAuditRequestLogger.java
@@ -1,12 +1,12 @@
-package io.github.tkaczenko.auditor.outbound.feign;
+package io.github.tkaczenko.auditor.outbound.feign.api;
import feign.Logger;
import feign.Request;
import feign.Response;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Optional;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestBodyHttpReader.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignRequestBodyHttpReader.java
similarity index 82%
rename from auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestBodyHttpReader.java
rename to auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignRequestBodyHttpReader.java
index 6bf68e1..066153c 100644
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestBodyHttpReader.java
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignRequestBodyHttpReader.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.outbound.feign.reader;
+package io.github.tkaczenko.auditor.outbound.feign.api.reader.body;
import feign.Request;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import org.springframework.stereotype.Component;
/** HTTP request body reader from the provided {@link Request} */
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseBodyHttpReader.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignResponseBodyHttpReader.java
similarity index 89%
rename from auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseBodyHttpReader.java
rename to auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignResponseBodyHttpReader.java
index 5a93288..f323ac5 100644
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseBodyHttpReader.java
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/body/FeignResponseBodyHttpReader.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.outbound.feign.reader;
+package io.github.tkaczenko.auditor.outbound.feign.api.reader.body;
import feign.Response;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestHeadersHttpReader.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignRequestHeadersHttpReader.java
similarity index 82%
rename from auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestHeadersHttpReader.java
rename to auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignRequestHeadersHttpReader.java
index 4c48da2..1171203 100644
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignRequestHeadersHttpReader.java
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignRequestHeadersHttpReader.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.outbound.feign.reader;
+package io.github.tkaczenko.auditor.outbound.feign.api.reader.headers;
import feign.Request;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseHeadersHttpReader.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignResponseHeadersHttpReader.java
similarity index 82%
rename from auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseHeadersHttpReader.java
rename to auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignResponseHeadersHttpReader.java
index bc8170e..1f29625 100644
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/FeignResponseHeadersHttpReader.java
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/headers/FeignResponseHeadersHttpReader.java
@@ -1,7 +1,7 @@
-package io.github.tkaczenko.auditor.outbound.feign.reader;
+package io.github.tkaczenko.auditor.outbound.feign.api.reader.headers;
import feign.Response;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/package-info.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/package-info.java
new file mode 100644
index 0000000..948538c
--- /dev/null
+++ b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/api/reader/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Provides classes and interfaces for reading data from various sources. The main entry point is
+ * the {@link io.github.tkaczenko.auditor.core.api.reader.HttpReader} interface, which defines the
+ * contract for reading data. Implementations of this interface can be used to read data from
+ * different sources, such as requests, responses for HTTP clients. The package also includes
+ * utility classes and helper methods to facilitate the reading of data.
+ */
+package io.github.tkaczenko.auditor.outbound.feign.api.reader;
diff --git a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/package-info.java b/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/package-info.java
deleted file mode 100644
index 784f7b9..0000000
--- a/auditor.outbound.feign/src/main/java/io/github/tkaczenko/auditor/outbound/feign/reader/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Provides classes and interfaces for reading data from various sources. The main entry point is
- * the {@link io.github.tkaczenko.auditor.core.HttpReader} interface, which defines the contract
- * for reading data. Implementations of this interface can be used to read data from different
- * sources, such as requests, responses for HTTP clients. The package also includes utility classes
- * and helper methods to facilitate the reading of data.
- */
-package io.github.tkaczenko.auditor.outbound.feign.reader;
diff --git a/auditor.outbound.feign/src/main/java/module-info.java b/auditor.outbound.feign/src/main/java/module-info.java
index 8925bc6..3ed3386 100644
--- a/auditor.outbound.feign/src/main/java/module-info.java
+++ b/auditor.outbound.feign/src/main/java/module-info.java
@@ -4,7 +4,7 @@
* the necessary dependencies.
*/
module auditor.outbound.feign {
- exports io.github.tkaczenko.auditor.outbound.feign;
+ exports io.github.tkaczenko.auditor.outbound.feign.api;
requires auditor.core;
requires feign.core;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/AuditedOutboundCall.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCall.java
similarity index 94%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/AuditedOutboundCall.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCall.java
index 530272e..b0bf255 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/AuditedOutboundCall.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCall.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.outbound;
+package io.github.tkaczenko.auditor.outbound.api;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/AuditedOutboundCallAspect.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCallAspect.java
similarity index 86%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/AuditedOutboundCallAspect.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCallAspect.java
index 9659be6..763a771 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/AuditedOutboundCallAspect.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/AuditedOutboundCallAspect.java
@@ -1,8 +1,7 @@
-package io.github.tkaczenko.auditor.outbound.aspect;
+package io.github.tkaczenko.auditor.outbound.api;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.AuditRequestContext;
-import io.github.tkaczenko.auditor.outbound.AuditedOutboundCall;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.service.ThreadLocalAuditRequestResponseContext;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -39,7 +38,7 @@ public class AuditedOutboundCallAspect {
@Around(value = "@annotation(auditedOutboundCall)", argNames = "jp,auditedOutboundCall")
public Object auditedOutboundCall(
ProceedingJoinPoint jp, AuditedOutboundCall auditedOutboundCall) {
- AuditRequestContext.initializeAuditRequestBuilderThreadLocal();
+ ThreadLocalAuditRequestResponseContext.initializeAuditRequestBuilderThreadLocal();
String provider = auditedOutboundCall.provider();
String requestType = auditedOutboundCall.requestType();
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspect.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspect.java
similarity index 93%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspect.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspect.java
index 193d7db..2388fdb 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspect.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspect.java
@@ -1,9 +1,9 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.aspect;
+package io.github.tkaczenko.auditor.outbound.api;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Optional;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/package-info.java
new file mode 100644
index 0000000..ed674f3
--- /dev/null
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * This package contains the aspect used in the outbound service. The aspect is responsible for
+ * logging the request and response data for each REST call. This package contains the interceptor
+ * for the RestTemplate used in the outbound service. The service is responsible for logging the
+ * request and response data for each REST call.
+ */
+package io.github.tkaczenko.auditor.outbound.api;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestBodyHttpReader.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateRequestBodyHttpReader.java
similarity index 83%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestBodyHttpReader.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateRequestBodyHttpReader.java
index 3f3d736..983d77c 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestBodyHttpReader.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateRequestBodyHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.reader;
+package io.github.tkaczenko.auditor.outbound.api.reader.body;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.nio.charset.StandardCharsets;
import org.springframework.stereotype.Component;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseBodyHttpReader.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateResponseBodyHttpReader.java
similarity index 90%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseBodyHttpReader.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateResponseBodyHttpReader.java
index 46e8e81..f5874dc 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseBodyHttpReader.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/body/RestTemplateResponseBodyHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.reader;
+package io.github.tkaczenko.auditor.outbound.api.reader.body;
-import io.github.tkaczenko.auditor.core.BodyHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.body.BodyHttpReader;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestHeadersHttpReader.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateRequestHeadersHttpReader.java
similarity index 84%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestHeadersHttpReader.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateRequestHeadersHttpReader.java
index a5c352d..60f8324 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateRequestHeadersHttpReader.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateRequestHeadersHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.reader;
+package io.github.tkaczenko.auditor.outbound.api.reader.headers;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseHeadersHttpReader.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateResponseHeadersHttpReader.java
similarity index 85%
rename from auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseHeadersHttpReader.java
rename to auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateResponseHeadersHttpReader.java
index 7717e4a..a1194b9 100644
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/RestTemplateResponseHeadersHttpReader.java
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/headers/RestTemplateResponseHeadersHttpReader.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.reader;
+package io.github.tkaczenko.auditor.outbound.api.reader.headers;
-import io.github.tkaczenko.auditor.core.HeadersHttpReader;
+import io.github.tkaczenko.auditor.core.api.reader.headers.HeadersHttpReader;
import org.springframework.http.HttpHeaders;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/package-info.java
new file mode 100644
index 0000000..8e43c3a
--- /dev/null
+++ b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/api/reader/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Provides classes and interfaces for reading data from various sources. The main entry point is
+ * the {@link io.github.tkaczenko.auditor.core.api.reader.HttpReader} interface, which defines the
+ * contract for reading data. Implementations of this interface can be used to read data from
+ * different sources, such as requests, responses for HTTP clients. The package also includes
+ * utility classes and helper methods to facilitate the reading of data.
+ */
+package io.github.tkaczenko.auditor.outbound.api.reader;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/package-info.java
deleted file mode 100644
index c75b99f..0000000
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/aspect/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * This package contains the aspect used in the outbound service. The aspect
- * is responsible for logging the request and response data for each REST call.
- */
-package io.github.tkaczenko.auditor.outbound.aspect;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/package-info.java
deleted file mode 100644
index ed773e6..0000000
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * This package contains the interceptor for the RestTemplate used in the outbound service. The
- * service is responsible for logging the request and response data for each REST call.
- */
-package io.github.tkaczenko.auditor.outbound.resttemplate.aspect;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/package-info.java
deleted file mode 100644
index 03a96ca..0000000
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Provides utility classes and interfaces for interacting with external services using the Spring
- * RestTemplate. This package contains classes that handle the configuration, execution, and error
- * handling of REST API calls.
- */
-package io.github.tkaczenko.auditor.outbound.resttemplate;
diff --git a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/package-info.java b/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/package-info.java
deleted file mode 100644
index bb2491c..0000000
--- a/auditor.outbound/src/main/java/io/github/tkaczenko/auditor/outbound/resttemplate/reader/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Provides classes and interfaces for reading data from various sources. The main entry point is
- * the {@link io.github.tkaczenko.auditor.core.HttpReader} interface, which defines the contract
- * for reading data. Implementations of this interface can be used to read data from different
- * sources, such as requests, responses for HTTP clients. The package also includes utility classes
- * and helper methods to facilitate the reading of data.
- */
-package io.github.tkaczenko.auditor.outbound.resttemplate.reader;
diff --git a/auditor.outbound/src/main/java/module-info.java b/auditor.outbound/src/main/java/module-info.java
index 1916058..081b861 100644
--- a/auditor.outbound/src/main/java/module-info.java
+++ b/auditor.outbound/src/main/java/module-info.java
@@ -6,6 +6,7 @@
module auditor.outbound {
exports io.github.tkaczenko.auditor.outbound;
exports io.github.tkaczenko.auditor.outbound.config;
+ exports io.github.tkaczenko.auditor.outbound.api;
requires auditor.core;
requires static lombok;
diff --git a/build.gradle.kts b/build.gradle.kts
index 0c4a57e..37a909f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -53,12 +53,18 @@ sonar {
}
val exportedProjects = listOf(
- ":auditor.core", ":auditor.inbound", ":auditor.outbound", ":auditor.outbound.feign", ":auditor.cleanup", ":auditor.starter"
+ ":auditor.core", ":auditor.inbound", ":auditor.outbound", ":auditor.starter",
+ ":auditor.outbound.feign", ":auditor.cleanup",
)
val aggregatedJavadocDir = layout.buildDirectory.dir("docs/javadoc").get()
val stagingRepository = layout.buildDirectory.dir("staging-deploy").get()
tasks {
+ check {
+ dependsOn(named("testAggregateTestReport"))
+ dependsOn(named("testCodeCoverageReport"))
+ }
+
withType() {
dependsOn(named("testAggregateTestReport"))
dependsOn(named("testCodeCoverageReport"))
diff --git a/buildSrc/src/main/kotlin/auditor.application-conventions.gradle.kts b/buildSrc/src/main/kotlin/auditor.application-conventions.gradle.kts
index 0e8c14b..4171a7b 100644
--- a/buildSrc/src/main/kotlin/auditor.application-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/auditor.application-conventions.gradle.kts
@@ -19,14 +19,14 @@ dependencies {
implementation(libs.spring.boot.starter.web)
implementation(libs.spring.boot.starter.data.jpa)
implementation(libs.spring.cloud.starter.openfeign)
- implementation(libs.micrometer.brave)
+ implementation(libs.micrometer.brave)
implementation(libs.h2)
testImplementation(libs.spring.boot.starter.test)
testImplementation(libs.java.diff)
- testImplementation(libs.wiremock)
testImplementation(libs.rest.assured)
testImplementation(libs.assertj)
testImplementation(libs.awaitility)
+ testImplementation(libs.spring.cloud.starter.contract.stub.runner)
}
diff --git a/buildSrc/src/main/kotlin/auditor.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/auditor.java-conventions.gradle.kts
index 265c35f..0e59838 100644
--- a/buildSrc/src/main/kotlin/auditor.java-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/auditor.java-conventions.gradle.kts
@@ -1,3 +1,5 @@
+import com.github.spotbugs.snom.Confidence
+import com.github.spotbugs.snom.Effort
import com.github.spotbugs.snom.SpotBugsTask
import org.gradle.accessors.dm.LibrariesForLibs
@@ -12,7 +14,6 @@ plugins {
}
repositories {
- mavenLocal()
mavenCentral()
}
@@ -22,7 +23,7 @@ dependencies {
testCompileOnly(libs.lombok)
testAnnotationProcessor(libs.lombok)
- implementation(libs.sl4j.api)
+ implementation(libs.slf4j.api)
testImplementation(libs.junit.jupiter)
testImplementation(libs.mockito.junit.core)
@@ -61,6 +62,7 @@ checkstyle {
}
pmd {
+ threads = 4
ruleSets = listOf("rulesets/java/quickstart.xml")
toolVersion = "7.2.0"
}
@@ -74,23 +76,40 @@ tasks {
options.isFork = true
}
- test {
- maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).takeIf { it > 0 } ?: 1
- forkEvery = 100
+ withType().configureEach {
+ (options as StandardJavadocDocletOptions).addStringOption("Xdoclint:none", "-quiet")
+ }
+ test {
useJUnitPlatform()
finalizedBy(jacocoTestReport)
+
+ systemProperties(
+ "junit.jupiter.execution.parallel.enabled" to "true",
+ "junit.jupiter.execution.parallel.mode.default" to "same_thread",
+ "junit.jupiter.execution.parallel.mode.classes.default" to "concurrent",
+ )
}
jacocoTestReport {
- dependsOn(tasks.test)
+ dependsOn(test)
reports {
xml.required = true
html.required = true
}
}
+ jacocoTestCoverageVerification {
+ violationRules {
+ rule {
+ limit {
+ minimum = "0.80".toBigDecimal()
+ }
+ }
+ }
+ }
+
withType().configureEach {
reports {
html.required = true
@@ -98,6 +117,9 @@ tasks {
}
withType().configureEach {
+ effort = Effort.MAX
+ reportLevel = Confidence.HIGH
+
reports {
create("html") {
enabled = true
diff --git a/buildSrc/src/main/kotlin/auditor.library-conventions.gradle.kts b/buildSrc/src/main/kotlin/auditor.library-conventions.gradle.kts
index 8a243a1..96f5fdb 100644
--- a/buildSrc/src/main/kotlin/auditor.library-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/auditor.library-conventions.gradle.kts
@@ -78,7 +78,7 @@ publishing {
}
tasks {
- withType {
+ withType().configureEach {
options.compilerArgs.add("-implicit:class")
}
}
\ No newline at end of file
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/ErrorResponse.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/ErrorResponse.java
similarity index 79%
rename from demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/ErrorResponse.java
rename to demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/ErrorResponse.java
index 85089d3..230f0f0 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/ErrorResponse.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/ErrorResponse.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.model.dto;
+package io.github.tkaczenko.auditor.demo.cleanup.api.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Request.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Request.java
similarity index 79%
rename from demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Request.java
rename to demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Request.java
index 297dee1..774d9d9 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Request.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Request.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.model.dto;
+package io.github.tkaczenko.auditor.demo.cleanup.api.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Response.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Response.java
similarity index 80%
rename from demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Response.java
rename to demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Response.java
index f141580..cc83e30 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/dto/Response.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/cleanup/api/dto/Response.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.model.dto;
+package io.github.tkaczenko.auditor.demo.cleanup.api.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/FeignConfig.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/FeignConfig.java
index ddc2e38..5e62adc 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/FeignConfig.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/FeignConfig.java
@@ -1,7 +1,7 @@
package io.github.tkaczenko.auditor.demo.config;
import feign.Logger;
-import io.github.tkaczenko.auditor.outbound.feign.FeignAuditRequestLogger;
+import io.github.tkaczenko.auditor.outbound.feign.api.FeignAuditRequestLogger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/RestTemplateConfig.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/RestTemplateConfig.java
index 51e54e2..288a9f6 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/RestTemplateConfig.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/config/RestTemplateConfig.java
@@ -1,7 +1,7 @@
package io.github.tkaczenko.auditor.demo.config;
import io.github.tkaczenko.auditor.demo.config.PropertiesConfig.DemoClientProperties;
-import io.github.tkaczenko.auditor.outbound.resttemplate.aspect.RestTemplateAuditOutboundRequestInterceptorWithAspect;
+import io.github.tkaczenko.auditor.outbound.api.RestTemplateAuditOutboundRequestInterceptorWithAspect;
import java.time.Duration;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.web.client.RestTemplateBuilder;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/controller/DemoController.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/controller/DemoController.java
index b101d3b..39e4584 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/controller/DemoController.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/controller/DemoController.java
@@ -1,9 +1,9 @@
package io.github.tkaczenko.auditor.demo.controller;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.ErrorResponse;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Request;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Response;
import io.github.tkaczenko.auditor.demo.config.PropertiesConfig.FeignClientProperties;
-import io.github.tkaczenko.auditor.demo.model.dto.ErrorResponse;
-import io.github.tkaczenko.auditor.demo.model.dto.Request;
-import io.github.tkaczenko.auditor.demo.model.dto.Response;
import io.github.tkaczenko.auditor.demo.service.client.feign.OutboundFeignClient;
import io.github.tkaczenko.auditor.demo.service.client.feign.dto.FeignRequest;
import io.github.tkaczenko.auditor.demo.service.client.feign.dto.FeignResponse;
@@ -51,8 +51,7 @@ public ResponseEntity testOutboundRestTemplate(@RequestBody Request re
if (log.isInfoEnabled()) {
log.info("testOutboundRestTemplate Request: {}", request);
}
- RestTemplateResponse response =
- outboundRestTemplateClient.get();
+ RestTemplateResponse response = outboundRestTemplateClient.get();
MDC.clear();
return ResponseEntity.ok(
Response.builder()
@@ -74,9 +73,7 @@ public ResponseEntity testOutboundFeign(@RequestBody Request request)
.build());
MDC.clear();
return ResponseEntity.ok(
- Response.builder()
- .responseTransactionId(response.getFeignResponseTransactionId())
- .build());
+ Response.builder().responseTransactionId(response.getFeignResponseTransactionId()).build());
}
@ExceptionHandler(RuntimeException.class)
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/AuditRecord.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/entity/AuditRecord.java
similarity index 82%
rename from demo/src/main/java/io/github/tkaczenko/auditor/demo/model/AuditRecord.java
rename to demo/src/main/java/io/github/tkaczenko/auditor/demo/entity/AuditRecord.java
index 605211d..d3c34ba 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/model/AuditRecord.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/entity/AuditRecord.java
@@ -1,6 +1,6 @@
-package io.github.tkaczenko.auditor.demo.model;
+package io.github.tkaczenko.auditor.demo.entity;
-import io.github.tkaczenko.auditor.core.model.AuditRequestResponse;
+import io.github.tkaczenko.auditor.core.internal.entity.AuditRequestResponse;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/repository/AuditRecordRepository.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/repository/AuditRecordRepository.java
index 626bb93..e9dbda8 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/repository/AuditRecordRepository.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/repository/AuditRecordRepository.java
@@ -1,7 +1,7 @@
package io.github.tkaczenko.auditor.demo.repository;
-import io.github.tkaczenko.auditor.core.repository.AuditRequestResponseRepository;
-import io.github.tkaczenko.auditor.demo.model.AuditRecord;
+import io.github.tkaczenko.auditor.core.internal.repository.AuditRequestResponseRepository;
+import io.github.tkaczenko.auditor.demo.entity.AuditRecord;
import org.springframework.stereotype.Repository;
@Repository
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/feign/OutboundFeignClient.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/feign/OutboundFeignClient.java
index 42ce446..dedd4f1 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/feign/OutboundFeignClient.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/feign/OutboundFeignClient.java
@@ -3,7 +3,7 @@
import io.github.tkaczenko.auditor.demo.config.FeignConfig;
import io.github.tkaczenko.auditor.demo.service.client.feign.dto.FeignRequest;
import io.github.tkaczenko.auditor.demo.service.client.feign.dto.FeignResponse;
-import io.github.tkaczenko.auditor.outbound.AuditedOutboundCall;
+import io.github.tkaczenko.auditor.outbound.api.AuditedOutboundCall;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/resttemplate/OutboundRestTemplateClient.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/resttemplate/OutboundRestTemplateClient.java
index 2d4647b..37d696a 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/resttemplate/OutboundRestTemplateClient.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/client/resttemplate/OutboundRestTemplateClient.java
@@ -4,7 +4,7 @@
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.github.tkaczenko.auditor.demo.config.PropertiesConfig;
import io.github.tkaczenko.auditor.demo.service.client.resttemplate.dto.RestTemplateResponse;
-import io.github.tkaczenko.auditor.outbound.AuditedOutboundCall;
+import io.github.tkaczenko.auditor.outbound.api.AuditedOutboundCall;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
diff --git a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/filter/DemoControllerAuditRequestFilter.java b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/filter/DemoControllerAuditRequestFilter.java
index 6016778..e5e9b3c 100644
--- a/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/filter/DemoControllerAuditRequestFilter.java
+++ b/demo/src/main/java/io/github/tkaczenko/auditor/demo/service/filter/DemoControllerAuditRequestFilter.java
@@ -1,11 +1,11 @@
package io.github.tkaczenko.auditor.demo.service.filter;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
-import io.github.tkaczenko.auditor.inbound.AuditInboundRequestFilter;
-import io.github.tkaczenko.auditor.inbound.IpAddressSupplier;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
+import io.github.tkaczenko.auditor.inbound.api.AuditInboundRequestFilter;
+import io.github.tkaczenko.auditor.inbound.internal.service.IpAddressSupplier;
import org.springframework.stereotype.Component;
@Component
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/AbstractIntegrationTest.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/AbstractIntegrationTest.java
index bab0623..e6b7562 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/AbstractIntegrationTest.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/AbstractIntegrationTest.java
@@ -8,13 +8,9 @@
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability;
-import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.MediaType;
-import org.springframework.test.context.ActiveProfiles;
-@ActiveProfiles("test")
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureObservability
@Slf4j
@SuppressWarnings("checkstyle:VisibilityModifierCheck")
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestScenario.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestScenario.java
index f89fd3d..48ec689 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestScenario.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestScenario.java
@@ -4,7 +4,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.tomakehurst.wiremock.stubbing.Scenario;
-import io.github.tkaczenko.auditor.demo.model.dto.Request;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Request;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestVerifier.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestVerifier.java
index 6a593d3..17814e6 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestVerifier.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/IntegrationTestVerifier.java
@@ -2,7 +2,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-import io.github.tkaczenko.auditor.demo.model.AuditRecord;
+import io.github.tkaczenko.auditor.demo.entity.AuditRecord;
import io.github.tkaczenko.auditor.demo.repository.AuditRecordRepository;
import io.github.tkaczenko.auditor.demo.util.CompareResultService;
import java.util.Collections;
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/CleanupIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/api/CleanupIntegrationTests.java
similarity index 96%
rename from demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/CleanupIntegrationTests.java
rename to demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/api/CleanupIntegrationTests.java
index 4a5f9e8..faba471 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/CleanupIntegrationTests.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/cleanup/api/CleanupIntegrationTests.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.cleanup;
+package io.github.tkaczenko.auditor.demo.cleanup.api;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/MultiInboundIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/MultiInboundIntegrationTests.java
deleted file mode 100644
index 4f9ba27..0000000
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/MultiInboundIntegrationTests.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package io.github.tkaczenko.auditor.demo.inbound;
-
-import static io.github.tkaczenko.auditor.demo.util.FileUtils.readSystemResource;
-import static io.github.tkaczenko.auditor.demo.util.Files.Inbound.Multi;
-
-import io.github.tkaczenko.auditor.demo.AbstractIntegrationTest;
-import io.github.tkaczenko.auditor.demo.IntegrationTestScenario;
-import io.github.tkaczenko.auditor.demo.model.dto.ErrorResponse;
-import io.github.tkaczenko.auditor.demo.model.dto.Response;
-import io.restassured.response.ValidatableResponse;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import lombok.SneakyThrows;
-import org.hamcrest.CoreMatchers;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.http.HttpStatus;
-import org.springframework.test.context.jdbc.Sql;
-
-@DisplayName("MultiInboundIntegrationTests " + MultiInboundIntegrationTests.TEST_URL + " ")
-public class MultiInboundIntegrationTests extends AbstractIntegrationTest {
-
- public static final String TEST_URL = "/test/inbound";
-
- @Override
- protected void stubScenario(
- String scenario, String from, String to, IntegrationTestScenario.Provider provider) {
- // no outbound calls
- }
-
- @Override
- protected void verifyApiResponseBody(
- final IntegrationTestScenario.Api api, final ValidatableResponse validatableResponse) {
- if (api.getResponseBodyObject() instanceof Response expected) {
- validatableResponse.body(
- "responseTransactionId", CoreMatchers.equalTo(expected.getResponseTransactionId()));
- } else if (api.getResponseBodyObject() instanceof ErrorResponse expected) {
- validateOptionalFieldInBody(expected.getError(), "error", validatableResponse);
- }
- }
-
- @Test
- @SneakyThrows
- @Sql("/MultiInboundIntegrationTests/success.sql")
- @DisplayName("when inbound request comes -> should save AuditRecord and return 200")
- void whenInboundRequestComesShouldSaveAuditRecordAndReturn200() {
- try (ExecutorService executor = Executors.newSingleThreadExecutor()) {
- CompletableFuture.runAsync(this::executeFirst, executor)
- .thenRunAsync(this::executeSecond, executor)
- .join();
- }
- }
-
- @SneakyThrows
- private void executeFirst() {
- runAndVerify(
- IntegrationTestScenario.builder()
- .api(
- IntegrationTestScenario.Api.builder()
- .url(TEST_URL)
- .status(HttpStatus.OK)
- .requestBody(readSystemResource(Multi.INBOUND_MULTI_1_SUCCESS_REQUEST))
- .responseBody(
- Response.class,
- readSystemResource(Multi.INBOUND_MULTI_1_SUCCESS_RESPONSE))
- .build())
- .expectedTransactionId("transactionId6")
- .build());
- }
-
- @SneakyThrows
- private void executeSecond() {
- runAndVerify(
- IntegrationTestScenario.builder()
- .api(
- IntegrationTestScenario.Api.builder()
- .url(TEST_URL)
- .status(HttpStatus.OK)
- .requestBody(readSystemResource(Multi.INBOUND_MULTI_2_SUCCESS_REQUEST))
- .responseBody(
- Response.class,
- readSystemResource(Multi.INBOUND_MULTI_2_SUCCESS_RESPONSE))
- .build())
- .expectedTransactionId("transactionId8")
- .build());
- }
-}
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/InboundIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/InboundIntegrationTests.java
similarity index 84%
rename from demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/InboundIntegrationTests.java
rename to demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/InboundIntegrationTests.java
index 246775e..12d0397 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/InboundIntegrationTests.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/InboundIntegrationTests.java
@@ -1,22 +1,26 @@
-package io.github.tkaczenko.auditor.demo.inbound;
+package io.github.tkaczenko.auditor.demo.inbound.api;
import static io.github.tkaczenko.auditor.demo.util.FileUtils.readSystemResource;
import static io.github.tkaczenko.auditor.demo.util.Files.Inbound;
import io.github.tkaczenko.auditor.demo.AbstractIntegrationTest;
import io.github.tkaczenko.auditor.demo.IntegrationTestScenario;
-import io.github.tkaczenko.auditor.demo.model.dto.ErrorResponse;
-import io.github.tkaczenko.auditor.demo.model.dto.Response;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.ErrorResponse;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Response;
import io.restassured.response.ValidatableResponse;
import lombok.SneakyThrows;
import org.hamcrest.CoreMatchers;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
+import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.transaction.annotation.Transactional;
@Transactional
+@ActiveProfiles("test")
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DisplayName("InboundIntegrationTests " + InboundIntegrationTests.TEST_URL + " ")
public class InboundIntegrationTests extends AbstractIntegrationTest {
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/MultiInboundIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/MultiInboundIntegrationTests.java
new file mode 100644
index 0000000..a2ce644
--- /dev/null
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/inbound/api/MultiInboundIntegrationTests.java
@@ -0,0 +1,115 @@
+package io.github.tkaczenko.auditor.demo.inbound.api;
+
+import static io.github.tkaczenko.auditor.demo.util.FileUtils.readSystemResource;
+import static io.github.tkaczenko.auditor.demo.util.Files.Inbound.Multi;
+
+import io.github.tkaczenko.auditor.demo.AbstractIntegrationTest;
+import io.github.tkaczenko.auditor.demo.IntegrationTestScenario;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.ErrorResponse;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Response;
+import io.restassured.response.ValidatableResponse;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+import lombok.SneakyThrows;
+import org.hamcrest.CoreMatchers;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpStatus;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.transaction.annotation.Transactional;
+
+@ActiveProfiles("test")
+@SpringBootTest(
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = "server.tomcat.threads.max=1")
+@DisplayName("MultiInboundIntegrationTests " + MultiInboundIntegrationTests.TEST_URL + " ")
+public class MultiInboundIntegrationTests extends AbstractIntegrationTest {
+
+ public static final String TEST_URL = "/test/inbound";
+
+ @Autowired private MultiInboundService multiInboundService;
+
+ @Override
+ protected void stubScenario(
+ String scenario, String from, String to, IntegrationTestScenario.Provider provider) {
+ // no outbound calls
+ }
+
+ @Override
+ protected void verifyApiResponseBody(
+ final IntegrationTestScenario.Api api, final ValidatableResponse validatableResponse) {
+ if (api.getResponseBodyObject() instanceof Response expected) {
+ validatableResponse.body(
+ "responseTransactionId", CoreMatchers.equalTo(expected.getResponseTransactionId()));
+ } else if (api.getResponseBodyObject() instanceof ErrorResponse expected) {
+ validateOptionalFieldInBody(expected.getError(), "error", validatableResponse);
+ }
+ }
+
+ @Test
+ @SneakyThrows
+ @Sql("/MultiInboundIntegrationTests/success.sql")
+ @DisplayName("when inbound request comes -> should save AuditRecord and return 200")
+ void whenInboundRequestComesShouldSaveAuditRecordAndReturn200() {
+ try (ExecutorService executor = Executors.newSingleThreadExecutor()) {
+ CompletableFuture.runAsync(
+ () -> this.multiInboundService.executeFirst(this::runAndVerify), executor)
+ .thenRunAsync(() -> this.multiInboundService.executeSecond(this::runAndVerify), executor)
+ .join();
+ }
+ }
+
+ @TestConfiguration
+ static class TestConfig {
+ @Bean
+ public MultiInboundService multiInboundService() {
+ return new MultiInboundService();
+ }
+ }
+
+ static class MultiInboundService {
+
+ @Transactional
+ @SneakyThrows
+ public void executeFirst(Consumer runAndVerify) {
+ runAndVerify.accept(
+ IntegrationTestScenario.builder()
+ .api(
+ IntegrationTestScenario.Api.builder()
+ .url(TEST_URL)
+ .status(HttpStatus.OK)
+ .requestBody(readSystemResource(Multi.INBOUND_MULTI_1_SUCCESS_REQUEST))
+ .responseBody(
+ Response.class,
+ readSystemResource(Multi.INBOUND_MULTI_1_SUCCESS_RESPONSE))
+ .build())
+ .expectedTransactionId("transactionId6")
+ .build());
+ }
+
+ @Transactional
+ @SneakyThrows
+ public void executeSecond(Consumer runAndVerify) {
+ runAndVerify.accept(
+ IntegrationTestScenario.builder()
+ .api(
+ IntegrationTestScenario.Api.builder()
+ .url(TEST_URL)
+ .status(HttpStatus.OK)
+ .requestBody(readSystemResource(Multi.INBOUND_MULTI_2_SUCCESS_REQUEST))
+ .responseBody(
+ Response.class,
+ readSystemResource(Multi.INBOUND_MULTI_2_SUCCESS_RESPONSE))
+ .build())
+ .expectedTransactionId("transactionId8")
+ .build());
+ }
+ }
+}
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/resttemplate/OutboundRestTemplateIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/OutboundRestTemplateIntegrationTests.java
similarity index 85%
rename from demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/resttemplate/OutboundRestTemplateIntegrationTests.java
rename to demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/OutboundRestTemplateIntegrationTests.java
index 6227708..7904961 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/resttemplate/OutboundRestTemplateIntegrationTests.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/OutboundRestTemplateIntegrationTests.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.outbound.resttemplate;
+package io.github.tkaczenko.auditor.demo.outbound.api;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.absent;
@@ -9,32 +9,38 @@
import static io.github.tkaczenko.auditor.demo.util.Files.Inbound;
import static io.github.tkaczenko.auditor.demo.util.Files.Outbound.RestTemplate;
-import com.github.tomakehurst.wiremock.junit5.WireMockTest;
import io.github.tkaczenko.auditor.demo.AbstractIntegrationTest;
import io.github.tkaczenko.auditor.demo.IntegrationTestScenario;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.ErrorResponse;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Response;
import io.github.tkaczenko.auditor.demo.config.PropertiesConfig.DemoClientProperties;
-import io.github.tkaczenko.auditor.demo.model.dto.ErrorResponse;
-import io.github.tkaczenko.auditor.demo.model.dto.Response;
import io.restassured.response.ValidatableResponse;
import lombok.SneakyThrows;
import org.hamcrest.CoreMatchers;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.transaction.annotation.Transactional;
@Transactional
-@WireMockTest(httpPort = OutboundRestTemplateIntegrationTests.WIREMOCK_PORT)
+@ActiveProfiles("test")
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@AutoConfigureWireMock(port = 0)
+@TestPropertySource(
+ properties = "demo-client.url=http://localhost:${wiremock.server.port}/demo-client")
@DisplayName(
"OutboundRestTemplateIntegrationTests " + OutboundRestTemplateIntegrationTests.TEST_URL + " ")
public class OutboundRestTemplateIntegrationTests extends AbstractIntegrationTest {
public static final String TEST_URL = "/test/outbound/restTemplate";
- public static final int WIREMOCK_PORT = 9561;
@Autowired private DemoClientProperties demoClientProperties;
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java
similarity index 85%
rename from demo/src/test/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java
rename to demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java
index 26b092d..295ef94 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/outbound/resttemplate/aspect/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/api/RestTemplateAuditOutboundRequestInterceptorWithAspectTest.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.outbound.resttemplate.aspect;
+package io.github.tkaczenko.auditor.demo.outbound.api;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
@@ -10,10 +10,11 @@
import static org.mockito.Mockito.when;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import io.github.tkaczenko.auditor.core.service.AuditDateTimeProvider;
-import io.github.tkaczenko.auditor.core.service.AuditFacade;
-import io.github.tkaczenko.auditor.core.service.reader.BodyHttpReaderService;
-import io.github.tkaczenko.auditor.core.service.reader.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.AuditFacade;
+import io.github.tkaczenko.auditor.core.internal.factory.body.BodyHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.factory.headers.HeadersHttpReaderService;
+import io.github.tkaczenko.auditor.core.internal.service.AuditDateTimeProvider;
+import io.github.tkaczenko.auditor.outbound.api.RestTemplateAuditOutboundRequestInterceptorWithAspect;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Optional;
diff --git a/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/OutboundFeignIntegrationTests.java b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/api/OutboundFeignIntegrationTests.java
similarity index 85%
rename from demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/OutboundFeignIntegrationTests.java
rename to demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/api/OutboundFeignIntegrationTests.java
index 7b850b6..94ef213 100644
--- a/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/OutboundFeignIntegrationTests.java
+++ b/demo/src/test/java/io/github/tkaczenko/auditor/demo/outbound/feign/api/OutboundFeignIntegrationTests.java
@@ -1,4 +1,4 @@
-package io.github.tkaczenko.auditor.demo.outbound.feign;
+package io.github.tkaczenko.auditor.demo.outbound.feign.api;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
@@ -8,12 +8,11 @@
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
import static io.github.tkaczenko.auditor.demo.util.FileUtils.readSystemResource;
-import com.github.tomakehurst.wiremock.junit5.WireMockTest;
import io.github.tkaczenko.auditor.demo.AbstractIntegrationTest;
import io.github.tkaczenko.auditor.demo.IntegrationTestScenario;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.ErrorResponse;
+import io.github.tkaczenko.auditor.demo.cleanup.api.dto.Response;
import io.github.tkaczenko.auditor.demo.config.PropertiesConfig.FeignClientProperties;
-import io.github.tkaczenko.auditor.demo.model.dto.ErrorResponse;
-import io.github.tkaczenko.auditor.demo.model.dto.Response;
import io.github.tkaczenko.auditor.demo.util.Files.Inbound;
import io.github.tkaczenko.auditor.demo.util.Files.Outbound;
import io.restassured.response.ValidatableResponse;
@@ -22,19 +21,25 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.transaction.annotation.Transactional;
@Transactional
-@WireMockTest(httpPort = OutboundFeignIntegrationTests.WIREMOCK_PORT)
+@ActiveProfiles("test")
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@AutoConfigureWireMock(port = 0)
+@TestPropertySource(properties = "feign.url=http://localhost:${wiremock.server.port}/feign")
@DisplayName("OutboundFeignIntegrationTests " + OutboundFeignIntegrationTests.TEST_URL + " ")
public class OutboundFeignIntegrationTests extends AbstractIntegrationTest {
public static final String TEST_URL = "/test/outbound/feign";
- public static final int WIREMOCK_PORT = 9562;
@Autowired private FeignClientProperties feignClientProperties;
diff --git a/demo/src/test/java/org/springframework/test/context/transaction/InheritedTransactionRemover.java b/demo/src/test/java/org/springframework/test/context/transaction/InheritedTransactionRemover.java
new file mode 100644
index 0000000..749e94e
--- /dev/null
+++ b/demo/src/test/java/org/springframework/test/context/transaction/InheritedTransactionRemover.java
@@ -0,0 +1,19 @@
+package org.springframework.test.context.transaction;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.TestExecutionListener;
+
+// Workaround from https://github.com/spring-projects/spring-framework/issues/33383
+@Order(3000) // TransactionalTestExecutionListener is order 4000
+public class InheritedTransactionRemover implements TestExecutionListener {
+ private final ThreadLocal transactionRemoved = ThreadLocal.withInitial(() -> false);
+
+ @Override
+ public void beforeTestMethod(TestContext testContext) {
+ if (!transactionRemoved.get()) {
+ TransactionContextHolder.removeCurrentTransactionContext();
+ transactionRemoved.set(true);
+ }
+ }
+}
\ No newline at end of file
diff --git a/demo/src/test/resources/OutboundFeignIntegrationTests/success.sql b/demo/src/test/resources/OutboundFeignIntegrationTests/success.sql
index 96937a0..2c85eef 100644
--- a/demo/src/test/resources/OutboundFeignIntegrationTests/success.sql
+++ b/demo/src/test/resources/OutboundFeignIntegrationTests/success.sql
@@ -15,7 +15,7 @@ values ('2024-06-13 17:00', null, 200, 'transactionId4', 'trace_id',
'{"Content-Type":["application/json"],"Content-Length":["46"]}',
'POST',
'{"feignResponseTransactionId":"feignResponseTransaction1"}',
- '{"matched-stub-id":["0602d6b3-589e-4658-ae93-b9ed723a0562"],"content-type":["application/json"],"transfer-encoding":["chunked"]}',
+ '{"matched-stub-id":["0602d6b3-589e-4658-ae93-b9ed723a0562"],"content-type":["application/json"],"transfer-encoding":["chunked"],"vary":["Accept-Encoding, User-Agent"]}',
333,
null,
'/feign', default);
diff --git a/demo/src/test/resources/OutboundRestTemplateIntegrationTests/success.sql b/demo/src/test/resources/OutboundRestTemplateIntegrationTests/success.sql
index bb69914..7be1089 100644
--- a/demo/src/test/resources/OutboundRestTemplateIntegrationTests/success.sql
+++ b/demo/src/test/resources/OutboundRestTemplateIntegrationTests/success.sql
@@ -15,7 +15,7 @@ values ('2024-06-13 17:00', null, 200, 'transactionId2', 'trace_id',
'{"Authorization":["Basic Y2xpZW50SWQ6Y2xpZW50U2VjcmV0"],"Accept":["application/json, application/*+json"],"Content-Length":["0"]}',
'GET',
'{"restTemplateResponseTransactionId":"restTemplateResponseTransaction1"}',
- '{"Content-Type":["application/json"],"Matched-Stub-Id":["847eb090-6df5-409b-904a-d494504d3af7"],"Transfer-Encoding":["chunked"]}',
+ '{"Content-Type":["application/json"],"Matched-Stub-Id":["847eb090-6df5-409b-904a-d494504d3af7"],"Transfer-Encoding":["chunked"],"Vary":["Accept-Encoding, User-Agent"]}',
333,
null,
'/demo-client', default);
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f8b6bef..34ea7ac 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -15,7 +15,7 @@ shedlock-spring = "4.29.0"
assertj = "3.26.0"
awaitility = "4.2.1"
micrometer-brave = "1.2.5"
-sl4j-api = "2.0.13"
+slf4j-api = "2.0.13"
jreleaser_plugin = "1.14.0"
[libraries]
@@ -34,17 +34,17 @@ spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-start
spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" }
spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa" }
spring-cloud-starter-openfeign = { module = "org.springframework.cloud:spring-cloud-starter-openfeign" }
+spring-cloud-starter-contract-stub-runner = { module = "org.springframework.cloud:spring-cloud-starter-contract-stub-runner" }
spotbugs-gradle-plugin = { module = "com.github.spotbugs.snom:spotbugs-gradle-plugin", version.ref = "spotbugs_plugin" }
java-diff = { module = "de.danielbechler:java-object-diff", version.ref = "java-diff" }
h2 = { module = "com.h2database:h2", version.ref = "h2" }
-wiremock = { module = "org.wiremock:wiremock", version.ref = "wiremock" }
rest-assured = { module = "io.rest-assured:rest-assured", version.ref = "rest-assured" }
shedlock-spring = { module = "net.javacrumbs.shedlock:shedlock-spring", version.ref = "shedlock-spring" }
shedlock-provider-jdbc = { module = "net.javacrumbs.shedlock:shedlock-provider-jdbc-template", version.ref = "shedlock-spring" }
assertj = { module = "org.assertj:assertj-core", version.ref = "assertj" }
awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" }
micrometer-brave = { module = "io.micrometer:micrometer-tracing-bridge-brave", version.ref = "micrometer-brave" }
-sl4j-api = { module = "org.slf4j:slf4j-api", version.ref = "sl4j-api" }
+slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j-api" }
[plugins]
jreleaser = { id = "org.jreleaser", version.ref = "jreleaser_plugin" }