Refactor complet : fusion de Conversation + Message en un module Messaging unique avec ContactPolicy (règles qui-peut-parler-à-qui) et MemberBlock (blocages utilisateur). - Migration V28 : tables conversations/conversation_participants/messages/ contact_policies/member_blocks - Nouvelles entités : ContactPolicy, ConversationParticipant, MemberBlock (Conversation/Message mises à jour avec relations) - Nouvelles repositories : ContactPolicyRepository, ConversationParticipantRepository, MemberBlockRepository - MessagingResource (nouveau) remplace ConversationResource + MessageResource - MessagingService (nouveau) remplace ConversationService + MessageService avec vérifications appartenance org + policies + blocages avant envoi - Anciens fichiers Conversation/Message Resource/Service/Tests supprimés
92 lines
2.8 KiB
Java
92 lines
2.8 KiB
Java
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.
|
|
*
|
|
* <p>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.
|
|
*
|
|
* <p>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;
|
|
}
|
|
}
|
|
}
|