5.2 KiB
5.2 KiB
Cohérence des données — UnionFlow Mobile
Ce document décrit les conventions et alignements API ↔ app pour éviter les incohérences.
1. Configuration
- API :
AppConfig.apiBaseUrl(initialisé dansmain()viaAppConfig.initialize()). Utilisé parApiClient(DiobaseUrl). - Keycloak :
AppConfig.keycloakBaseUrl,keycloakRealmUrl,keycloakTokenUrl. - Toutes les requêtes passent par le même
ApiClient(token, refresh, timeouts).
2. Membres (Annuaire)
| Backend (MembreSummaryResponse / PagedResponse) | Mobile (MembreCompletModel / repository) |
|---|---|
data (liste), total, page, size, totalPages |
_parseMembreSearchResult lit data, total (num→int), page, size, totalPages |
associationNom |
Normalisé → organisationNom dans _normalizeAndParseMembre |
statutCompte ("ACTIF", etc.) |
Normalisé → statut (enum StatutMembre) |
photoUrl (MembreResponse détail) |
Normalisé → photo si absent |
id, organisationId (UUID) |
Convertis en String avant fromJson |
nom, prenom, email requis |
Modèle : champs requis ; summary backend les envoie toujours |
- Liste paginée : GET
/api/membres?page=&size=→ réponsePagedResponseavecdata,total,page,size,totalPages. - Recherche : GET
/api/membres/recherche?q=&page=&size=→ liste ou même structure paginée selon backend. - Affichage annuaire :
members_page_wrapperconvertitMembreCompletModelenMapavecstatus= libellé français (Actif, En attente, etc.) via_mapStatutToString(statut).
3. Cotisations (Contributions)
- Mes cotisations : GET
/api/cotisations/mes-cotisations?page=&size=→ backend renvoie une liste (pas un objet paginé). Le repository gèredata is List. - En attente : GET
/api/cotisations/mes-cotisations/en-attente→ liste. Le repository accepte aussidata['data']oudata['content']si le format change. - Modèle :
ContributionModelavecid,statut,montantDu,montantPaye,dateEcheance,nomMembre, etc. alignés sur les champs backend. Côté mobile,membreNomutilisenomMembreavec fallback surnomCompletMembre(Summary vs Response).
4. Épargne
- Comptes : GET
/api/v1/epargne/comptes/mes-comptes→ liste de comptes.CompteEpargneModel:id,membreId,organisationIdenString(backend UUID sérialisé). - Transactions : GET
/api/v1/epargne/transactions/compte/{compteId}→ liste.TransactionEpargneModel.fromJsonavec_toDoublepour montants. - Tous les IDs (compte, membre, org) sont traités en
Stringcôté mobile (toString()si besoin).
5. Organisations
- Mes organisations : GET
/api/organisations/mes→ liste.OrganizationModelavecid,nom,nomCourt, etc. - Liste (admin) : GET
/api/organisations?page=&size=→ liste ou paginée selon endpoint. Repository parseresponse.data as Listou structure paginée.
6. Admin utilisateurs (SUPER_ADMIN)
- Liste : GET
/api/admin/users?page=&size=&search=→ UnionFlow renvoieUserSearchResultDTO(proxy lions-user-manager). Structure vérifiée danslions-user-manager-server-api:- UserSearchResultDTO :
users(List<UserDTO>),totalCount(Long),currentPage(Integer),pageSize(Integer),totalPages(Integer), plus optionnels (hasNextPage,criteria,executionTimeMs, etc.). - UserDTO (BaseDTO + champs) :
id,username,email,prenom,nom,enabled,realmRoles(List<String>),statut,dateCreation, etc. - Le repository mobile lit
data['users'],totalCount,currentPage,pageSize,totalPages(avec castnum→ int) et parse chaque élément avecAdminUserModel.fromJson. Alignement confirmé.
- UserSearchResultDTO :
- Associer organisation : POST
/api/admin/associer-organisationavec body{ "email", "organisationId" }.
7. Dashboard
- Avec organisation : appel avec
organizationIdetuserId(chaînes).DashboardEntity/DashboardStatsModelalignés sur les réponses backend. - Membre sans org : GET
/api/dashboard/membre/me→MembreDashboardSyntheseModel, mappé vers la mêmeDashboardEntitypour réutilisation UI.
8. Bonnes pratiques
- IDs : toujours normaliser en
Stringcôté mobile (.toString()) pour UUID backend. - Pagination : préférer
(data['total'] as num?)?.toInt()pour accepterintoudoubleselon la sérialisation JSON. - Statut / libellé : backend envoie souvent
statutCompte+statutCompteLibelle; le mobile peut normaliserstatutCompte→statut(enum) et utiliser les libellés pour l’affichage. - Noms de champs : garder une seule normalisation dans le repository (ex.
_normalizeAndParseMembre) pour éviter les doublons (associationNom, photoUrl, statutCompte, etc.).
9. Vérifications effectuées
- Membres : PagedResponse
data/total/page/size/totalPagesalignés ; normalisation associationNom, statutCompte, photoUrl, id/organisationId. - Cotisations : liste directe pour mes-cotisations et en-attente.
- Épargne : IDs en string, montants avec _toDouble.
- Config : une seule base URL et un seul ApiClient.