package dev.lions.unionflow.server.entity; import dev.lions.unionflow.server.api.enums.messagerie.TypePolitiqueCommunication; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.Index; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.PrePersist; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** * Politique de communication d'une organisation. * *

Chaque organisation possède exactement une politique, créée automatiquement * lors de la création de l'organisation avec les valeurs par défaut. * L'administrateur peut la modifier via l'API. * *

Table : {@code contact_policies} * * @author UnionFlow Team * @version 4.0 * @since 2026-04-13 */ @Entity @Table( name = "contact_policies", indexes = { @Index(name = "idx_contact_policies_org", columnList = "organisation_id") }, uniqueConstraints = { @UniqueConstraint(name = "uk_contact_policy_org", columnNames = "organisation_id") } ) @Data @NoArgsConstructor @AllArgsConstructor @Builder @EqualsAndHashCode(callSuper = true) public class ContactPolicy extends BaseEntity { @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "organisation_id", nullable = false) private Organisation organisation; @Enumerated(EnumType.STRING) @Builder.Default @Column(name = "type_politique", nullable = false, length = 30) private TypePolitiqueCommunication typePolitique = TypePolitiqueCommunication.OUVERT; @Builder.Default @Column(name = "autoriser_membre_vers_membre", nullable = false) private Boolean autoriserMembreVersMembre = Boolean.TRUE; @Builder.Default @Column(name = "autoriser_membre_vers_role", nullable = false) private Boolean autoriserMembreVersRole = Boolean.TRUE; @Builder.Default @Column(name = "autoriser_notes_vocales", nullable = false) private Boolean autoriserNotesVocales = Boolean.TRUE; @PrePersist @Override protected void onCreate() { super.onCreate(); if (typePolitique == null) { typePolitique = TypePolitiqueCommunication.OUVERT; } if (autoriserMembreVersMembre == null) { autoriserMembreVersMembre = Boolean.TRUE; } if (autoriserMembreVersRole == null) { autoriserMembreVersRole = Boolean.TRUE; } if (autoriserNotesVocales == null) { autoriserNotesVocales = Boolean.TRUE; } } }