Skip to content

Commit 6353a2c

Browse files
committed
Feature: enhance ApiClient and ApiResponse with improved documentation and new route handling in ConnectorAPI
2 parents 6f6a3dd + ec2e94d commit 6353a2c

10 files changed

Lines changed: 562 additions & 316 deletions

File tree

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/fr/sandro642/github/ConnectorAPI.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
package fr.sandro642.github;
22

33
import fr.sandro642.github.hook.MCSupport;
4+
import fr.sandro642.github.utils.ConvertEnum;
45
import fr.sandro642.github.jobs.JobGetInfos;
56
import fr.sandro642.github.jobs.misc.ResourceType;
67
import fr.sandro642.github.utils.Logger;
78
import fr.sandro642.github.utils.StoreAndRetrieve;
89
import fr.sandro642.github.utils.YamlUtils;
910

11+
import java.util.HashMap;
12+
import java.util.Map;
13+
1014
/**
1115
* ConnectorAPI est une librairie Java permettant de créer un lien de communication entre son projet Java et une API Rest Fastify.
1216
* @author Sandro642
1317
* @version 1.0
14-
* @since 1.0
15-
* @see ConnectorAPI#initialize(ResourceType)
1618
* @see ConnectorAPI#JobGetInfos()
1719
* @see ConnectorAPI#Logger()
1820
* @see ConnectorAPI#StoreAndRetrieve()
@@ -25,17 +27,28 @@ public class ConnectorAPI {
2527
private static Logger logger = new Logger();
2628
private static StoreAndRetrieve storeAndRetrieve = new StoreAndRetrieve();
2729
private static YamlUtils yamlUtils = new YamlUtils();
30+
private static final Map<String,String> routes = new HashMap<>();
2831

2932
/**
3033
* Initialise le ConnectorAPI avec le type de ressource spécifié
3134
*/
32-
public static void initialize(ResourceType resourceType) {
35+
public static void initialize(ResourceType resourceType, Class<? extends Enum<?>>... routes) {
36+
37+
Map<Enum<?>,String> routesEnums = new HashMap<>();
38+
for (Class<? extends Enum<?>> route : routes) {
39+
if (route == null) {
40+
throw new IllegalArgumentException("Les routes ne peuvent pas être null");
41+
}
42+
43+
routesEnums.putAll(ConvertEnum.convert(route));
44+
}
45+
3346
logger = new Logger();
3447
storeAndRetrieve = new StoreAndRetrieve();
3548
yamlUtils = new YamlUtils();
3649

3750
// Génère le template si nécessaire
38-
yamlUtils.generateTemplateIfNotExists(resourceType);
51+
yamlUtils.generateTemplateIfNotExists(resourceType, routesEnums);
3952

4053
if (resourceType == ResourceType.MC_RESOURCES) {
4154
storeAndRetrieve.store.put(storeAndRetrieve.FILE_LOCATION_KEY, MCSupport().getPluginPath());
@@ -48,6 +61,8 @@ public static void initialize(ResourceType resourceType) {
4861
if (baseUrl != null) {
4962
storeAndRetrieve.store.put(storeAndRetrieve.URL_KEY, baseUrl);
5063
}
64+
65+
ConnectorAPI.routes.putAll(yamlUtils.getRoutes());
5166
}
5267

5368
/**
@@ -57,6 +72,18 @@ public static JobGetInfos JobGetInfos() {
5772
return new JobGetInfos();
5873
}
5974

75+
public static String getRoute(String routeName) {
76+
if (routes.containsKey(routeName)) {
77+
return routes.get(routeName);
78+
} else {
79+
throw new IllegalArgumentException("La route " + routeName + " n'existe pas.");
80+
}
81+
}
82+
83+
public static String getRoute(Enum<?> routeEnum) {
84+
return getRoute(routeEnum.name().toLowerCase());
85+
}
86+
6087
/**
6188
* Retourne l'instance du Logger
6289
*/

src/main/java/fr/sandro642/github/api/ApiClient.java

Lines changed: 118 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -17,113 +17,128 @@
1717

1818
public class ApiClient {
1919

20-
/**
21-
* WebClient est utilisé pour effectuer les requêtes HTTP vers l'API.
22-
* lastResponse stocke la dernière réponse de l'API.
23-
* Logger est utilisé pour enregistrer les informations de débogage et d'erreur.
24-
*/
25-
private final WebClient webClient;
26-
private final AtomicReference<ApiResponse<Void>> lastResponse = new AtomicReference<>();
27-
private final Logger logger = new Logger();
28-
29-
/**
30-
* Constructeur de ApiClient qui initialise WebClient avec l'URL de base.
31-
*/
32-
public ApiClient() {
33-
String baseUrl = (String) ConnectorAPI.StoreAndRetrieve().store.get(ConnectorAPI.StoreAndRetrieve().URL_KEY);
34-
35-
if (baseUrl == null) {
36-
throw new RuntimeException("URL de base non trouvée. Assurez-vous d'avoir initialisé ConnectorAPI. ");
37-
}
38-
39-
this.webClient = WebClient.builder()
40-
.baseUrl(baseUrl)
41-
.build();
42-
}
20+
/**
21+
* WebClient est utilisé pour effectuer les requêtes HTTP vers l'API.
22+
* lastResponse stocke la dernière réponse de l'API.
23+
* Logger est utilisé pour enregistrer les informations de débogage et d'erreur.
24+
*/
25+
private final WebClient webClient;
4326

44-
/**
45-
* Méthode pour appeler l'API avec une requête GET.
46-
* @param routeName
47-
* @return
48-
*/
49-
public Mono<ApiResponse<Void>> callAPIGet(String routeName) {
50-
logger.INFO("Appel GET vers: " + routeName);
51-
return webClient.get()
52-
.uri(routeName)
53-
.retrieve()
54-
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {})
55-
.subscribeOn(Schedulers.boundedElastic())
56-
.doOnNext(lastResponse::set)
57-
.doOnError(error -> logger.ERROR("Erreur lors de l'appel GET: " + error.getMessage()));
58-
}
27+
private final AtomicReference<ApiResponse<Void>> lastResponse = new AtomicReference<>();
5928

60-
/**
61-
* Méthode pour appeler l'API avec une requête POST.
62-
* @param routeName
63-
* @param body Corps de la requête (peut être null pour une requête sans corps).
64-
* @return
65-
*/
66-
public Mono<ApiResponse<Void>> callAPIPost(String routeName, Map<String, Object> body) {
67-
logger.INFO("Appel POST vers: " + routeName);
68-
return webClient.post()
69-
.uri(routeName)
70-
.bodyValue(body != null ? body : Map.of())
71-
.retrieve()
72-
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {})
73-
.subscribeOn(Schedulers.boundedElastic())
74-
.doOnNext(lastResponse::set)
75-
.doOnError(error -> logger.ERROR("Erreur lors de l'appel POST: " + error.getMessage()));
76-
}
29+
// private final AtomicReference<Map<String, Object>> lastRawResponse = new AtomicReference<>();
7730

78-
/**
79-
* Méthode pour appeler l'API avec une requête PUT
80-
* @param routeName
81-
* @param body
82-
* @return
83-
*/
84-
public Mono<ApiResponse<Void>> callAPIPut(String routeName, Map<String, Object> body) {
85-
logger.INFO("Appel PUT vers: " + routeName);
86-
return webClient.put()
87-
.uri(routeName)
88-
.bodyValue(body != null ? body : Map.of())
89-
.retrieve()
90-
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {})
91-
.subscribeOn(Schedulers.boundedElastic())
92-
.doOnNext(lastResponse::set)
93-
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PUT: " + error.getMessage()));
94-
}
31+
private final Logger logger = new Logger();
9532

96-
/**
97-
* Méthode pour appeler l'API avec une reqête PATCH
98-
* @param routeName
99-
* @param body
100-
* @return
101-
*/
102-
public Mono<ApiResponse<Void>> callAPIPatch(String routeName, Map<String, Object> body) {
103-
logger.INFO("Appel PATCH vers: " + routeName);
104-
return webClient.patch()
105-
.uri(routeName)
106-
.bodyValue(body != null ? body : Map.of())
107-
.retrieve()
108-
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {})
109-
.subscribeOn(Schedulers.boundedElastic())
110-
.doOnNext(lastResponse::set)
111-
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PATCH: " + error.getMessage()));
112-
}
33+
/**
34+
* Constructeur de ApiClient qui initialise WebClient avec l'URL de base.
35+
*/
36+
public ApiClient() {
37+
String baseUrl = (String) ConnectorAPI.StoreAndRetrieve().store.get(ConnectorAPI.StoreAndRetrieve().URL_KEY);
11338

114-
/**
115-
* Méthode pour appeler l'API avec une requête DELETE
116-
* @param routeName
117-
* @return
118-
*/
119-
public Mono<ApiResponse<Void>> callAPIDelete(String routeName) {
120-
logger.INFO("Appel DELETE vers: " + routeName);
121-
return webClient.delete()
122-
.uri(routeName)
123-
.retrieve()
124-
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {})
125-
.subscribeOn(Schedulers.boundedElastic())
126-
.doOnNext(lastResponse::set)
127-
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PATCH: " + error.getMessage()));
39+
if (baseUrl == null) {
40+
throw new RuntimeException("URL de base non trouvée. Assurez-vous d'avoir initialisé ConnectorAPI. ");
12841
}
42+
43+
this.webClient = WebClient.builder()
44+
.baseUrl(baseUrl)
45+
.build();
46+
}
47+
48+
/**
49+
* Méthode pour appeler l'API avec une requête GET.
50+
*
51+
* @param routeName
52+
* @return
53+
*/
54+
public Mono<ApiResponse<Void>> callAPIGet(String routeName) {
55+
logger.INFO("Appel GET vers: " + routeName);
56+
return webClient.get()
57+
.uri(routeName)
58+
.retrieve()
59+
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {
60+
})
61+
.subscribeOn(Schedulers.boundedElastic())
62+
.doOnNext(lastResponse::set)
63+
.doOnError(error -> logger.ERROR("Erreur lors de l'appel GET: " + error.getMessage()));
64+
}
65+
66+
/**
67+
* Méthode pour appeler l'API avec une requête POST.
68+
*
69+
* @param routeName
70+
* @param body Corps de la requête (peut être null pour une requête sans
71+
* corps).
72+
* @return
73+
*/
74+
public Mono<ApiResponse<Void>> callAPIPost(String routeName, Map<String, Object> body) {
75+
logger.INFO("Appel POST vers: " + routeName);
76+
return webClient.post()
77+
.uri(routeName)
78+
.bodyValue(body != null ? body : Map.of())
79+
.retrieve()
80+
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {
81+
})
82+
.subscribeOn(Schedulers.boundedElastic())
83+
.doOnNext(lastResponse::set)
84+
.doOnError(error -> logger.ERROR("Erreur lors de l'appel POST: " + error.getMessage()));
85+
}
86+
87+
/**
88+
* Méthode pour appeler l'API avec une requête PUT
89+
*
90+
* @param routeName
91+
* @param body
92+
* @return
93+
*/
94+
public Mono<ApiResponse<Void>> callAPIPut(String routeName, Map<String, Object> body) {
95+
logger.INFO("Appel PUT vers: " + routeName);
96+
return webClient.put()
97+
.uri(routeName)
98+
.bodyValue(body != null ? body : Map.of())
99+
.retrieve()
100+
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {
101+
})
102+
.subscribeOn(Schedulers.boundedElastic())
103+
.doOnNext(lastResponse::set)
104+
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PUT: " + error.getMessage()));
105+
}
106+
107+
/**
108+
* Méthode pour appeler l'API avec une reqête PATCH
109+
*
110+
* @param routeName
111+
* @param body
112+
* @return
113+
*/
114+
public Mono<ApiResponse<Void>> callAPIPatch(String routeName, Map<String, Object> body) {
115+
logger.INFO("Appel PATCH vers: " + routeName);
116+
return webClient.patch()
117+
.uri(routeName)
118+
.bodyValue(body != null ? body : Map.of())
119+
.retrieve()
120+
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {
121+
})
122+
.subscribeOn(Schedulers.boundedElastic())
123+
.doOnNext(lastResponse::set)
124+
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PATCH: " + error.getMessage()));
125+
}
126+
127+
/**
128+
* Méthode pour appeler l'API avec une requête DELETE
129+
*
130+
* @param routeName
131+
* @return
132+
*/
133+
public Mono<ApiResponse<Void>> callAPIDelete(String routeName) {
134+
logger.INFO("Appel DELETE vers: " + routeName);
135+
return webClient.delete()
136+
.uri(routeName)
137+
.retrieve()
138+
.bodyToMono(new ParameterizedTypeReference<ApiResponse<Void>>() {
139+
})
140+
.subscribeOn(Schedulers.boundedElastic())
141+
.doOnNext(lastResponse::set)
142+
.doOnError(error -> logger.ERROR("Erreur lors de l'appel PATCH: " + error.getMessage()));
143+
}
129144
}

0 commit comments

Comments
 (0)