From cbf911caa8902ef34a209dc4e315c012e59a8e24 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Mon, 16 Mar 2026 06:35:30 +0000 Subject: [PATCH] =?UTF-8?q?feat(api):=20DTOs=20et=20enums=20pour=20syst?= =?UTF-8?q?=C3=A8me=20de=20messagerie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout des DTOs et enums nécessaires au système de communication/messaging. Enums (communication): - ConversationType: INDIVIDUAL, GROUP, BROADCAST, ANNOUNCEMENT - MessageType: INDIVIDUAL, BROADCAST, TARGETED, SYSTEM - MessageStatus: SENT, DELIVERED, READ, FAILED - MessagePriority: NORMAL, HIGH, URGENT DTOs Request: - CreateConversationRequest: name, description, type, participantIds, organisationId - SendMessageRequest: conversationId, content, type, priority, recipientIds, etc. DTOs Response: - ConversationResponse: données complètes conversation + lastMessage + unreadCount - MessageResponse: données complètes message Tâche: #60 - Communication Backend (Part 1/2 - API) Co-Authored-By: Claude Sonnet 4.5 --- .../request/CreateConversationRequest.java | 27 +++++++++++++ .../request/SendMessageRequest.java | 29 ++++++++++++++ .../response/ConversationResponse.java | 33 ++++++++++++++++ .../response/MessageResponse.java | 39 +++++++++++++++++++ .../enums/communication/ConversationType.java | 30 ++++++++++++++ .../enums/communication/MessagePriority.java | 25 ++++++++++++ .../enums/communication/MessageStatus.java | 30 ++++++++++++++ .../api/enums/communication/MessageType.java | 30 ++++++++++++++ 8 files changed, 243 insertions(+) create mode 100644 src/main/java/dev/lions/unionflow/server/api/dto/communication/request/CreateConversationRequest.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/dto/communication/request/SendMessageRequest.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/dto/communication/response/ConversationResponse.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/dto/communication/response/MessageResponse.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/enums/communication/ConversationType.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/enums/communication/MessagePriority.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageStatus.java create mode 100644 src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageType.java diff --git a/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/CreateConversationRequest.java b/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/CreateConversationRequest.java new file mode 100644 index 0000000..7dabd92 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/CreateConversationRequest.java @@ -0,0 +1,27 @@ +package dev.lions.unionflow.server.api.dto.communication.request; + +import dev.lions.unionflow.server.api.enums.communication.ConversationType; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Builder; + +import java.util.List; +import java.util.UUID; + +/** + * Request DTO pour créer une conversation + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +@Builder +public record CreateConversationRequest( + @NotBlank @Size(max = 255) String name, + @Size(max = 1000) String description, + @NotNull ConversationType type, + @NotEmpty List participantIds, + UUID organisationId +) {} diff --git a/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/SendMessageRequest.java b/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/SendMessageRequest.java new file mode 100644 index 0000000..c98f7f5 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/dto/communication/request/SendMessageRequest.java @@ -0,0 +1,29 @@ +package dev.lions.unionflow.server.api.dto.communication.request; + +import dev.lions.unionflow.server.api.enums.communication.MessagePriority; +import dev.lions.unionflow.server.api.enums.communication.MessageType; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Builder; + +import java.util.List; +import java.util.UUID; + +/** + * Request DTO pour envoyer un message + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +@Builder +public record SendMessageRequest( + @NotNull UUID conversationId, + @NotBlank @Size(max = 10000) String content, + MessageType type, + MessagePriority priority, + List recipientIds, + List recipientRoles, + List attachments +) {} diff --git a/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/ConversationResponse.java b/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/ConversationResponse.java new file mode 100644 index 0000000..96fb6a1 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/ConversationResponse.java @@ -0,0 +1,33 @@ +package dev.lions.unionflow.server.api.dto.communication.response; + +import dev.lions.unionflow.server.api.enums.communication.ConversationType; +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +/** + * Response DTO pour Conversation + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +@Builder +public record ConversationResponse( + UUID id, + String name, + String description, + ConversationType type, + List participantIds, + UUID organisationId, + MessageResponse lastMessage, + int unreadCount, + boolean isMuted, + boolean isPinned, + boolean isArchived, + LocalDateTime createdAt, + LocalDateTime updatedAt, + String avatarUrl +) {} diff --git a/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/MessageResponse.java b/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/MessageResponse.java new file mode 100644 index 0000000..1e7215f --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/dto/communication/response/MessageResponse.java @@ -0,0 +1,39 @@ +package dev.lions.unionflow.server.api.dto.communication.response; + +import dev.lions.unionflow.server.api.enums.communication.MessagePriority; +import dev.lions.unionflow.server.api.enums.communication.MessageStatus; +import dev.lions.unionflow.server.api.enums.communication.MessageType; +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +/** + * Response DTO pour Message + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +@Builder +public record MessageResponse( + UUID id, + UUID conversationId, + UUID senderId, + String senderName, + String senderAvatar, + String content, + MessageType type, + MessageStatus status, + MessagePriority priority, + List recipientIds, + List recipientRoles, + UUID organisationId, + LocalDateTime createdAt, + LocalDateTime readAt, + List attachments, + boolean isEdited, + LocalDateTime editedAt, + boolean isDeleted +) {} diff --git a/src/main/java/dev/lions/unionflow/server/api/enums/communication/ConversationType.java b/src/main/java/dev/lions/unionflow/server/api/enums/communication/ConversationType.java new file mode 100644 index 0000000..1429c45 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/enums/communication/ConversationType.java @@ -0,0 +1,30 @@ +package dev.lions.unionflow.server.api.enums.communication; + +/** + * Type de conversation dans le système de messagerie + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +public enum ConversationType { + /** + * Conversation individuelle (1-1) + */ + INDIVIDUAL, + + /** + * Conversation de groupe + */ + GROUP, + + /** + * Canal broadcast (lecture seule pour la plupart) + */ + BROADCAST, + + /** + * Canal d'annonces organisation + */ + ANNOUNCEMENT +} diff --git a/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessagePriority.java b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessagePriority.java new file mode 100644 index 0000000..d6578d8 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessagePriority.java @@ -0,0 +1,25 @@ +package dev.lions.unionflow.server.api.enums.communication; + +/** + * Priorité du message + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +public enum MessagePriority { + /** + * Priorité normale + */ + NORMAL, + + /** + * Priorité élevée (important) + */ + HIGH, + + /** + * Priorité urgente (critique) + */ + URGENT +} diff --git a/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageStatus.java b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageStatus.java new file mode 100644 index 0000000..8f35701 --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageStatus.java @@ -0,0 +1,30 @@ +package dev.lions.unionflow.server.api.enums.communication; + +/** + * Statut de lecture du message + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +public enum MessageStatus { + /** + * Envoyé mais non lu + */ + SENT, + + /** + * Livré (reçu par le serveur) + */ + DELIVERED, + + /** + * Lu par le destinataire + */ + READ, + + /** + * Échec d'envoi + */ + FAILED +} diff --git a/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageType.java b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageType.java new file mode 100644 index 0000000..24ae80c --- /dev/null +++ b/src/main/java/dev/lions/unionflow/server/api/enums/communication/MessageType.java @@ -0,0 +1,30 @@ +package dev.lions.unionflow.server.api.enums.communication; + +/** + * Type de message + * + * @author UnionFlow Team + * @version 1.0 + * @since 2026-03-16 + */ +public enum MessageType { + /** + * Message individuel (membre à membre) + */ + INDIVIDUAL, + + /** + * Broadcast organisation (OrgAdmin → tous) + */ + BROADCAST, + + /** + * Message ciblé par rôle (Moderator → groupe) + */ + TARGETED, + + /** + * Notification système + */ + SYSTEM +}