Update api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package fr.gameovergne.api.service.prestashop;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -17,10 +19,12 @@ import java.util.Map;
|
||||
@Service
|
||||
public class PrestashopClient {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(PrestashopClient.class);
|
||||
|
||||
private final HttpClient httpClient = HttpClient.newHttpClient();
|
||||
|
||||
private final String baseUrl;
|
||||
private final String basicAuth; // valeur déjà encodée Base64 (sans le "Basic ")
|
||||
private final String basicAuth; // valeur déjà en Base64, sans le "Basic "
|
||||
|
||||
public PrestashopClient(
|
||||
@Value("${prestashop.base-url}") String baseUrl,
|
||||
@@ -31,36 +35,44 @@ public class PrestashopClient {
|
||||
}
|
||||
|
||||
public ResponseEntity<String> get(String path, String query) {
|
||||
// path : ex "/suppliers"
|
||||
// query : ex "display=%5Bid,name,active%5D&output_format=JSON"
|
||||
String url = buildUrl(path, query);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(url))
|
||||
.header("Authorization", "Basic " + basicAuth)
|
||||
.GET()
|
||||
.build();
|
||||
log.info("[PrestaShop] Appel URL = {}", url);
|
||||
|
||||
try {
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(url)) // si l’URL est invalide, ça lèvera IllegalArgumentException
|
||||
.header("Authorization", "Basic " + basicAuth)
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response =
|
||||
httpClient.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
// On reconstruit une ResponseEntity en gardant le status PrestaShop
|
||||
log.info("[PrestaShop] Réponse HTTP {} pour {}", response.statusCode(), url);
|
||||
|
||||
HttpHeaders springHeaders = new HttpHeaders();
|
||||
for (Map.Entry<String, List<String>> entry : response.headers().map().entrySet()) {
|
||||
springHeaders.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(response.body(), springHeaders,
|
||||
HttpStatus.valueOf(response.statusCode()));
|
||||
return new ResponseEntity<>(
|
||||
response.body(),
|
||||
springHeaders,
|
||||
HttpStatus.valueOf(response.statusCode())
|
||||
);
|
||||
|
||||
} catch (IOException | InterruptedException e) {
|
||||
// En prod tu pourrais logger proprement
|
||||
if (e instanceof InterruptedException) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
log.error("[PrestaShop] Erreur I/O pour {}", url, e);
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
.body("{\"error\":\"Failed to call PrestaShop Webservice\"}");
|
||||
.body("{\"error\":\"" + e.getClass().getSimpleName() + "\",\"message\":\"" + e.getMessage() + "\"}");
|
||||
} catch (Exception e) {
|
||||
// <-- ICI on récupère IllegalArgumentException, etc.
|
||||
log.error("[PrestaShop] Erreur inattendue pour {}", url, e);
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
.body("{\"error\":\"" + e.getClass().getSimpleName() + "\",\"message\":\"" + e.getMessage() + "\"}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +82,7 @@ public class PrestashopClient {
|
||||
// baseUrl, ex: https://shop.gameovergne.fr
|
||||
sb.append(baseUrl);
|
||||
if (baseUrl.endsWith("/")) {
|
||||
sb.setLength(sb.length() - 1); // on enlève le / final si présent
|
||||
sb.setLength(sb.length() - 1);
|
||||
}
|
||||
|
||||
// /api
|
||||
@@ -84,7 +96,7 @@ public class PrestashopClient {
|
||||
sb.append(path);
|
||||
}
|
||||
|
||||
// query déjà encodée par le navigateur : NE PAS la ré-encoder !
|
||||
// query : on NE RÉ-ENCODE PAS, on colle tel quel (déjà encodée par Angular / le navigateur)
|
||||
if (query != null && !query.isBlank()) {
|
||||
sb.append('?').append(query);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user