From 844c132915360a2bdefb512ee569c355e759ae80 Mon Sep 17 00:00:00 2001 From: Vincent Guillet Date: Tue, 25 Nov 2025 17:02:09 +0000 Subject: [PATCH] Update api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java --- .../service/prestashop/PrestashopClient.java | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java b/api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java index ddd80ac..9fc1614 100644 --- a/api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java +++ b/api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java @@ -1,70 +1,61 @@ +// FILE: api/src/main/java/fr/gameovergne/api/service/prestashop/PrestashopClient.java package fr.gameovergne.api.service.prestashop; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; -import org.springframework.stereotype.Service; -import org.springframework.web.client.HttpStatusCodeException; -import org.springframework.web.client.RestClientException; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -@Service +import java.net.URI; + +@Component public class PrestashopClient { private final RestTemplate restTemplate = new RestTemplate(); - private final String baseUrl; - private final String basicAuth; // valeur déjà encodée Base64 (Authorization: Basic ...) + private final String basicAuth; public PrestashopClient( @Value("${prestashop.base-url}") String baseUrl, - @Value("${prestashop.basic-auth}") String basicAuth) { + @Value("${prestashop.basic-auth}") String basicAuth + ) { this.baseUrl = baseUrl; this.basicAuth = basicAuth; } public ResponseEntity get(String path, String query) { - // path = ex: "/categories" - // query = ex: "display=...[...]" (déjà encodé) - String url = UriComponentsBuilder + UriComponentsBuilder builder = UriComponentsBuilder .fromHttpUrl(baseUrl) .path("/api") - .path(path) - .query(query) - .build(true) // la query contient déjà les %5B..%5D - .toUriString(); + .path(path); // ex: /suppliers - System.out.println("[Presta] GET " + url); + if (query != null && !query.isBlank()) { + // On parse la query reçue de l'appel Angular + MultiValueMap params = + UriComponentsBuilder.newInstance().query(query).build().getQueryParams(); + + // On supprime output_format côté Presta : on laisse l'en-tête Accept gérer le JSON + params.remove("output_format"); + + // On réapplique tous les autres paramètres (display, filter[...], etc.) + for (var entry : params.entrySet()) { + for (String v : entry.getValue()) { + builder.queryParam(entry.getKey(), v); + } + } + } + + URI uri = builder.build(true).toUri(); // true = les valeurs sont déjà encodées si besoin HttpHeaders headers = new HttpHeaders(); - headers.set(HttpHeaders.AUTHORIZATION, "Basic " + basicAuth); + headers.set("Authorization", basicAuth); + headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); HttpEntity entity = new HttpEntity<>(headers); - try { - ResponseEntity response = - restTemplate.exchange(url, HttpMethod.GET, entity, String.class); - - System.out.println("[Presta] <- " + response.getStatusCode()); - return ResponseEntity - .status(response.getStatusCode()) - .headers(response.getHeaders()) - .body(response.getBody()); - - } catch (HttpStatusCodeException ex) { - // Erreur HTTP renvoyée par Presta (401, 403, 404, 500, ...) - System.err.println("[Presta] ERROR " + ex.getStatusCode() + " for URL: " + url); - System.err.println("[Presta] BODY: " + ex.getResponseBodyAsString()); - return ResponseEntity - .status(ex.getStatusCode()) - .body(ex.getResponseBodyAsString()); - } catch (RestClientException ex) { - // Erreur réseau/TLS/etc - System.err.println("[Presta] CLIENT ERROR for URL: " + url); - ex.printStackTrace(); - return ResponseEntity - .status(HttpStatus.BAD_GATEWAY) - .body("Error while calling Prestashop: " + ex.getMessage()); - } + return restTemplate.exchange(uri, HttpMethod.GET, entity, String.class); } } \ No newline at end of file