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:
dahoud
2026-03-15 02:12:17 +00:00
parent bbc409de9d
commit e8ad874015
635 changed files with 58160 additions and 20674 deletions

View File

@@ -0,0 +1,52 @@
/// Interface du repository des événements (Clean Architecture)
library evenement_repository_interface;
import '../../data/repositories/evenement_repository_impl.dart' show EvenementSearchResult;
import '../../data/models/evenement_model.dart';
/// Interface définissant le contrat du repository des événements
/// Implémentée par EvenementRepositoryImpl dans la couche data
abstract class IEvenementRepository {
/// Récupère la liste des événements avec pagination
Future<EvenementSearchResult> getEvenements({
int page = 0,
int size = 20,
String? recherche,
});
/// Récupère un événement par son ID
Future<EvenementModel?> getEvenementById(String id);
/// Crée un nouvel événement
Future<EvenementModel> createEvenement(EvenementModel evenement);
/// Met à jour un événement
Future<EvenementModel> updateEvenement(String id, EvenementModel evenement);
/// Supprime un événement
Future<void> deleteEvenement(String id);
/// Récupère les événements à venir
Future<EvenementSearchResult> getEvenementsAVenir({int page = 0, int size = 20});
/// Récupère les événements en cours
Future<EvenementSearchResult> getEvenementsEnCours({int page = 0, int size = 20});
/// Récupère les événements passés
Future<EvenementSearchResult> getEvenementsPasses({int page = 0, int size = 20});
/// S'inscrire à un événement
Future<void> inscrireEvenement(String evenementId);
/// Se désinscrire d'un événement
Future<void> desinscrireEvenement(String evenementId);
/// Indique si l'utilisateur connecté est inscrit à l'événement
Future<bool> getInscriptionStatus(String evenementId);
/// Récupère les participants d'un événement
Future<List<Map<String, dynamic>>> getParticipants(String evenementId);
/// Récupère les statistiques des événements
Future<Map<String, dynamic>> getEvenementsStats();
}