Refactoring - Version stable

This commit is contained in:
dahoud
2026-03-28 14:21:30 +00:00
parent 00b981c510
commit a740c172ef
4402 changed files with 88517 additions and 1555 deletions

View File

@@ -214,7 +214,7 @@ public class MembreService {
* Sinon retourne Optional.empty() pour indiquer "tous les membres".
*/
private Optional<Set<UUID>> getOrganisationIdsForCurrentUserIfAdminOrg() {
if (securityIdentity == null || securityIdentity.getPrincipal() == null) return Optional.empty();
if (securityIdentity.getPrincipal() == null) return Optional.empty();
Set<String> roles = securityIdentity.getRoles();
if (roles == null) return Optional.empty();
boolean adminOrg = roles.contains("ADMIN_ORGANISATION");
@@ -490,71 +490,65 @@ public class MembreService {
}
}
try {
// Construction de la requête dynamique
StringBuilder queryBuilder = new StringBuilder("SELECT m FROM Membre m WHERE 1=1");
Map<String, Object> parameters = new HashMap<>();
// Construction de la requête dynamique
StringBuilder queryBuilder = new StringBuilder("SELECT m FROM Membre m WHERE 1=1");
Map<String, Object> parameters = new HashMap<>();
// Ajout des critères de recherche
addSearchCriteria(queryBuilder, parameters, criteria);
// Ajout des critères de recherche
addSearchCriteria(queryBuilder, parameters, criteria);
// Requête pour compter le total
String countQuery = queryBuilder
.toString()
.replace("SELECT m FROM Membre m", "SELECT COUNT(m) FROM Membre m");
// Requête pour compter le total
String countQuery = queryBuilder
.toString()
.replace("SELECT m FROM Membre m", "SELECT COUNT(m) FROM Membre m");
// Exécution de la requête de comptage
TypedQuery<Long> countQueryTyped = entityManager.createQuery(countQuery, Long.class);
for (Map.Entry<String, Object> param : parameters.entrySet()) {
countQueryTyped.setParameter(param.getKey(), param.getValue());
}
long totalElements = countQueryTyped.getSingleResult();
if (totalElements == 0) {
return MembreSearchResultDTO.empty(criteria, page.size, page.index);
}
// Ajout du tri et pagination
String finalQuery = queryBuilder.toString();
if (sort != null) {
finalQuery += " ORDER BY " + buildOrderByClause(sort);
}
// Exécution de la requête principale
TypedQuery<Membre> queryTyped = entityManager.createQuery(finalQuery, Membre.class);
for (Map.Entry<String, Object> param : parameters.entrySet()) {
queryTyped.setParameter(param.getKey(), param.getValue());
}
queryTyped.setFirstResult(page.index * page.size);
queryTyped.setMaxResults(page.size);
List<Membre> membres = queryTyped.getResultList();
// Conversion en SummaryResponses
List<MembreSummaryResponse> membresDTO = convertToSummaryResponseList(membres);
// Calcul des statistiques
MembreSearchResultDTO.SearchStatistics statistics = calculateSearchStatistics(membres);
// Construction du résultat
MembreSearchResultDTO result = MembreSearchResultDTO.builder()
.membres(membresDTO)
.totalElements(totalElements)
.totalPages((int) Math.ceil((double) totalElements / page.size))
.currentPage(page.index)
.pageSize(page.size)
.criteria(criteria)
.statistics(statistics)
.build();
// Calcul des indicateurs de pagination
result.calculatePaginationFlags();
return result;
} catch (Exception e) {
LOG.errorf(e, "Erreur lors de la recherche avancée de membres");
throw new RuntimeException("Erreur lors de la recherche avancée", e);
// Exécution de la requête de comptage
TypedQuery<Long> countQueryTyped = entityManager.createQuery(countQuery, Long.class);
for (Map.Entry<String, Object> param : parameters.entrySet()) {
countQueryTyped.setParameter(param.getKey(), param.getValue());
}
long totalElements = countQueryTyped.getSingleResult();
if (totalElements == 0) {
return MembreSearchResultDTO.empty(criteria, page.size, page.index);
}
// Ajout du tri et pagination
String finalQuery = queryBuilder.toString();
if (sort != null) {
finalQuery += " ORDER BY " + buildOrderByClause(sort);
}
// Exécution de la requête principale
TypedQuery<Membre> queryTyped = entityManager.createQuery(finalQuery, Membre.class);
for (Map.Entry<String, Object> param : parameters.entrySet()) {
queryTyped.setParameter(param.getKey(), param.getValue());
}
queryTyped.setFirstResult(page.index * page.size);
queryTyped.setMaxResults(page.size);
List<Membre> membres = queryTyped.getResultList();
// Conversion en SummaryResponses
List<MembreSummaryResponse> membresDTO = convertToSummaryResponseList(membres);
// Calcul des statistiques
MembreSearchResultDTO.SearchStatistics statistics = calculateSearchStatistics(membres);
// Construction du résultat
MembreSearchResultDTO result = MembreSearchResultDTO.builder()
.membres(membresDTO)
.totalElements(totalElements)
.totalPages((int) Math.ceil((double) totalElements / page.size))
.currentPage(page.index)
.pageSize(page.size)
.criteria(criteria)
.statistics(statistics)
.build();
// Calcul des indicateurs de pagination
result.calculatePaginationFlags();
return result;
}
/** Ajoute les critères de recherche à la requête */
@@ -649,7 +643,7 @@ public class MembreService {
/** Construit la clause ORDER BY à partir du Sort */
private String buildOrderByClause(Sort sort) {
if (sort == null || sort.getColumns().isEmpty()) {
if (sort.getColumns().isEmpty()) {
return "m.nom ASC";
}
@@ -776,12 +770,12 @@ public class MembreService {
* @return Données binaires du fichier Excel
*/
public byte[] exporterMembresSelectionnes(List<UUID> membreIds, String format) {
LOG.infof("Export de %d membres sélectionnés - format: %s", membreIds.size(), format);
if (membreIds == null || membreIds.isEmpty()) {
throw new IllegalArgumentException("La liste des membres ne peut pas être vide");
}
LOG.infof("Export de %d membres sélectionnés - format: %s", membreIds.size(), format);
// Récupérer les membres
List<Membre> membres = membreIds.stream()
.map(id -> membreRepository.findByIdOptional(id))