- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics) * Backend: KafkaEventProducer, KafkaEventConsumer * Mobile: WebSocketService (reconnection, heartbeat, typed events) * DashboardBloc: Auto-refresh depuis WebSocket events - Finance Workflow: approbations + budgets (backend + mobile) * Backend: entities, services, resources, migrations Flyway V6 * Mobile: features finance_workflow complète avec BLoC - Corrections DI: interfaces IRepository partout * IProfileRepository, IOrganizationRepository, IMembreRepository * GetIt configuré avec @injectable - Spec-Kit: constitution + templates mis à jour * .specify/memory/constitution.md enrichie * Templates agent, plan, spec, tasks, checklist - Nettoyage: fichiers temporaires supprimés Signed-off-by: lions dev Team
119 lines
2.8 KiB
Dart
119 lines
2.8 KiB
Dart
/// Événements du BLoC Messaging
|
|
library messaging_event;
|
|
|
|
import 'package:equatable/equatable.dart';
|
|
import '../../domain/entities/message.dart';
|
|
|
|
abstract class MessagingEvent extends Equatable {
|
|
const MessagingEvent();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// Charger les conversations
|
|
class LoadConversations extends MessagingEvent {
|
|
final String? organizationId;
|
|
final bool includeArchived;
|
|
|
|
const LoadConversations({
|
|
this.organizationId,
|
|
this.includeArchived = false,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [organizationId, includeArchived];
|
|
}
|
|
|
|
/// Charger les messages d'une conversation
|
|
class LoadMessages extends MessagingEvent {
|
|
final String conversationId;
|
|
final int? limit;
|
|
final String? beforeMessageId;
|
|
|
|
const LoadMessages({
|
|
required this.conversationId,
|
|
this.limit,
|
|
this.beforeMessageId,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [conversationId, limit, beforeMessageId];
|
|
}
|
|
|
|
/// Envoyer un message
|
|
class SendMessageEvent extends MessagingEvent {
|
|
final String conversationId;
|
|
final String content;
|
|
final List<String>? attachments;
|
|
final MessagePriority priority;
|
|
|
|
const SendMessageEvent({
|
|
required this.conversationId,
|
|
required this.content,
|
|
this.attachments,
|
|
this.priority = MessagePriority.normal,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [conversationId, content, attachments, priority];
|
|
}
|
|
|
|
/// Envoyer un broadcast
|
|
class SendBroadcastEvent extends MessagingEvent {
|
|
final String organizationId;
|
|
final String subject;
|
|
final String content;
|
|
final MessagePriority priority;
|
|
final List<String>? attachments;
|
|
|
|
const SendBroadcastEvent({
|
|
required this.organizationId,
|
|
required this.subject,
|
|
required this.content,
|
|
this.priority = MessagePriority.normal,
|
|
this.attachments,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [organizationId, subject, content, priority, attachments];
|
|
}
|
|
|
|
/// Marquer un message comme lu
|
|
class MarkMessageAsReadEvent extends MessagingEvent {
|
|
final String messageId;
|
|
|
|
const MarkMessageAsReadEvent(this.messageId);
|
|
|
|
@override
|
|
List<Object?> get props => [messageId];
|
|
}
|
|
|
|
/// Charger le nombre de messages non lus
|
|
class LoadUnreadCount extends MessagingEvent {
|
|
final String? organizationId;
|
|
|
|
const LoadUnreadCount({this.organizationId});
|
|
|
|
@override
|
|
List<Object?> get props => [organizationId];
|
|
}
|
|
|
|
/// Créer une nouvelle conversation
|
|
class CreateConversationEvent extends MessagingEvent {
|
|
final String name;
|
|
final List<String> participantIds;
|
|
final String? organizationId;
|
|
final String? description;
|
|
|
|
const CreateConversationEvent({
|
|
required this.name,
|
|
required this.participantIds,
|
|
this.organizationId,
|
|
this.description,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [name, participantIds, organizationId, description];
|
|
}
|