diff --git a/anyame-kodik-search-api/pom.xml b/anyame-kodik-search-api/pom.xml
index c680ea0..5058b31 100644
--- a/anyame-kodik-search-api/pom.xml
+++ b/anyame-kodik-search-api/pom.xml
@@ -28,113 +28,8 @@
-
- UTF-8
- 1.8
- ${java.version}
- ${java.version}
- 1.6.3
- 2.17.1
- 2.17.1
- 4.0.0
- 2.11.0
- 2.1.1
- 3.0.2
- 1.0.1
- 5.10.3
- 1.3.2
- 3.1.1
- 3.0.2
-
-
-
- io.swagger
- swagger-annotations
- ${swagger-annotations-version}
-
-
-
- com.google.code.findbugs
- jsr305
- ${jsr305.version}
-
-
- com.squareup.retrofit2
- retrofit
- ${retrofit-version}
-
-
- com.squareup.retrofit2
- converter-scalars
- ${retrofit-version}
-
-
- org.apache.oltu.oauth2
- org.apache.oltu.oauth2.client
- ${oltu-version}
-
-
- org.apache.oltu.oauth2
- common
-
-
-
-
-
- com.squareup.retrofit2
- converter-jackson
- ${retrofit-version}
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson-version}
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${jackson-version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson-databind-version}
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- ${jackson-version}
-
-
- jakarta.ws.rs
- jakarta.ws.rs-api
- ${jakarta.ws.rs-api-version}
-
-
- jakarta.annotation
- jakarta.annotation-api
- ${jakarta-annotation-version}
- provided
-
-
- javax.annotation
- javax.annotation-api
- ${javax-annotation-api.version}
-
-
-
- jakarta.validation
- jakarta.validation-api
- ${jakarta-validation-api.version}
-
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit-version}
- test
-
-
+
+
@@ -151,12 +46,11 @@
${project.basedir}/src/main/resources/openapi.json
java
- retrofit2
+ restclient
com.backend.search.kodik.api
com.backend.search.kodik.model
false
true
- jackson
diff --git a/main-app/pom.xml b/main-app/pom.xml
index 05f77b1..e332aa5 100644
--- a/main-app/pom.xml
+++ b/main-app/pom.xml
@@ -9,6 +9,7 @@
3.5.5
+
com.backend.vue.bff.service
anyame-vue-bff
0.0.1-SNAPSHOT
@@ -37,22 +38,6 @@
8.1
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.springframework.boot
- spring-boot-starter-web
-
org.springframework.cloud
spring-cloud-starter-circuitbreaker-resilience4j
@@ -61,7 +46,6 @@
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
-
com.squareup.retrofit2
converter-jackson
@@ -87,7 +71,6 @@
logstash-logback-encoder
${logstash-logback-encoder.version}
-
org.springframework.boot
spring-boot-starter-test
diff --git a/main-app/src/main/java/com/backend/vue/bff/service/config/GlobalExceptionHandler.java b/main-app/src/main/java/com/backend/vue/bff/service/config/GlobalExceptionHandler.java
index bd1abdf..7e7d195 100644
--- a/main-app/src/main/java/com/backend/vue/bff/service/config/GlobalExceptionHandler.java
+++ b/main-app/src/main/java/com/backend/vue/bff/service/config/GlobalExceptionHandler.java
@@ -33,6 +33,7 @@ public class GlobalExceptionHandler {
"API_CALL_FAILED",
"Failed to communicate with external service: " + e.getMessage(),
HttpStatus.INTERNAL_SERVER_ERROR.value());
+ logger.error("API call failed", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
diff --git a/main-app/src/main/java/com/backend/vue/bff/service/config/SearchApiClientConfiguration.java b/main-app/src/main/java/com/backend/vue/bff/service/config/SearchApiClientConfiguration.java
index dd075a6..bf4c19b 100644
--- a/main-app/src/main/java/com/backend/vue/bff/service/config/SearchApiClientConfiguration.java
+++ b/main-app/src/main/java/com/backend/vue/bff/service/config/SearchApiClientConfiguration.java
@@ -1,66 +1,34 @@
package com.backend.vue.bff.service.config;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
+import org.springframework.web.client.RestClient;
import com.backend.search.kodik.ApiClient;
-import com.backend.search.kodik.JSON;
import com.backend.search.kodik.api.SearchControllerApi;
-import com.backend.vue.bff.service.factory.AbstractApiFactory;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import retrofit2.Retrofit.Builder;
@Configuration
@EnableDiscoveryClient
public class SearchApiClientConfiguration {
- private final DiscoveryClient discoveryClient;
-
- public SearchApiClientConfiguration(DiscoveryClient discoveryClient) {
- this.discoveryClient = discoveryClient;
+ @LoadBalanced
+ @Bean
+ public RestClient.Builder restClientBuilder() {
+ return RestClient.builder();
}
@Bean
- @Lazy
- public FactoryBean apiClientFactory() {
- return new ApiClientFactoryBean(discoveryClient);
+ public ApiClient apiClient() {
+ return new ApiClient(restClientBuilder().build());
}
@Bean
@Lazy
public SearchControllerApi searchApi(ApiClient apiClient) {
- return apiClient.createService(SearchControllerApi.class);
- }
-
- private static class ApiClientFactoryBean extends AbstractApiFactory {
- public ApiClientFactoryBean(DiscoveryClient discoveryClient) {
- super(discoveryClient, "ANYAME-KODIK-SEARCH-BACKEND");
- }
-
- @Override
- public Class> getObjectType() {
- return ApiClient.class;
- }
-
- @Override
- public ObjectMapper createObjectMapper() {
- JSON json = new JSON();
- return json.getMapper();
- }
-
- @Override
- public ApiClient createApiClient() {
- return new ApiClient();
- }
-
- @Override
- protected void updateAdapterBuilder(ApiClient instance, Builder adapterBuilder) {
- instance.setAdapterBuilder(adapterBuilder);
- }
+ apiClient = apiClient.setBasePath("http://ANYAME-KODIK-SEARCH-BACKEND");
+ return new SearchControllerApi(apiClient);
}
}
diff --git a/main-app/src/main/java/com/backend/vue/bff/service/controller/TestController.java b/main-app/src/main/java/com/backend/vue/bff/service/controller/TestController.java
index 5fbb3ee..1dc929e 100644
--- a/main-app/src/main/java/com/backend/vue/bff/service/controller/TestController.java
+++ b/main-app/src/main/java/com/backend/vue/bff/service/controller/TestController.java
@@ -4,8 +4,8 @@ import java.io.IOException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.RestController;
import com.backend.vue.bff.service.service.KodikService;
@RestController
diff --git a/main-app/src/main/java/com/backend/vue/bff/service/factory/AbstractApiFactory.java b/main-app/src/main/java/com/backend/vue/bff/service/factory/AbstractApiFactory.java
deleted file mode 100644
index 1b6d817..0000000
--- a/main-app/src/main/java/com/backend/vue/bff/service/factory/AbstractApiFactory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.backend.vue.bff.service.factory;
-
-import java.util.List;
-
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
-
-import com.backend.vue.bff.service.exception.ServiceUnavailableException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import retrofit2.Retrofit;
-import retrofit2.converter.jackson.JacksonConverterFactory;
-import retrofit2.converter.scalars.ScalarsConverterFactory;
-
-public abstract class AbstractApiFactory implements FactoryBean {
- private final DiscoveryClient discoveryClient;
- private final String serviceId;
-
- public AbstractApiFactory(DiscoveryClient discoveryClient, String serviceId) {
- this.discoveryClient = discoveryClient;
- this.serviceId = serviceId;
- }
-
- @Override
- public T getObject() throws Exception {
- T client = createApiClient();
-
- String baseUrl = resolveServiceUrl(serviceId);
-
- Retrofit.Builder adapterBuilder = new Retrofit.Builder()
- .baseUrl(baseUrl)
- .addConverterFactory(ScalarsConverterFactory.create())
- .addConverterFactory(JacksonConverterFactory.create(createObjectMapper()));
-
- updateAdapterBuilder(client, adapterBuilder);
-
- return client;
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
- private String resolveServiceUrl(String serviceName) {
- List instances = discoveryClient.getInstances(serviceName);
-
- if (instances.isEmpty()) {
- throw new ServiceUnavailableException();
- }
-
- ServiceInstance instance = instances.get(0);
- String baseUrl = instance.getUri().toString();
-
- if (!baseUrl.endsWith("/")) {
- baseUrl = baseUrl + "/";
- }
-
- return baseUrl;
- }
-
- public abstract ObjectMapper createObjectMapper();
-
- public abstract T createApiClient();
-
- protected abstract void updateAdapterBuilder(T instance, Retrofit.Builder adapterBuilder);
-}
diff --git a/main-app/src/main/java/com/backend/vue/bff/service/service/KodikService.java b/main-app/src/main/java/com/backend/vue/bff/service/service/KodikService.java
index 9337983..81d5a73 100644
--- a/main-app/src/main/java/com/backend/vue/bff/service/service/KodikService.java
+++ b/main-app/src/main/java/com/backend/vue/bff/service/service/KodikService.java
@@ -20,6 +20,6 @@ public class KodikService {
@Cacheable("kodikSearch")
public KodikResponse search(String title) throws BeansException, IOException {
- return controllerApiFactory.getObject().search(title).execute().body();
+ return controllerApiFactory.getObject().search(title);
}
}
diff --git a/pom.xml b/pom.xml
index 409e230..bdd3139 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,6 +4,13 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.5.5
+
+
+
com.backend.vue.bff.service
anyame-bff-parent
0.0.1-SNAPSHOT
@@ -27,6 +34,26 @@
21
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
anyame-kodik-search-api
main-app