DataService.java
package se.jobtechdev.personaldatagateway.api.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import se.jobtechdev.personaldatagateway.api.exception.ApiException;
import se.jobtechdev.personaldatagateway.api.generated.entities.DatasourceEntity;
import se.jobtechdev.personaldatagateway.api.util.CustomRestClient;
import se.jobtechdev.personaldatagateway.api.util.DataWrapper;
import se.jobtechdev.personaldatagateway.api.util.ProblemDetailsFactory;
import se.jobtechdev.personaldatagateway.api.util.TokenReplacer;
import java.util.Map;
@Component
public class DataService {
private static final Logger logger = LoggerFactory.getLogger(DataService.class);
public DataWrapper retrieveData(DatasourceEntity datasource, String userId, String acceptHeader) {
try {
return CustomRestClient.retrieveData(
TokenReplacer.replace(
datasource.getPath(), Map.of("personnummer", userId, "user-id", userId)),
datasource.getMethod(),
datasource.getHeaders(),
acceptHeader);
} catch (HttpClientErrorException exception) {
logger.warn("Could not retrieve data, exception message: {}", exception.getMessage());
if (exception.getStatusCode().equals(HttpStatus.UNAVAILABLE_FOR_LEGAL_REASONS)) {
throw new ApiException(
ProblemDetailsFactory.createProblemDetails(
HttpStatus.UNAVAILABLE_FOR_LEGAL_REASONS, exception.getMessage()));
}
throw new ApiException(ProblemDetailsFactory.createProblemDetails(HttpStatus.BAD_GATEWAY));
}
}
}