feat(api): DTOs et enums pour système de messagerie

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 <noreply@anthropic.com>
This commit is contained in:
dahoud
2026-03-16 06:35:30 +00:00
parent bc7e4b92e9
commit cbf911caa8
8 changed files with 243 additions and 0 deletions

View File

@@ -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<UUID> participantIds,
UUID organisationId
) {}

View File

@@ -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<UUID> recipientIds,
List<String> recipientRoles,
List<String> attachments
) {}

View File

@@ -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<UUID> participantIds,
UUID organisationId,
MessageResponse lastMessage,
int unreadCount,
boolean isMuted,
boolean isPinned,
boolean isArchived,
LocalDateTime createdAt,
LocalDateTime updatedAt,
String avatarUrl
) {}

View File

@@ -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<UUID> recipientIds,
List<String> recipientRoles,
UUID organisationId,
LocalDateTime createdAt,
LocalDateTime readAt,
List<String> attachments,
boolean isEdited,
LocalDateTime editedAt,
boolean isDeleted
) {}

View File

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

View File

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

View File

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

View File

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