NCBACK-42 add dadata handler
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-02-12 15:36:45 +07:00
parent 920fc67962
commit b372180f83
12 changed files with 199 additions and 7 deletions
@@ -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;
}
}
}