docs(api): Documentation des champs auto-générés dans MembreDTO

- numeroMembre : Marqué AUTO-GÉNÉRÉ, ne pas afficher dans formulaire création
- dateNaissance : Marquée AUTO-GÉNÉRÉE à il y a 18 ans si non fournie
- dateAdhesion : Marquée AUTO-GÉNÉRÉE à LocalDate.now() si non fournie

Documentation claire pour les développeurs frontend :
- Champs OBLIGATOIRES : nom, prénom, email, statut, associationId
- Champs OPTIONNELS : tous les autres
- Champs AUTO-GÉNÉRÉS : à ne pas afficher dans les formulaires de création

Cette documentation guide la création des formulaires pour ne demander
que les informations essentielles à l'utilisateur.
This commit is contained in:
dahoud
2025-11-29 21:43:24 +00:00
parent 1a31844aed
commit 5db3a5a6c9
2 changed files with 40 additions and 20 deletions

View File

@@ -16,27 +16,33 @@ public class MembreDTO implements Serializable {
private UUID id;
@NotBlank(message = "Le numéro de membre est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.FullRegistration.class})
@ValidMemberNumber(groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.FullRegistration.class})
/** Numéro unique du membre - OPTIONNEL (généré automatiquement si non fourni) */
@Size(max = 50, message = "Le numéro de membre ne peut pas dépasser 50 caractères")
private String numeroMembre;
@NotBlank(message = "Le nom est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
@Size(min = 2, max = 50, message = "Le nom doit contenir entre 2 et 50 caractères", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
@Pattern(regexp = "^[a-zA-ZÀ-ÿ\\s\\-']+$", message = "Le nom ne peut contenir que des lettres, espaces, tirets et apostrophes", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
/** Nom de famille du membre - OBLIGATOIRE */
@NotBlank(message = "Le nom est obligatoire")
@Size(min = 2, max = 50, message = "Le nom doit contenir entre 2 et 50 caractères")
@Pattern(regexp = "^[a-zA-ZÀ-ÿ\\s\\-']+$", message = "Le nom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String nom;
@NotBlank(message = "Le prénom est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
@Size(min = 2, max = 50, message = "Le prénom doit contenir entre 2 et 50 caractères", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
@Pattern(regexp = "^[a-zA-ZÀ-ÿ\\s\\-']+$", message = "Le prénom ne peut contenir que des lettres, espaces, tirets et apostrophes", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
/** Prénom du membre - OBLIGATOIRE */
@NotBlank(message = "Le prénom est obligatoire")
@Size(min = 2, max = 50, message = "Le prénom doit contenir entre 2 et 50 caractères")
@Pattern(regexp = "^[a-zA-ZÀ-ÿ\\s\\-']+$", message = "Le prénom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String prenom;
@Email(message = "Format d'email invalide", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
@Size(max = 100, message = "L'email ne peut pas dépasser 100 caractères", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class})
/** Adresse email du membre - OBLIGATOIRE */
@NotBlank(message = "L'email est obligatoire")
@Email(message = "Format d'email invalide")
@Size(max = 100, message = "L'email ne peut pas dépasser 100 caractères")
private String email;
@ValidPhoneNumber
/** Numéro de téléphone du membre - OPTIONNEL (format flexible) */
@Size(max = 20, message = "Le téléphone ne peut pas dépasser 20 caractères")
private String telephone;
/** Date de naissance du membre - OPTIONNELLE (définie par défaut à il y a 18 ans si non fournie) */
@JsonFormat(pattern = "yyyy-MM-dd")
@Past(message = "La date de naissance doit être dans le passé")
private LocalDate dateNaissance;
@@ -59,15 +65,19 @@ public class MembreDTO implements Serializable {
@Size(max = 20, message = "Le type d'identité ne peut pas dépasser 20 caractères")
private String typeIdentite;
/** URL de la photo de profil - OPTIONNELLE */
@Size(max = 255, message = "L'URL de la photo ne peut pas dépasser 255 caractères")
private String photoUrl;
/** Statut du membre - OBLIGATOIRE */
@NotNull(message = "Le statut est obligatoire")
private String statut;
/** Identifiant de l'association - OBLIGATOIRE */
@NotNull(message = "L'association est obligatoire")
private UUID associationId;
/** Nom de l'association (lecture seule) */
private String associationNom;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

View File

@@ -29,11 +29,14 @@ public class MembreDTO extends BaseDTO {
private static final long serialVersionUID = 1L;
/** Numéro unique du membre (format: UF-YYYY-XXXXXXXX) - Optionnel, peut être généré automatiquement */
/**
* Numéro unique du membre (format: UF-YYYY-XXXXXXXX)
* AUTO-GÉNÉRÉ si non fourni - Ne pas afficher dans le formulaire de création
*/
@Size(max = 50, message = "Le numéro de membre ne peut pas dépasser 50 caractères")
private String numeroMembre;
/** Nom de famille du membre */
/** Nom de famille du membre - OBLIGATOIRE */
@NotBlank(message = "Le nom" + ValidationConstants.OBLIGATOIRE_MESSAGE)
@Size(
min = ValidationConstants.NOM_PRENOM_MIN_LENGTH,
@@ -44,7 +47,7 @@ public class MembreDTO extends BaseDTO {
message = "Le nom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String nom;
/** Prénom du membre */
/** Prénom du membre - OBLIGATOIRE */
@NotBlank(message = "Le prénom" + ValidationConstants.OBLIGATOIRE_MESSAGE)
@Size(
min = ValidationConstants.NOM_PRENOM_MIN_LENGTH,
@@ -55,18 +58,22 @@ public class MembreDTO extends BaseDTO {
message = "Le prénom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String prenom;
/** Adresse email du membre */
/** Adresse email du membre - OBLIGATOIRE */
@NotBlank(message = "L'email" + ValidationConstants.OBLIGATOIRE_MESSAGE)
@Email(message = ValidationConstants.EMAIL_FORMAT_MESSAGE)
@Size(
max = ValidationConstants.EMAIL_MAX_LENGTH,
message = ValidationConstants.EMAIL_SIZE_MESSAGE)
private String email;
/** Numéro de téléphone du membre - Format flexible */
/** Numéro de téléphone du membre - Optionnel, format flexible */
@Size(max = 20, message = "Le téléphone ne peut pas dépasser 20 caractères")
private String telephone;
/** Date de naissance du membre */
/**
* Date de naissance du membre - OPTIONNELLE
* AUTO-GÉNÉRÉE à il y a 18 ans si non fournie - Peut être laissée vide dans le formulaire
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Past(message = "La date de naissance doit être dans le passé")
private LocalDate dateNaissance;
@@ -95,18 +102,21 @@ public class MembreDTO extends BaseDTO {
@Size(max = 20, message = "Le type d'identité ne peut pas dépasser 20 caractères")
private String typeIdentite;
/** Statut du membre */
/** Statut du membre - OBLIGATOIRE */
@NotNull(message = "Le statut est obligatoire")
private StatutMembre statut;
/** Identifiant de l'association à laquelle appartient le membre */
/** Identifiant de l'association à laquelle appartient le membre - OBLIGATOIRE */
@NotNull(message = "L'association est obligatoire")
private UUID associationId;
/** Nom de l'association (lecture seule) */
private String associationNom;
/** Date d'adhésion du membre */
/**
* Date d'adhésion du membre - OPTIONNELLE
* AUTO-GÉNÉRÉE à LocalDate.now() si non fournie - Ne pas afficher dans le formulaire de création
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate dateAdhesion;