This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package ru.soune.nocopy.service.dadata;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import okhttp3.*;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.soune.nocopy.dto.dadata.DaDataResponse;
|
||||
import ru.soune.nocopy.dto.dadata.DaDataSuggestion;
|
||||
import ru.soune.nocopy.dto.dadata.DaDataWrapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class DaDataService {
|
||||
|
||||
@Value("${dadata.api-key}")
|
||||
private String apiKey ;
|
||||
|
||||
@Value("${dadata.url}")
|
||||
private String url ;
|
||||
|
||||
private final OkHttpClient httpClient;
|
||||
|
||||
public DaDataService() {
|
||||
this.httpClient = new OkHttpClient.Builder()
|
||||
.connectTimeout(5, TimeUnit.SECONDS)
|
||||
.writeTimeout(5, TimeUnit.SECONDS)
|
||||
.readTimeout(15, TimeUnit.SECONDS)
|
||||
.callTimeout(20, TimeUnit.SECONDS)
|
||||
.retryOnConnectionFailure(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
public DaDataResponse callDaData(String inn) throws IOException {
|
||||
if (apiKey == null || apiKey.isBlank()) {
|
||||
throw new IllegalStateException("SearchAPI key not configured");
|
||||
}
|
||||
|
||||
String jsonBody = String.format("{\"query\": \"%s\"}", inn);
|
||||
|
||||
Request request = new Request.Builder()
|
||||
.url("https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party")
|
||||
.post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonBody))
|
||||
.header("Accept", "application/json")
|
||||
.header("Authorization", "Token " + apiKey)
|
||||
.build();
|
||||
|
||||
try (Response response = httpClient.newCall(request).execute()) {
|
||||
ResponseBody body = response.body();
|
||||
if (body == null) {
|
||||
throw new IOException("Empty response body");
|
||||
}
|
||||
|
||||
String jsonResponse = body.string();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
DaDataWrapper wrapper = mapper.readValue(jsonResponse, DaDataWrapper.class);
|
||||
|
||||
DaDataResponse daDataResponse = new DaDataResponse();
|
||||
|
||||
if (wrapper.getSuggestions() != null && !wrapper.getSuggestions().isEmpty()) {
|
||||
DaDataSuggestion suggestion = wrapper.getSuggestions().get(0);
|
||||
|
||||
daDataResponse.setCompanyName(suggestion.getValue());
|
||||
|
||||
if (suggestion.getData() != null) {
|
||||
daDataResponse.setInn(suggestion.getData().getInn());
|
||||
|
||||
if (suggestion.getData().getAddress() != null) {
|
||||
daDataResponse.setAddress(suggestion.getData().getAddress().getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return daDataResponse;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user