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.)
49 lines
1.5 KiB
Dart
49 lines
1.5 KiB
Dart
/// Modèle de données Message v4 avec désérialisation JSON
|
|
library message_model;
|
|
|
|
import '../../domain/entities/message.dart';
|
|
|
|
/// Modèle Message v4
|
|
class MessageModel extends Message {
|
|
const MessageModel({
|
|
required super.id,
|
|
required super.typeMessage,
|
|
super.contenu,
|
|
super.urlFichier,
|
|
super.dureeAudio,
|
|
super.supprime,
|
|
super.expediteurId,
|
|
super.expediteurNom,
|
|
super.expediteurPrenom,
|
|
super.messageParentId,
|
|
super.messageParentApercu,
|
|
super.dateEnvoi,
|
|
});
|
|
|
|
factory MessageModel.fromJson(Map<String, dynamic> json) {
|
|
return MessageModel(
|
|
id: json['id']?.toString() ?? '',
|
|
typeMessage: json['typeMessage']?.toString() ?? 'TEXTE',
|
|
contenu: json['contenu']?.toString(),
|
|
urlFichier: json['urlFichier']?.toString(),
|
|
dureeAudio: _parseInt(json['dureeAudio']),
|
|
supprime: json['supprime'] == true,
|
|
expediteurId: json['expediteurId']?.toString(),
|
|
expediteurNom: json['expediteurNom']?.toString(),
|
|
expediteurPrenom: json['expediteurPrenom']?.toString(),
|
|
messageParentId: json['messageParentId']?.toString(),
|
|
messageParentApercu: json['messageParentApercu']?.toString(),
|
|
dateEnvoi: json['dateEnvoi'] != null
|
|
? DateTime.tryParse(json['dateEnvoi'].toString())
|
|
: null,
|
|
);
|
|
}
|
|
}
|
|
|
|
int? _parseInt(dynamic value) {
|
|
if (value == null) return null;
|
|
if (value is int) return value;
|
|
if (value is double) return value.toInt();
|
|
return int.tryParse(value.toString());
|
|
}
|