Conversation
12c6705 to
f309983
Compare
f309983 to
9683782
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
Ce PR introduit un nouveau client HTTP backend orienté “promesses” pour permettre le parallélisme (pagination, fetch de détails) et refactorise les appels Entrepôt/EspaceCo pour en tirer parti, afin d’améliorer les performances côté serveur et réduire les temps d’attente sur les écrans concernés.
Changes:
- Ajout d’un
ApiClient(promesses, pagination, résolution parallèle, upload multipart) + parseurs d’erreurs dédiés. - Refactorisation des services API Entrepôt/EspaceCo et des contrôleurs pour consommer
ResponsePromise/PaginatedPromise. - Découplage du chargement de la liste des services d’une fiche de données (endpoint dédié + requête React Query dédiée).
Reviewed changes
Copilot reviewed 95 out of 96 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Workflow/UploadIntegrationWorkflow.php | Consommation des appels API via ResponsePromise (->array(), ->await()). |
| src/Utils.php | Refactor de array_deep_equals + ajout helper normalize_query(). |
| src/Services/SandboxService.php | Consomme désormais CommunityApiService->get()->array(). |
| src/Services/EspaceCoApi/WfsApiService.php | Refactor vers ApiClient + retour ResponsePromise. |
| src/Services/EspaceCoApi/UserApiService.php | Refactor vers ApiClient + retours ResponsePromise/->array(). |
| src/Services/EspaceCoApi/TransactionApiService.php | Refactor pagination via PaginatedResponse. |
| src/Services/EspaceCoApi/StyleApiService.php | Refactor vers ApiClient style + lecture text() + headers. |
| src/Services/EspaceCoApi/ReportApiService.php | Refactor complet (list/all CRUD) vers ApiClient. |
| src/Services/EspaceCoApi/ReplyApiService.php | Refactor CRUD vers ApiClient. |
| src/Services/EspaceCoApi/PermissionApiService.php | Refactor vers ApiClient + requestAll()/PaginatedPromise. |
| src/Services/EspaceCoApi/LayerApiService.php | Refactor update layer vers ApiClient. |
| src/Services/EspaceCoApi/GridApiService.php | Refactor pagination + getPageCount() côté client. |
| src/Services/EspaceCoApi/GeoserviceApiService.php | Refactor vers ApiClient. |
| src/Services/EspaceCoApi/EmailPlannerApiService.php | Refactor vers ApiClient + PaginatedPromise. |
| src/Services/EspaceCoApi/DatabaseApiService.php | Refactor endpoints DB/table/col + requestAll(). |
| src/Services/EspaceCoApi/CommunityLayerApiService.php | Refactor getLayers() vers requestAll(). |
| src/Services/EspaceCoApi/CommunityDocumentApiService.php | Refactor endpoints documents + upload via sendFile(). |
| src/Services/EspaceCoApi/CommunityApiService.php | Refactor vers ApiClient + résolution async/then() sur requestAll(). |
| src/Services/EspaceCoApi/BaseEspaceCoApiService.php | Supprimé (ancien socle remplacé par ApiClient). |
| src/Services/EntrepotApi/UserDocumentsApiService.php | Refactor documents utilisateur vers ApiClient (+ nettoyage fichiers via Filesystem). |
| src/Services/EntrepotApi/UserApiService.php | Refactor users/me/keys/permissions vers ApiClient (suppression getMyDatastores). |
| src/Services/EntrepotApi/StoredDataApiService.php | Refactor + normalisation query + fetch détails en parallèle. |
| src/Services/EntrepotApi/StaticApiService.php | Refactor statics vers ApiClient + pagination. |
| src/Services/EntrepotApi/ServiceAccount.php | Ajuste getMe() en ->array(). |
| src/Services/EntrepotApi/ProcessingApiService.php | Refactor processings vers ApiClient + fetch détails en parallèle. |
| src/Services/EntrepotApi/MetadataApiService.php | Refactor metadata vers ApiClient + upload et tags. |
| src/Services/EntrepotApi/DatastoreApiService.php | Refactor + cache + requestAll() permissions. |
| src/Services/EntrepotApi/ConfigurationApiService.php | Refactor configurations/offerings vers ApiClient + détails async. |
| src/Services/EntrepotApi/CommunityApiService.php | Refactor communauté Entrepôt vers ApiClient. |
| src/Services/EntrepotApi/CatalogsApiService.php | Refactor catalog endpoints vers ApiClient. |
| src/Services/EntrepotApi/CartesStylesApiService.php | Adaptation aux retours promesses (resolve(), text(), await()). |
| src/Services/EntrepotApi/CartesStoredDataApiService.php | Adaptation suppression stored_data/processings en await()/resolve(). |
| src/Services/EntrepotApi/CartesMetadataApiService.php | Adaptation metadata/annexes/download en text() et actions en await(). |
| src/Services/EntrepotApi/BaseEntrepotApiService.php | Supprimé (ancien socle remplacé par ApiClient). |
| src/Services/EntrepotApi/AnnexeApiService.php | Refactor annexes vers ApiClient + pagination. |
| src/Services/CapabilitiesService.php | Adaptation à PaginatedPromise->resolve() pour offerings/annexes. |
| src/Services/AbstractApiService.php | Supprimé (remplacé par ApiClient). |
| src/Security/KeycloakUserProvider.php | Consommation de getMe()->array() pour user provider. |
| src/Dto/Services/PyramidVector/PyramidVectorGenerateDTO.php | Ajustement whitespace (format). |
| src/Controller/EspaceCo/WfsController.php | Utilise ->text() pour renvoyer XML/JSON brut. |
| src/Controller/EspaceCo/UserController.php | Consomme ResponsePromise->array(). |
| src/Controller/EspaceCo/TransactionController.php | Consomme PaginatedResponse (content, headers). |
| src/Controller/EspaceCo/ReportController.php | Consomme PaginatedResponse + text() pour RSS/WFS. |
| src/Controller/EspaceCo/ReplyController.php | Consomme ResponsePromise->array(). |
| src/Controller/EspaceCo/PermissionController.php | Résolution PaginatedPromise->resolve() + actions await(). |
| src/Controller/EspaceCo/GridController.php | Consomme ->array() sur get(). |
| src/Controller/EspaceCo/GeoserviceController.php | Consomme ->array(). |
| src/Controller/EspaceCo/EmailPlannerController.php | Utilise resolve()/await() selon endpoints. |
| src/Controller/EspaceCo/DatabaseController.php | Utilise resolve()/array() selon endpoints. |
| src/Controller/EspaceCo/CommunityLayerController.php | getLayers()->resolve() + update await(). |
| src/Controller/EspaceCo/CommunityDocumentController.php | Consomme ->array() + delete en await(). |
| src/Controller/EspaceCo/CommunityController.php | Consomme ->array()/resolve() pour appels EspaceCo. |
| src/Controller/Entrepot/WmsVectorController.php | Passage à ->array()/await() pour offerings/configs/statics. |
| src/Controller/Entrepot/WfsController.php | Passage à ->array() pour offering/config. |
| src/Controller/Entrepot/UserDocumentsController.php | PaginatedResponse + téléchargement text() + deletes en await(). |
| src/Controller/Entrepot/UserController.php | getMe()->array(), lists en resolve(), mutations en await(); suppression route datastores. |
| src/Controller/Entrepot/UploadController.php | resolve() pour listes, await() pour side-effects, text()/array() pour contenus. |
| src/Controller/Entrepot/StyleController.php | Consomme offering/config via ->array() + annexes await(). |
| src/Controller/Entrepot/StoredDataController.php | resolve() pour listes, ->array() pour get/report/uses, logs via ->array(). |
| src/Controller/Entrepot/StaticController.php | List PaginatedResponse, download via text(), delete via await(). |
| src/Controller/Entrepot/ServiceController.php | Offerings via resolve() + offering/config via ->array(). |
| src/Controller/Entrepot/PyramidVectorController.php | ->array() + mutations await() + strict bool style. |
| src/Controller/Entrepot/PyramidRasterController.php | ->array() + mutations await() + annexes/statics via resolve(). |
| src/Controller/Entrepot/ProcessingController.php | Listes via resolve() (et détaillées via helper). |
| src/Controller/Entrepot/MetadataController.php | Listes via resolve(), fichiers via text(), mutations via await(). |
| src/Controller/Entrepot/DatastoreController.php | Permissions via resolve(), CRUD via array()/await(), nettoyage attributs Route. |
| src/Controller/Entrepot/DatasheetDocumentController.php | Downloads annexes via text(), listes via resolve(), delete en await(). |
| src/Controller/Entrepot/DatasheetController.php | Parallélisation des fetchs init + extraction endpoint getServices() + suppression service_list du détail. |
| src/Controller/Entrepot/CommunityController.php | Passage à ->array()/resolve() et mutations en await(). |
| src/Controller/Entrepot/CatalogsController.php | requestAll()->resolve() pour catalogs. |
| src/Controller/Entrepot/AnnexeController.php | resolve() pour listes, download via text(), mutations via await(). |
| src/Controller/ContactController.php | getMe()->array() pour enrichir mail support. |
| src/ApiClient/ResponsePromise.php | Nouveau wrapper de réponse lazy + résolution parallèle (stream). |
| src/ApiClient/RequestOptions.php | Nouveau DTO d’options HTTP (query/json/upload). |
| src/ApiClient/PaginatedResponse.php | Nouveau conteneur pagination + calcul pageCount. |
| src/ApiClient/PaginatedPromise.php | Nouveau wrapper lazy pour pagination complète (resolve()). |
| src/ApiClient/ErrorParser/EspaceCoErrorParser.php | Nouveau parseur d’erreurs EspaceCo. |
| src/ApiClient/ErrorParser/ErrorParserInterface.php | Contrat de parseur d’erreurs pour ApiClient. |
| src/ApiClient/ErrorParser/EntrepotErrorParser.php | Nouveau parseur d’erreurs Entrepôt. |
| src/ApiClient/AuthenticatedHttpClient.php | Ajoute automatiquement le Bearer token Keycloak. |
| src/ApiClient/ApiClientFactory.php | Factory de clients configurés (Entrepôt/EspaceCo/Style). |
| src/ApiClient/ApiClient.php | Client HTTP unifié (verbes, upload, pagination, parallélisme). |
| docs/developer/README.md | Ajoute un lien de doc ApiClient (mais introduit une redondance). |
| config/services.yaml | Déclare les services app.api_client.* via factory. |
| config/packages/framework.yaml | Configure retries HttpClient (GET sur codes 0/5xx). |
| assets/main.tsx | Ajuste l’affichage toolbar Symfony (dev vs prod). |
| assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListTab.tsx | Liste services via UseQueryResult + état loading. |
| assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListItem.tsx | MAJ cache React Query sur la nouvelle query key “services”. |
| assets/entrepot/pages/datasheet/DatasheetView/DatasheetView/DatasheetView.tsx | Ajoute query dédiée “services” + préchargement offering cache. |
| assets/entrepot/pages/datasheet/DatasheetView/DatasetListTab/StoredDataDeleteConfirmDialog.tsx | Met à jour caches datasheet + services list lors d’une suppression. |
| assets/entrepot/api/user.ts | Supprime getDatastoresList (endpoint backend retiré). |
| assets/@types/app.ts | Retire service_list de DatasheetDetailed. |
| CLAUDE.md | Ajoute doc de repo (mais contient une incohérence sur AbstractApiService). |
Comments suppressed due to low confidence (1)
assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListTab.tsx:29
- En cas d'erreur React Query (
services_list_query.isError), le composant retombe surdata ?? []et affiche le message « aucun service », ce qui masque une erreur réseau/API et induit l'utilisateur en erreur. Ajouter un rendu dédié à l'état d'erreur (alerte + éventuel retry) éviterait ce faux négatif.
if (services_list_query.isLoading) {
return <LoadingText as="p" withSpinnerIcon />;
}
const servicesList = services_list_query.data ?? [];
if (!servicesList || servicesList.length === 0) {
return (
<div className={fr.cx("fr-grid-row", "fr-grid-row--middle")}>
<p>{t("services_tab.no_service")}</p>
</div>
assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListTab.tsx
Outdated
Show resolved
Hide resolved
assets/entrepot/pages/datasheet/DatasheetView/DatasetListTab/StoredDataDeleteConfirmDialog.tsx
Outdated
Show resolved
Hide resolved
assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListItem.tsx
Outdated
Show resolved
Hide resolved
assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListTab.tsx
Outdated
Show resolved
Hide resolved
assets/entrepot/pages/datasheet/DatasheetView/ServiceListTab/ServicesListTab.tsx
Outdated
Show resolved
Hide resolved
slafayIGN
approved these changes
Mar 26, 2026
Contributor
slafayIGN
left a comment
There was a problem hiding this comment.
Améliore un peu les performances, maintenant ça dépend surtout du backend.
C'est bon pour moi.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Réécriture complète des ApiService :