Update api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java

This commit is contained in:
2025-11-25 18:05:56 +00:00
parent c7b9b68d42
commit 47edec0d33

View File

@@ -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 lURL 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);
}