Files
unionflow-server-impl-quarkus/src/main/java/dev/lions/unionflow/server/entity/ContactPolicy.java
dahoud 719d45e1fe feat(messaging): module messagerie unifié avec contact policies + member blocks
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
2026-04-15 20:23:04 +00:00

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;
}
}
}