Files
dahoud 45dcd2171e feat(communication): module messagerie unifié + contact policies + blocages
Aligné avec le backend MessagingResource :
- Nouveau module communication (conversations, messages, participants)
- Respect des ContactPolicy (qui peut parler à qui par rôle)
- Gestion MemberBlock (blocages individuels)
- UI : conversations list, conversation detail, broadcast, tiles
- BLoC : MessagingBloc avec events (envoyer, démarrer conversation rôle, etc.)
2026-04-15 20:26:35 +00:00

69 lines
2.0 KiB
Dart

/// Entité métier Message v4
///
/// Correspond au DTO backend : MessageResponse
library message;
import 'package:equatable/equatable.dart';
/// Message dans une conversation
class Message extends Equatable {
final String id;
final String typeMessage; // TEXTE | VOCAL | IMAGE | SYSTEME
final String? contenu;
final String? urlFichier;
final int? dureeAudio;
final bool supprime;
final String? expediteurId;
final String? expediteurNom;
final String? expediteurPrenom;
final String? messageParentId;
final String? messageParentApercu;
final DateTime? dateEnvoi;
const Message({
required this.id,
required this.typeMessage,
this.contenu,
this.urlFichier,
this.dureeAudio,
this.supprime = false,
this.expediteurId,
this.expediteurNom,
this.expediteurPrenom,
this.messageParentId,
this.messageParentApercu,
this.dateEnvoi,
});
String get expediteurNomComplet {
if (expediteurPrenom != null && expediteurNom != null) {
return '$expediteurPrenom $expediteurNom';
}
if (expediteurPrenom != null) return expediteurPrenom!;
if (expediteurNom != null) return expediteurNom!;
return '';
}
bool get isTexte => typeMessage == 'TEXTE';
bool get isVocal => typeMessage == 'VOCAL';
bool get isImage => typeMessage == 'IMAGE';
bool get isSysteme => typeMessage == 'SYSTEME';
bool get hasParent => messageParentId != null;
/// Texte à afficher dans la liste (aperçu)
String get apercu {
if (supprime) return '🚫 Message supprimé';
if (isVocal) return '🎙️ Note vocale${dureeAudio != null ? ' (${dureeAudio}s)' : ''}';
if (isImage) return '📷 Image';
if (isSysteme) return contenu ?? '🔔 Notification système';
return contenu ?? '';
}
@override
List<Object?> get props => [
id, typeMessage, contenu, urlFichier, dureeAudio, supprime,
expediteurId, expediteurNom, expediteurPrenom,
messageParentId, messageParentApercu, dateEnvoi,
];
}