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

@@ -0,0 +1,82 @@
package dev.lions.unionflow.server.api.dto.adresse;
import dev.lions.unionflow.server.api.dto.base.BaseDTO;
import dev.lions.unionflow.server.api.enums.adresse.TypeAdresse;
import jakarta.validation.constraints.DecimalMax;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
/**
* DTO pour la gestion des adresses
*
* @author UnionFlow Team
* @version 3.0
* @since 2025-01-29
*/
@Getter
@Setter
public class AdresseDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
/** Type d'adresse */
@NotNull(message = "Le type d'adresse est obligatoire")
private TypeAdresse typeAdresse;
/** Adresse complète */
private String adresse;
/** Complément d'adresse */
private String complementAdresse;
/** Code postal */
private String codePostal;
/** Ville */
private String ville;
/** Région */
private String region;
/** Pays */
private String pays;
/** Latitude */
@DecimalMin(value = "-90.0", message = "La latitude doit être comprise entre -90 et 90")
@DecimalMax(value = "90.0", message = "La latitude doit être comprise entre -90 et 90")
@Digits(integer = 3, fraction = 6)
private BigDecimal latitude;
/** Longitude */
@DecimalMin(value = "-180.0", message = "La longitude doit être comprise entre -180 et 180")
@DecimalMax(value = "180.0", message = "La longitude doit être comprise entre -180 et 180")
@Digits(integer = 3, fraction = 6)
private BigDecimal longitude;
/** Adresse principale */
private Boolean principale;
/** Libellé personnalisé */
private String libelle;
/** Notes et commentaires */
private String notes;
/** ID de l'organisation (si adresse d'organisation) */
private UUID organisationId;
/** ID du membre (si adresse de membre) */
private UUID membreId;
/** ID de l'événement (si adresse d'événement) */
private UUID evenementId;
/** Adresse complète formatée (calculée) */
private String adresseComplete;
}

View File

@@ -0,0 +1,26 @@
package dev.lions.unionflow.server.api.enums.adresse;
/**
* Énumération des types d'adresse dans UnionFlow
*
* @author UnionFlow Team
* @version 3.0
* @since 2025-01-29
*/
public enum TypeAdresse {
SIEGE_SOCIAL("Siège Social"),
BUREAU("Bureau"),
DOMICILE("Domicile"),
AUTRE("Autre");
private final String libelle;
TypeAdresse(String libelle) {
this.libelle = libelle;
}
public String getLibelle() {
return libelle;
}
}