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; private UUID id;
@NotBlank(message = "Le numéro de membre est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.FullRegistration.class}) /** Numéro unique du membre - OPTIONNEL (généré automatiquement si non fourni) */
@ValidMemberNumber(groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.FullRegistration.class}) @Size(max = 50, message = "Le numéro de membre ne peut pas dépasser 50 caractères")
private String numeroMembre; private String numeroMembre;
@NotBlank(message = "Le nom est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class}) /** Nom de famille du membre - OBLIGATOIRE */
@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}) @NotBlank(message = "Le nom est obligatoire")
@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}) @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; private String nom;
@NotBlank(message = "Le prénom est obligatoire", groups = {ValidationGroups.CreateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class}) /** Prénom du membre - OBLIGATOIRE */
@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}) @NotBlank(message = "Le prénom est obligatoire")
@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}) @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; private String prenom;
@Email(message = "Format d'email invalide", groups = {ValidationGroups.CreateMember.class, ValidationGroups.UpdateMember.class, ValidationGroups.QuickRegistration.class, ValidationGroups.FullRegistration.class}) /** Adresse email du membre - OBLIGATOIRE */
@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}) @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; 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; 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") @JsonFormat(pattern = "yyyy-MM-dd")
@Past(message = "La date de naissance doit être dans le passé") @Past(message = "La date de naissance doit être dans le passé")
private LocalDate dateNaissance; 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") @Size(max = 20, message = "Le type d'identité ne peut pas dépasser 20 caractères")
private String typeIdentite; 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") @Size(max = 255, message = "L'URL de la photo ne peut pas dépasser 255 caractères")
private String photoUrl; private String photoUrl;
/** Statut du membre - OBLIGATOIRE */
@NotNull(message = "Le statut est obligatoire") @NotNull(message = "Le statut est obligatoire")
private String statut; private String statut;
/** Identifiant de l'association - OBLIGATOIRE */
@NotNull(message = "L'association est obligatoire") @NotNull(message = "L'association est obligatoire")
private UUID associationId; private UUID associationId;
/** Nom de l'association (lecture seule) */
private String associationNom; private String associationNom;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @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; 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") @Size(max = 50, message = "Le numéro de membre ne peut pas dépasser 50 caractères")
private String numeroMembre; private String numeroMembre;
/** Nom de famille du membre */ /** Nom de famille du membre - OBLIGATOIRE */
@NotBlank(message = "Le nom" + ValidationConstants.OBLIGATOIRE_MESSAGE) @NotBlank(message = "Le nom" + ValidationConstants.OBLIGATOIRE_MESSAGE)
@Size( @Size(
min = ValidationConstants.NOM_PRENOM_MIN_LENGTH, 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") message = "Le nom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String nom; private String nom;
/** Prénom du membre */ /** Prénom du membre - OBLIGATOIRE */
@NotBlank(message = "Le prénom" + ValidationConstants.OBLIGATOIRE_MESSAGE) @NotBlank(message = "Le prénom" + ValidationConstants.OBLIGATOIRE_MESSAGE)
@Size( @Size(
min = ValidationConstants.NOM_PRENOM_MIN_LENGTH, 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") message = "Le prénom ne peut contenir que des lettres, espaces, tirets et apostrophes")
private String prenom; 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) @Email(message = ValidationConstants.EMAIL_FORMAT_MESSAGE)
@Size( @Size(
max = ValidationConstants.EMAIL_MAX_LENGTH, max = ValidationConstants.EMAIL_MAX_LENGTH,
message = ValidationConstants.EMAIL_SIZE_MESSAGE) message = ValidationConstants.EMAIL_SIZE_MESSAGE)
private String email; 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") @Size(max = 20, message = "Le téléphone ne peut pas dépasser 20 caractères")
private String telephone; 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") @JsonFormat(pattern = "yyyy-MM-dd")
@Past(message = "La date de naissance doit être dans le passé") @Past(message = "La date de naissance doit être dans le passé")
private LocalDate dateNaissance; 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") @Size(max = 20, message = "Le type d'identité ne peut pas dépasser 20 caractères")
private String typeIdentite; private String typeIdentite;
/** Statut du membre */ /** Statut du membre - OBLIGATOIRE */
@NotNull(message = "Le statut est obligatoire") @NotNull(message = "Le statut est obligatoire")
private StatutMembre statut; 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") @NotNull(message = "L'association est obligatoire")
private UUID associationId; private UUID associationId;
/** Nom de l'association (lecture seule) */ /** Nom de l'association (lecture seule) */
private String associationNom; 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") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate dateAdhesion; private LocalDate dateAdhesion;