feat: PHASE 1 - Adresses et Rôles/Permissions

PHASE 1.1 - Entité Adresse:
- Création entité Adresse avec types (SIEGE_SOCIAL, BUREAU, DOMICILE, AUTRE)
- Relations flexibles: Organisation, Membre, Evenement
- Enum TypeAdresse dans module API (DRY/WOU)
- Repository et Service AdresseService
- Relations bidirectionnelles mises à jour

PHASE 1.2 - Système Rôles et Permissions:
- Entité Role avec types (SYSTEME, ORGANISATION, PERSONNALISE)
- Entité Permission avec structure MODULE > RESSOURCE > ACTION
- Tables de liaison MembreRole et RolePermission
- Repositories pour toutes les entités
- Services RoleService et PermissionService
- Relations bidirectionnelles dans Membre

Respect strict DRY/WOU:
- Enums dans module API réutilisables
- Patterns de service cohérents
- Relations JPA standardisées
This commit is contained in:
dahoud
2025-11-30 01:31:12 +00:00
parent e26ae459e4
commit f930ae7341
25 changed files with 3583 additions and 91 deletions

View File

@@ -42,8 +42,6 @@ public class MembreInscriptionBean implements Serializable {
// Propriétés système
private String numeroGenere;
private String membreIdString; // ID du membre en mode modification
private boolean modeModification = false;
// Informations personnelles
private String prenom;
@@ -105,10 +103,8 @@ public class MembreInscriptionBean implements Serializable {
@PostConstruct
public void init() {
// Générer un numéro de membre automatiquement (seulement en mode création)
if (!modeModification) {
this.numeroGenere = "M" + System.currentTimeMillis();
}
// Générer un numéro de membre automatiquement
this.numeroGenere = "M" + System.currentTimeMillis();
// Charger les organisations actives
try {
@@ -120,61 +116,6 @@ public class MembreInscriptionBean implements Serializable {
}
}
// Getters/Setters pour mode modification
public String getMembreIdString() {
return membreIdString;
}
public void setMembreIdString(String membreIdString) {
this.membreIdString = membreIdString;
}
public boolean isModeModification() {
return modeModification;
}
// Méthode appelée par f:viewAction pour charger le membre en mode modification
public void chargerMembreSiModification() {
if (membreIdString != null && !membreIdString.isEmpty()) {
try {
java.util.UUID id = java.util.UUID.fromString(membreIdString);
MembreDTO membre = membreService.obtenirParId(id);
if (membre != null) {
modeModification = true;
// Remplir tous les champs avec les données du membre
this.numeroGenere = membre.getNumeroMembre();
this.prenom = membre.getPrenom();
this.nom = membre.getNom();
this.email = membre.getEmail();
this.telephone = membre.getTelephone();
this.dateNaissance = membre.getDateNaissance();
this.adresse = membre.getAdresse();
this.ville = membre.getVille();
this.nationalite = membre.getNationalite();
this.profession = membre.getProfession();
this.situationMatrimoniale = membre.getStatutMatrimonial();
this.organisationId = membre.getAssociationId() != null ? membre.getAssociationId().toString() : null;
// TODO: Charger les autres champs si disponibles
LOGGER.info("Membre chargé pour modification: " + membre.getNomComplet());
} else {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur", "Membre introuvable"));
}
} catch (IllegalArgumentException e) {
LOGGER.severe("ID invalide: " + membreIdString);
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur", "Identifiant de membre invalide"));
} catch (Exception e) {
LOGGER.severe("Erreur lors du chargement du membre: " + e.getMessage());
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur",
"Impossible de charger le membre: " + e.getMessage()));
}
}
}
// Actions
public String inscrire() {
try {

View File

@@ -196,15 +196,15 @@ public class MembreListeBean implements Serializable {
}
// Propriétés pour la page de modification
private String membreSelectionneIdString;
private UUID membreSelectionneId;
private MembreDTO membreSelectionne;
public String getMembreSelectionneIdString() {
return membreSelectionneIdString;
public UUID getMembreSelectionneId() {
return membreSelectionneId;
}
public void setMembreSelectionneIdString(String membreSelectionneIdString) {
this.membreSelectionneIdString = membreSelectionneIdString;
public void setMembreSelectionneId(UUID membreSelectionneId) {
this.membreSelectionneId = membreSelectionneId;
}
public MembreDTO getMembreSelectionne() {
@@ -216,16 +216,10 @@ public class MembreListeBean implements Serializable {
}
public void chargerMembreSelectionne() {
if (membreSelectionneIdString != null && !membreSelectionneIdString.isEmpty()) {
if (membreSelectionneId != null) {
try {
UUID id = UUID.fromString(membreSelectionneIdString);
membreSelectionne = membreService.obtenirParId(id);
membreSelectionne = membreService.obtenirParId(membreSelectionneId);
LOGGER.info("Membre chargé pour modification: " + membreSelectionne.getNomComplet());
} catch (IllegalArgumentException e) {
LOGGER.severe("ID invalide: " + membreSelectionneIdString);
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur",
"Identifiant de membre invalide"));
} catch (Exception e) {
LOGGER.severe("Erreur lors du chargement du membre: " + e.getMessage());
FacesContext.getCurrentInstance().addMessage(null,