package dev.lions.models; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; import java.util.Map; import java.util.Collections; import lombok.Builder; import lombok.Data; import lombok.Setter; /** * Représente un modèle de email à utiliser pour l'envoi de communications. * Cette classe encapsule les informations nécessaires pour générer et envoyer un email. */ @Data @Builder public class EmailTemplate { @NotBlank(message = "L'identifiant du modèle de courriel est obligatoire") private Long id; @NotBlank(message = "Le nom du modèle de courriel est obligatoire") @Size(max = 100, message = "Le nom du modèle ne peut pas dépasser 100 caractères") private String templateName; @NotBlank(message = "L'objet du courriel est obligatoire") @Size(max = 100, message = "L'objet ne peut pas dépasser 100 caractères") private String subject; @NotBlank(message = "Le destinataire du courriel est obligatoire") @Email(message = "Le destinataire doit être une adresse email valide") private String recipient; private Map parameters; @Builder.Default private boolean isActive = true; /** * -- SETTER -- * Met à jour la version du modèle de courriel. * * @param version Nouvelle version */ @Setter @Builder.Default private long version = 0; @NotBlank(message = "Le contenu du courriel est obligatoire") @Size(max = 10000, message = "Le contenu ne peut pas dépasser 10 000 caractères") private String content; /** * Récupère une copie immuable des paramètres. * * @return Paramètres du modèle de courriel */ public Map getParameters() { return Collections.unmodifiableMap(parameters); } /** * Met à jour l'état d'activation du modèle de courriel. * * @param active Nouvel état d'activation */ public void setActive(boolean active) { this.isActive = active; } /** * Vérifie si le modèle de courriel est valide et prêt à l'emploi. * * @return true si le modèle est valide */ public boolean isValid() { return id != null && templateName != null && !templateName.isBlank() && subject != null && !subject.isBlank() && recipient != null && !recipient.isBlank() && content != null && !content.isBlank(); } }