feat: WebSocket temps réel + Finance Workflow + corrections
- 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
This commit is contained in:
@@ -3,15 +3,46 @@ library evenements_bloc;
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'evenements_event.dart';
|
||||
import 'evenements_state.dart';
|
||||
import '../data/repositories/evenement_repository_impl.dart';
|
||||
import '../domain/usecases/get_events.dart';
|
||||
import '../domain/usecases/get_event_by_id.dart';
|
||||
import '../domain/usecases/create_event.dart' as uc;
|
||||
import '../domain/usecases/update_event.dart' as uc;
|
||||
import '../domain/usecases/delete_event.dart' as uc;
|
||||
import '../domain/usecases/register_for_event.dart';
|
||||
import '../domain/usecases/cancel_registration.dart';
|
||||
import '../domain/usecases/get_my_registrations.dart';
|
||||
import '../domain/usecases/get_event_participants.dart';
|
||||
import '../domain/repositories/evenement_repository.dart';
|
||||
|
||||
/// BLoC pour la gestion des événements
|
||||
/// BLoC pour la gestion des événements (Clean Architecture)
|
||||
@injectable
|
||||
class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
final EvenementRepository _repository;
|
||||
final GetEvents _getEvents;
|
||||
final GetEventById _getEventById;
|
||||
final uc.CreateEvent _createEvent;
|
||||
final uc.UpdateEvent _updateEvent;
|
||||
final uc.DeleteEvent _deleteEvent;
|
||||
final RegisterForEvent _registerForEvent;
|
||||
final CancelRegistration _cancelRegistration;
|
||||
final GetMyRegistrations _getMyRegistrations;
|
||||
final GetEventParticipants _getEventParticipants;
|
||||
final IEvenementRepository _repository; // Pour méthodes non-couvertes par use cases
|
||||
|
||||
EvenementsBloc(this._repository) : super(const EvenementsInitial()) {
|
||||
EvenementsBloc(
|
||||
this._getEvents,
|
||||
this._getEventById,
|
||||
this._createEvent,
|
||||
this._updateEvent,
|
||||
this._deleteEvent,
|
||||
this._registerForEvent,
|
||||
this._cancelRegistration,
|
||||
this._getMyRegistrations,
|
||||
this._getEventParticipants,
|
||||
this._repository,
|
||||
) : super(const EvenementsInitial()) {
|
||||
on<LoadEvenements>(_onLoadEvenements);
|
||||
on<LoadEvenementById>(_onLoadEvenementById);
|
||||
on<CreateEvenement>(_onCreateEvenement);
|
||||
@@ -39,7 +70,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
emit(const EvenementsLoading());
|
||||
}
|
||||
|
||||
final result = await _repository.getEvenements(
|
||||
final result = await _getEvents(
|
||||
page: event.page,
|
||||
size: event.size,
|
||||
recherche: event.recherche,
|
||||
@@ -74,7 +105,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
final evenement = await _repository.getEvenementById(event.id);
|
||||
final evenement = await _getEventById(event.id);
|
||||
|
||||
if (evenement != null) {
|
||||
emit(EvenementDetailLoaded(evenement));
|
||||
@@ -106,7 +137,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
final evenement = await _repository.createEvenement(event.evenement);
|
||||
final evenement = await _createEvent(event.evenement);
|
||||
|
||||
emit(EvenementCreated(evenement));
|
||||
} on DioException catch (e) {
|
||||
@@ -140,7 +171,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
final evenement = await _repository.updateEvenement(event.id, event.evenement);
|
||||
final evenement = await _updateEvent(event.id, event.evenement);
|
||||
|
||||
emit(EvenementUpdated(evenement));
|
||||
} on DioException catch (e) {
|
||||
@@ -174,7 +205,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
await _repository.deleteEvenement(event.id);
|
||||
await _deleteEvent(event.id);
|
||||
|
||||
emit(EvenementDeleted(event.id));
|
||||
} on DioException catch (e) {
|
||||
@@ -301,7 +332,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
await _repository.inscrireEvenement(event.evenementId);
|
||||
await _registerForEvent(event.evenementId);
|
||||
|
||||
emit(EvenementInscrit(event.evenementId));
|
||||
} on DioException catch (e) {
|
||||
@@ -326,7 +357,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
await _repository.desinscrireEvenement(event.evenementId);
|
||||
await _cancelRegistration(event.evenementId);
|
||||
|
||||
emit(EvenementDesinscrit(event.evenementId));
|
||||
} on DioException catch (e) {
|
||||
@@ -351,7 +382,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
try {
|
||||
emit(const EvenementsLoading());
|
||||
|
||||
final participants = await _repository.getParticipants(event.evenementId);
|
||||
final participants = await _getEventParticipants(event.evenementId);
|
||||
|
||||
emit(ParticipantsLoaded(
|
||||
evenementId: event.evenementId,
|
||||
|
||||
Reference in New Issue
Block a user