diff --git a/api/src/main/java/fr/gameovergne/api/controller/PrestashopProxyController.java b/api/src/main/java/fr/gameovergne/api/controller/PrestashopProxyController.java index 7f7f50c..7b96290 100644 --- a/api/src/main/java/fr/gameovergne/api/controller/PrestashopProxyController.java +++ b/api/src/main/java/fr/gameovergne/api/controller/PrestashopProxyController.java @@ -1,48 +1,44 @@ -package fr.gameovergne.api.controller;// package fr.gameovergne.api.controller; +package fr.gameovergne.api.controller; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.ResponseEntity; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.*; import fr.gameovergne.api.service.PrestashopClient; -import java.util.Map; import java.util.stream.Collectors; + @RestController -@RequestMapping("/prestashop") +@RequestMapping("/api/ps") @RequiredArgsConstructor public class PrestashopProxyController { private final PrestashopClient prestashopClient; - @GetMapping("/categories") - public String getCategories(@RequestParam Map params) { + @GetMapping("/{resource}") + public ResponseEntity proxyGet( + @PathVariable String resource, + @RequestParam MultiValueMap params + ) { String query = buildQuery(params); - return prestashopClient.get("/categories" + query); + String path = "/" + resource + query; + + String body = prestashopClient.get(path); + return ResponseEntity.ok(body); } - @GetMapping("/manufacturers") - public String getManufacturers(@RequestParam Map params) { - String query = buildQuery(params); - return prestashopClient.get("/manufacturers" + query); - } - - @GetMapping("/suppliers") - public String getSuppliers(@RequestParam Map params) { - String query = buildQuery(params); - return prestashopClient.get("/suppliers" + query); - } - - private String buildQuery(Map params) { + private String buildQuery(MultiValueMap params) { if (params == null || params.isEmpty()) { return ""; } + String queryString = params.entrySet().stream() - .map(e -> e.getKey() + "=" + e.getValue()) + .flatMap(e -> e.getValue().stream() + .map(v -> e.getKey() + "=" + v)) .collect(Collectors.joining("&")); + return "?" + queryString; } } \ No newline at end of file diff --git a/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java b/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java index e79680e..917584f 100644 --- a/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java +++ b/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java @@ -20,7 +20,6 @@ public class PrestashopClient { @Value("${prestashop.api-key}") String rawApiKey, RestTemplateBuilder builder ) { - // Normalisation baseUrl (pas de / final) if (baseUrl.endsWith("/")) { baseUrl = baseUrl.substring(0, baseUrl.length() - 1); } @@ -34,25 +33,17 @@ public class PrestashopClient { ); } - // Logs pour contrôle visuel log.info("[PrestaShop] API key length = {}", apiKey.length()); log.info("[PrestaShop] API key prefix = {}****", apiKey.substring(0, 4)); - // IMPORTANT : Basic Auth = username = clé, password = vide this.restTemplate = builder .basicAuthentication(apiKey, "") .build(); } - /** - * Appel simple GET PrestaShop. - * Exemple d'appel depuis le controller : - * client.get("/categories?display=[id,name,active]&output_format=JSON"); - */ public String get(String pathAndQuery) { String url; - // On accepte soit un chemin relatif, soit une URL complète (au cas où) if (pathAndQuery.startsWith("http://") || pathAndQuery.startsWith("https://")) { url = pathAndQuery; } else if (pathAndQuery.startsWith("/")) {