diff --git a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java index adb74079..a3bf438c 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentService.java @@ -5,6 +5,7 @@ import de.caritas.cob.agencyservice.api.repository.agency.Agency; import de.caritas.cob.agencyservice.api.repository.agencytopic.AgencyTopic; import de.caritas.cob.agencyservice.api.service.TopicService; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; import java.util.List; import java.util.Map; import java.util.stream.Collectors; diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java new file mode 100644 index 00000000..194f75f9 --- /dev/null +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicCachingService.java @@ -0,0 +1,37 @@ +package de.caritas.cob.agencyservice.api.service; + +import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; +import de.caritas.cob.agencyservice.config.CacheManagerConfig; +import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; +import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; +import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import java.util.List; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TopicCachingService { + + private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; + private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; + private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + + @Cacheable(cacheNames = CacheManagerConfig.TOPICS_CACHE) + public List getAllTopics(Long tenantId) { + // tenantId parameter is just used for caching per tenant, it is not required for the actual implementation, because it will be added by the tenantHeaderSupplier + TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); + addDefaultHeaders(controllerApi.getApiClient()); + return controllerApi.getAllTopics(); + } + + private void addDefaultHeaders(ApiClient apiClient) { + var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); + tenantHeaderSupplier.addTenantHeader(headers); + headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + } + +} diff --git a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java index a40e3c10..70f7d0e3 100644 --- a/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java +++ b/src/main/java/de/caritas/cob/agencyservice/api/service/TopicService.java @@ -1,35 +1,22 @@ package de.caritas.cob.agencyservice.api.service; -import de.caritas.cob.agencyservice.api.service.securityheader.SecurityHeaderSupplier; -import de.caritas.cob.agencyservice.config.CacheManagerConfig; -import de.caritas.cob.agencyservice.config.apiclient.TopicServiceApiControllerFactory; -import de.caritas.cob.agencyservice.topicservice.generated.web.TopicControllerApi; +import de.caritas.cob.agencyservice.api.tenant.TenantContext; + import java.util.List; import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; -import de.caritas.cob.agencyservice.topicservice.generated.ApiClient; @Service @RequiredArgsConstructor public class TopicService { - private final @NonNull TopicServiceApiControllerFactory topicServiceApiControllerFactory; - private final @NonNull SecurityHeaderSupplier securityHeaderSupplier; - private final @NonNull TenantHeaderSupplier tenantHeaderSupplier; + private final @NonNull TopicCachingService topicCachingService; - public List getAllTopics() { - TopicControllerApi controllerApi = topicServiceApiControllerFactory.createControllerApi(); - addDefaultHeaders(controllerApi.getApiClient()); - return controllerApi.getAllTopics(); - } - private void addDefaultHeaders(ApiClient apiClient) { - var headers = this.securityHeaderSupplier.getKeycloakAndCsrfHttpHeaders(); - tenantHeaderSupplier.addTenantHeader(headers); - headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next())); + public List getAllTopics() { + return topicCachingService.getAllTopics(TenantContext.getCurrentTenant()); } } diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java index cfa90768..0b314c6e 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/AgencyAdminServiceTenantAwareIT.java @@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; import org.springframework.boot.test.context.SpringBootTest; diff --git a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java index 0118c575..3a84b672 100644 --- a/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java +++ b/src/test/java/de/caritas/cob/agencyservice/api/admin/service/agency/AgencyTopicEnrichmentServiceTest.java @@ -13,6 +13,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.caritas.cob.agencyservice.topicservice.generated.web.model.TopicDTO; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) diff --git a/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java new file mode 100644 index 00000000..bda4e84b --- /dev/null +++ b/src/test/java/de/caritas/cob/agencyservice/api/service/TopicServiceTest.java @@ -0,0 +1,31 @@ +package de.caritas.cob.agencyservice.api.service; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.verify; + +import de.caritas.cob.agencyservice.api.tenant.TenantContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class TopicServiceTest { + + @Mock + private TopicCachingService topicCachingService; + + @Test + void getTopics_Should_CallTopicCachingService() { + // given + TopicService topicService = new TopicService(topicCachingService); + + // when + topicService.getAllTopics(); + + // then + verify(topicCachingService).getAllTopics(TenantContext.getCurrentTenant()); + } + + +} \ No newline at end of file