|
6 | 6 | import fr.sandro642.github.enums.MethodType; |
7 | 7 | import fr.sandro642.github.enums.VersionType; |
8 | 8 | import reactor.core.publisher.Mono; |
| 9 | +import reactor.core.scheduler.Scheduler; |
9 | 10 |
|
10 | 11 | import java.util.Map; |
| 12 | +import java.util.concurrent.CompletableFuture; |
| 13 | +import java.util.function.Consumer; |
11 | 14 |
|
12 | 15 | /** |
13 | 16 | * JobGetInfos is a utility class for managing API requests in the ConnectLib library. |
@@ -187,49 +190,77 @@ public <R> JobGetInfos getRoutes(VersionType versionType, MethodType methodType, |
187 | 190 | * makes the API call, and returns the response as an ApiFactory object. |
188 | 191 | * @return ApiFactory containing the response from the API, or null if an error occurs. |
189 | 192 | */ |
190 | | - public Mono<ApiFactory> getResponse() { |
| 193 | + public CompletableFuture<ApiFactory> getResponse() { |
191 | 194 | try { |
192 | | - |
193 | 195 | String route = (String) ConnectLib.StoreAndRetrieve().store.get("currentRoute"); |
194 | 196 | MethodType method = (MethodType) ConnectLib.StoreAndRetrieve().store.get("currentMethod"); |
195 | 197 | Map<String, Object> body = (Map<String, Object>) ConnectLib.StoreAndRetrieve().store.get("currentBody"); |
196 | 198 |
|
197 | 199 | if (route == null || method == null) { |
198 | | - throw new RuntimeException("Route or method not set. Please call getRoutes() first."); |
| 200 | + return CompletableFuture.failedFuture( |
| 201 | + new RuntimeException("Route or method not set. Please call getRoutes() first.") |
| 202 | + ); |
199 | 203 | } |
200 | 204 |
|
201 | | - Mono<ApiFactory> response; |
| 205 | + CompletableFuture<ApiFactory> responseFuture = new CompletableFuture<>(); |
| 206 | + |
| 207 | + // Callback to clean up the store after the response |
| 208 | + Consumer<ApiFactory> onSuccess = response -> { |
| 209 | + ConnectLib.StoreAndRetrieve().store.remove("currentRoute"); |
| 210 | + ConnectLib.StoreAndRetrieve().store.remove("currentMethod"); |
| 211 | + ConnectLib.StoreAndRetrieve().store.remove("currentBody"); |
| 212 | + responseFuture.complete(response); |
| 213 | + }; |
| 214 | + |
| 215 | + Consumer<Throwable> onError = error -> { |
| 216 | + ConnectLib.StoreAndRetrieve().store.remove("currentRoute"); |
| 217 | + ConnectLib.StoreAndRetrieve().store.remove("currentMethod"); |
| 218 | + ConnectLib.StoreAndRetrieve().store.remove("currentBody"); |
| 219 | + responseFuture.completeExceptionally(error); |
| 220 | + }; |
202 | 221 |
|
203 | 222 | switch(method) { |
204 | 223 | case GET: |
205 | | - response = apiClient.callAPIGet(route); |
| 224 | + apiClient.callAPIGet(route).subscribe( |
| 225 | + response -> onSuccess.accept((ApiFactory) response), |
| 226 | + onError |
| 227 | + ); |
206 | 228 | break; |
207 | 229 | case POST: |
208 | | - response = apiClient.callAPIPost(route, body); |
| 230 | + apiClient.callAPIPost(route, body).subscribe( |
| 231 | + response -> onSuccess.accept((ApiFactory) response), |
| 232 | + onError |
| 233 | + ); |
209 | 234 | break; |
210 | 235 | case PUT: |
211 | | - response = apiClient.callAPIPut(route, body); |
| 236 | + apiClient.callAPIPut(route, body).subscribe( |
| 237 | + response -> onSuccess.accept((ApiFactory) response), |
| 238 | + onError |
| 239 | + ); |
212 | 240 | break; |
213 | 241 | case PATCH: |
214 | | - response = apiClient.callAPIPatch(route, body); |
| 242 | + apiClient.callAPIPatch(route, body).subscribe( |
| 243 | + response -> onSuccess.accept((ApiFactory) response), |
| 244 | + onError |
| 245 | + ); |
215 | 246 | break; |
216 | 247 | case DELETE: |
217 | | - response = apiClient.callAPIDelete(route); |
| 248 | + apiClient.callAPIDelete(route).subscribe( |
| 249 | + response -> onSuccess.accept((ApiFactory) response), |
| 250 | + onError |
| 251 | + ); |
218 | 252 | break; |
219 | 253 | default: |
220 | 254 | ConnectLib.Logger().ERROR("Unsupported method type: " + method); |
221 | | - return null; |
| 255 | + return CompletableFuture.failedFuture( |
| 256 | + new IllegalArgumentException("Unsupported method type: " + method) |
| 257 | + ); |
222 | 258 | } |
223 | 259 |
|
224 | | - // Nettoie le store après utilisation |
225 | | - ConnectLib.StoreAndRetrieve().store.remove("currentRoute"); |
226 | | - ConnectLib.StoreAndRetrieve().store.remove("currentMethod"); |
227 | | - ConnectLib.StoreAndRetrieve().store.remove("currentBody"); |
228 | | - |
229 | | - return response; |
| 260 | + return responseFuture; |
230 | 261 |
|
231 | 262 | } catch (Exception e) { |
232 | | - return null; |
| 263 | + return CompletableFuture.failedFuture(e); |
233 | 264 | } |
234 | 265 | } |
235 | 266 | } |
0 commit comments