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.)
69 lines
2.0 KiB
Dart
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,
|
|
];
|
|
}
|