feat: BackupService real pg_dump, OrganisationService region stats, SystemConfigService overrides
- BackupService: DB-persisted metadata (BackupRecord/BackupConfig entities + V16 Flyway migration), real pg_dump execution via ProcessBuilder, soft-delete on deleteBackup, pg_restore manual guidance - OrganisationService: repartitionRegion now queries Adresse entities (was Map.of() stub) - SystemConfigService: in-memory config overrides via AtomicReference (no DB dependency) - SystemMetricsService: null-guard on MemoryMXBean in getSystemStatus() (fixes test NPE) - Souscription workflow: SouscriptionService, SouscriptionResource, FormuleAbonnementRepository, V11 Flyway migration, admin REST clients - Flyway V8-V15: notes membres, types référence, type orga constraint, seed roles, première connexion, Wave checkout URL, Wave telephone column length fix - .gitignore: added uploads/ and .claude/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import dev.lions.unionflow.server.api.dto.organisation.response.OrganisationSumm
|
||||
import dev.lions.unionflow.server.api.enums.membre.StatutMembre;
|
||||
import dev.lions.unionflow.server.entity.Membre;
|
||||
import dev.lions.unionflow.server.entity.MembreOrganisation;
|
||||
import dev.lions.unionflow.server.repository.AdresseRepository;
|
||||
import dev.lions.unionflow.server.repository.EvenementRepository;
|
||||
import dev.lions.unionflow.server.repository.MembreOrganisationRepository;
|
||||
import dev.lions.unionflow.server.repository.MembreRepository;
|
||||
@@ -56,6 +57,9 @@ public class OrganisationService {
|
||||
@Inject
|
||||
MembreOrganisationRepository membreOrganisationRepository;
|
||||
|
||||
@Inject
|
||||
AdresseRepository adresseRepository;
|
||||
|
||||
@Inject
|
||||
EvenementRepository evenementRepository;
|
||||
|
||||
@@ -159,7 +163,11 @@ public class OrganisationService {
|
||||
organisation.setTelephone(organisationMiseAJour.getTelephone());
|
||||
organisation.setTelephoneSecondaire(organisationMiseAJour.getTelephoneSecondaire());
|
||||
organisation.setEmailSecondaire(organisationMiseAJour.getEmailSecondaire());
|
||||
// Adresse gérée via l'entité Adresse (Cat.2)
|
||||
organisation.setAdresse(organisationMiseAJour.getAdresse());
|
||||
organisation.setVille(organisationMiseAJour.getVille());
|
||||
organisation.setRegion(organisationMiseAJour.getRegion());
|
||||
organisation.setPays(organisationMiseAJour.getPays());
|
||||
organisation.setCodePostal(organisationMiseAJour.getCodePostal());
|
||||
organisation.setLatitude(organisationMiseAJour.getLatitude());
|
||||
organisation.setLongitude(organisationMiseAJour.getLongitude());
|
||||
organisation.setSiteWeb(organisationMiseAJour.getSiteWeb());
|
||||
@@ -309,6 +317,8 @@ public class OrganisationService {
|
||||
.dateAdhesion(LocalDate.now())
|
||||
.build();
|
||||
membreOrganisationRepository.persist(mo);
|
||||
organisation.ajouterMembre();
|
||||
organisationRepository.persist(organisation);
|
||||
LOG.infof("Utilisateur %s associé à l'organisation %s (MembreOrganisation créé)", emailNorm, organisation.getNom());
|
||||
}
|
||||
|
||||
@@ -481,8 +491,13 @@ public class OrganisationService {
|
||||
.collect(Collectors.groupingBy(
|
||||
o -> o.getTypeOrganisation() != null ? o.getTypeOrganisation() : "NON_DEFINI",
|
||||
Collectors.counting()));
|
||||
// TODO Cat.2 : repartitionRegion via Adresse
|
||||
Map<String, Long> repartitionRegion = Map.of();
|
||||
Map<String, Long> repartitionRegion = adresseRepository
|
||||
.find("organisation IS NOT NULL AND region IS NOT NULL")
|
||||
.list()
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
a -> a.getRegion(),
|
||||
Collectors.counting()));
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("totalAssociations", total);
|
||||
@@ -514,6 +529,11 @@ public class OrganisationService {
|
||||
dto.setTelephone(organisation.getTelephone());
|
||||
dto.setTelephoneSecondaire(organisation.getTelephoneSecondaire());
|
||||
dto.setEmailSecondaire(organisation.getEmailSecondaire());
|
||||
dto.setAdresse(organisation.getAdresse());
|
||||
dto.setVille(organisation.getVille());
|
||||
dto.setRegion(organisation.getRegion());
|
||||
dto.setPays(organisation.getPays());
|
||||
dto.setCodePostal(organisation.getCodePostal());
|
||||
dto.setLatitude(organisation.getLatitude());
|
||||
dto.setLongitude(organisation.getLongitude());
|
||||
dto.setSiteWeb(organisation.getSiteWeb());
|
||||
@@ -648,6 +668,13 @@ public class OrganisationService {
|
||||
.devise(req.devise() != null ? req.devise() : defaultsService.getDevise())
|
||||
.cotisationObligatoire(req.cotisationObligatoire() != null ? req.cotisationObligatoire() : false)
|
||||
.montantCotisationAnnuelle(req.montantCotisationAnnuelle())
|
||||
.adresse(req.adresse())
|
||||
.ville(req.ville())
|
||||
.region(req.region())
|
||||
.pays(req.pays())
|
||||
.codePostal(req.codePostal())
|
||||
.organisationPublique(req.organisationPublique() != null ? req.organisationPublique() : true)
|
||||
.accepteNouveauxMembres(req.accepteNouveauxMembres() != null ? req.accepteNouveauxMembres() : true)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -683,6 +710,13 @@ public class OrganisationService {
|
||||
.devise(req.devise() != null ? req.devise() : defaultsService.getDevise())
|
||||
.cotisationObligatoire(req.cotisationObligatoire() != null ? req.cotisationObligatoire() : false)
|
||||
.montantCotisationAnnuelle(req.montantCotisationAnnuelle())
|
||||
.adresse(req.adresse())
|
||||
.ville(req.ville())
|
||||
.region(req.region())
|
||||
.pays(req.pays())
|
||||
.codePostal(req.codePostal())
|
||||
.organisationPublique(req.organisationPublique() != null ? req.organisationPublique() : true)
|
||||
.accepteNouveauxMembres(req.accepteNouveauxMembres() != null ? req.accepteNouveauxMembres() : true)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user