TedeeClientConfiguration.java
package org.sanmibuh.tedee.lock.infrastructure.secondary;
import com.tedee.bridge.client.ApiClient;
import com.tedee.bridge.client.api.CallbackApi;
import com.tedee.bridge.client.api.LockApi;
import java.time.Clock;
import org.sanmibuh.tedee.lock.infrastructure.TedeeProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportRuntimeHints;
import org.springframework.resilience.annotation.EnableResilientMethods;
import org.springframework.web.client.RestClient;
@Configuration
@EnableResilientMethods
@ImportRuntimeHints(TedeeReflectionHints.class)
public class TedeeClientConfiguration {
@Bean
ApiClient tedeeApiClient(
final RestClient.Builder builder, final TedeeProperties properties, final Clock clock) {
final var interceptor =
new TedeeApiTokenInterceptor(new TedeeApiTokenGenerator(properties.apiKey()), clock);
final var apiClient = new ApiClient(builder.requestInterceptor(interceptor).build());
apiClient.setBasePath(properties.baseUrl());
return apiClient;
}
@Bean
CallbackApi callbackApi(final ApiClient apiClient) {
return new CallbackApi(apiClient);
}
@Bean
LockApi lockApi(final ApiClient apiClient) {
return new LockApi(apiClient);
}
}