333 lines
16 KiB
Dart
333 lines
16 KiB
Dart
import 'package:get_it/get_it.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../../../core/network/api_client.dart';
|
|
import '../../../core/network/network_info.dart';
|
|
|
|
// Domain
|
|
import '../domain/repositories/solidarite_repository.dart';
|
|
import '../domain/usecases/gerer_demandes_aide_usecase.dart';
|
|
import '../domain/usecases/gerer_propositions_aide_usecase.dart';
|
|
import '../domain/usecases/gerer_matching_usecase.dart';
|
|
import '../domain/usecases/gerer_evaluations_usecase.dart';
|
|
import '../domain/usecases/obtenir_statistiques_usecase.dart';
|
|
|
|
// Data
|
|
import 'datasources/solidarite_remote_data_source.dart';
|
|
import 'datasources/solidarite_local_data_source.dart';
|
|
import 'repositories/solidarite_repository_impl.dart';
|
|
|
|
/// Configuration de l'injection de dépendances pour le module solidarité
|
|
///
|
|
/// Cette classe configure tous les services, repositories, use cases
|
|
/// et data sources nécessaires au fonctionnement du module solidarité.
|
|
class SolidariteInjectionContainer {
|
|
static final GetIt _sl = GetIt.instance;
|
|
|
|
/// Initialise toutes les dépendances du module solidarité
|
|
static Future<void> init() async {
|
|
// ============================================================================
|
|
// Features - Solidarité
|
|
// ============================================================================
|
|
|
|
// Use Cases - Demandes d'aide
|
|
_sl.registerLazySingleton(() => CreerDemandeAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => MettreAJourDemandeAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirDemandeAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => SoumettreDemandeAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => EvaluerDemandeAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => RechercherDemandesAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirDemandesUrgentesUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirMesDemandesUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ValiderDemandeAideUseCase());
|
|
_sl.registerLazySingleton(() => CalculerPrioriteDemandeUseCase());
|
|
|
|
// Use Cases - Propositions d'aide
|
|
_sl.registerLazySingleton(() => CreerPropositionAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => MettreAJourPropositionAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirPropositionAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ChangerStatutPropositionUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => RechercherPropositionsAideUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirPropositionsActivesUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirMeilleuresPropositionsUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirMesPropositionsUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ValiderPropositionAideUseCase());
|
|
_sl.registerLazySingleton(() => CalculerScorePropositionUseCase());
|
|
|
|
// Use Cases - Matching
|
|
_sl.registerLazySingleton(() => TrouverPropositionsCompatiblesUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => TrouverDemandesCompatiblesUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => RechercherProposantsFinanciersUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => CalculerScoreCompatibiliteUseCase());
|
|
_sl.registerLazySingleton(() => EffectuerMatchingIntelligentUseCase(
|
|
trouverPropositionsCompatibles: _sl(),
|
|
calculerScoreCompatibilite: _sl(),
|
|
));
|
|
_sl.registerLazySingleton(() => AnalyserTendancesMatchingUseCase());
|
|
|
|
// Use Cases - Évaluations
|
|
_sl.registerLazySingleton(() => CreerEvaluationUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => MettreAJourEvaluationUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirEvaluationUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirEvaluationsDemandeUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ObtenirEvaluationsPropositionUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => SignalerEvaluationUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => CalculerMoyenneDemandeUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => CalculerMoyennePropositionUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => ValiderEvaluationUseCase());
|
|
_sl.registerLazySingleton(() => CalculerScoreQualiteEvaluationUseCase());
|
|
_sl.registerLazySingleton(() => AnalyserTendancesEvaluationUseCase());
|
|
|
|
// Use Cases - Statistiques
|
|
_sl.registerLazySingleton(() => ObtenirStatistiquesSolidariteUseCase(_sl()));
|
|
_sl.registerLazySingleton(() => CalculerKPIsPerformanceUseCase());
|
|
_sl.registerLazySingleton(() => GenererRapportActiviteUseCase());
|
|
|
|
// Repository
|
|
_sl.registerLazySingleton<SolidariteRepository>(
|
|
() => SolidariteRepositoryImpl(
|
|
remoteDataSource: _sl(),
|
|
localDataSource: _sl(),
|
|
networkInfo: _sl(),
|
|
),
|
|
);
|
|
|
|
// Data Sources
|
|
_sl.registerLazySingleton<SolidariteRemoteDataSource>(
|
|
() => SolidariteRemoteDataSourceImpl(apiClient: _sl()),
|
|
);
|
|
|
|
_sl.registerLazySingleton<SolidariteLocalDataSource>(
|
|
() => SolidariteLocalDataSourceImpl(sharedPreferences: _sl()),
|
|
);
|
|
|
|
// ============================================================================
|
|
// Core (si pas déjà enregistrés)
|
|
// ============================================================================
|
|
|
|
// Ces services sont normalement enregistrés dans le core injection container
|
|
// Nous les enregistrons ici seulement s'ils ne sont pas déjà disponibles
|
|
|
|
if (!_sl.isRegistered<ApiClient>()) {
|
|
_sl.registerLazySingleton<ApiClient>(() => ApiClientImpl());
|
|
}
|
|
|
|
if (!_sl.isRegistered<NetworkInfo>()) {
|
|
_sl.registerLazySingleton<NetworkInfo>(() => NetworkInfoImpl());
|
|
}
|
|
|
|
if (!_sl.isRegistered<SharedPreferences>()) {
|
|
final sharedPreferences = await SharedPreferences.getInstance();
|
|
_sl.registerLazySingleton<SharedPreferences>(() => sharedPreferences);
|
|
}
|
|
}
|
|
|
|
/// Nettoie toutes les dépendances du module solidarité
|
|
static Future<void> dispose() async {
|
|
// Use Cases - Demandes d'aide
|
|
_sl.unregister<CreerDemandeAideUseCase>();
|
|
_sl.unregister<MettreAJourDemandeAideUseCase>();
|
|
_sl.unregister<ObtenirDemandeAideUseCase>();
|
|
_sl.unregister<SoumettreDemandeAideUseCase>();
|
|
_sl.unregister<EvaluerDemandeAideUseCase>();
|
|
_sl.unregister<RechercherDemandesAideUseCase>();
|
|
_sl.unregister<ObtenirDemandesUrgentesUseCase>();
|
|
_sl.unregister<ObtenirMesDemandesUseCase>();
|
|
_sl.unregister<ValiderDemandeAideUseCase>();
|
|
_sl.unregister<CalculerPrioriteDemandeUseCase>();
|
|
|
|
// Use Cases - Propositions d'aide
|
|
_sl.unregister<CreerPropositionAideUseCase>();
|
|
_sl.unregister<MettreAJourPropositionAideUseCase>();
|
|
_sl.unregister<ObtenirPropositionAideUseCase>();
|
|
_sl.unregister<ChangerStatutPropositionUseCase>();
|
|
_sl.unregister<RechercherPropositionsAideUseCase>();
|
|
_sl.unregister<ObtenirPropositionsActivesUseCase>();
|
|
_sl.unregister<ObtenirMeilleuresPropositionsUseCase>();
|
|
_sl.unregister<ObtenirMesPropositionsUseCase>();
|
|
_sl.unregister<ValiderPropositionAideUseCase>();
|
|
_sl.unregister<CalculerScorePropositionUseCase>();
|
|
|
|
// Use Cases - Matching
|
|
_sl.unregister<TrouverPropositionsCompatiblesUseCase>();
|
|
_sl.unregister<TrouverDemandesCompatiblesUseCase>();
|
|
_sl.unregister<RechercherProposantsFinanciersUseCase>();
|
|
_sl.unregister<CalculerScoreCompatibiliteUseCase>();
|
|
_sl.unregister<EffectuerMatchingIntelligentUseCase>();
|
|
_sl.unregister<AnalyserTendancesMatchingUseCase>();
|
|
|
|
// Use Cases - Évaluations
|
|
_sl.unregister<CreerEvaluationUseCase>();
|
|
_sl.unregister<MettreAJourEvaluationUseCase>();
|
|
_sl.unregister<ObtenirEvaluationUseCase>();
|
|
_sl.unregister<ObtenirEvaluationsDemandeUseCase>();
|
|
_sl.unregister<ObtenirEvaluationsPropositionUseCase>();
|
|
_sl.unregister<SignalerEvaluationUseCase>();
|
|
_sl.unregister<CalculerMoyenneDemandeUseCase>();
|
|
_sl.unregister<CalculerMoyennePropositionUseCase>();
|
|
_sl.unregister<ValiderEvaluationUseCase>();
|
|
_sl.unregister<CalculerScoreQualiteEvaluationUseCase>();
|
|
_sl.unregister<AnalyserTendancesEvaluationUseCase>();
|
|
|
|
// Use Cases - Statistiques
|
|
_sl.unregister<ObtenirStatistiquesSolidariteUseCase>();
|
|
_sl.unregister<CalculerKPIsPerformanceUseCase>();
|
|
_sl.unregister<GenererRapportActiviteUseCase>();
|
|
|
|
// Repository et Data Sources
|
|
_sl.unregister<SolidariteRepository>();
|
|
_sl.unregister<SolidariteRemoteDataSource>();
|
|
_sl.unregister<SolidariteLocalDataSource>();
|
|
}
|
|
|
|
/// Obtient une instance d'un service enregistré
|
|
static T get<T extends Object>() => _sl.get<T>();
|
|
|
|
/// Vérifie si un service est enregistré
|
|
static bool isRegistered<T extends Object>() => _sl.isRegistered<T>();
|
|
|
|
/// Réinitialise complètement le container
|
|
static Future<void> reset() async {
|
|
await dispose();
|
|
await init();
|
|
}
|
|
|
|
/// Obtient des statistiques sur les services enregistrés
|
|
static Map<String, dynamic> getStats() {
|
|
return {
|
|
'totalServices': _sl.allReadySync().length,
|
|
'solidariteServices': {
|
|
'useCases': {
|
|
'demandes': 10,
|
|
'propositions': 10,
|
|
'matching': 6,
|
|
'evaluations': 11,
|
|
'statistiques': 3,
|
|
},
|
|
'repositories': 1,
|
|
'dataSources': 2,
|
|
},
|
|
'isInitialized': _sl.isRegistered<SolidariteRepository>(),
|
|
};
|
|
}
|
|
|
|
/// Valide que tous les services critiques sont enregistrés
|
|
static bool validateConfiguration() {
|
|
try {
|
|
// Vérifier les services critiques
|
|
final criticalServices = [
|
|
SolidariteRepository,
|
|
SolidariteRemoteDataSource,
|
|
SolidariteLocalDataSource,
|
|
CreerDemandeAideUseCase,
|
|
CreerPropositionAideUseCase,
|
|
CreerEvaluationUseCase,
|
|
ObtenirStatistiquesSolidariteUseCase,
|
|
];
|
|
|
|
for (final serviceType in criticalServices) {
|
|
if (!_sl.isRegistered(instance: serviceType)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// Effectue un test de santé des services
|
|
static Future<Map<String, bool>> healthCheck() async {
|
|
final results = <String, bool>{};
|
|
|
|
try {
|
|
// Test du repository
|
|
final repository = _sl.get<SolidariteRepository>();
|
|
results['repository'] = repository != null;
|
|
|
|
// Test des data sources
|
|
final remoteDataSource = _sl.get<SolidariteRemoteDataSource>();
|
|
results['remoteDataSource'] = remoteDataSource != null;
|
|
|
|
final localDataSource = _sl.get<SolidariteLocalDataSource>();
|
|
results['localDataSource'] = localDataSource != null;
|
|
|
|
// Test des use cases critiques
|
|
final creerDemandeUseCase = _sl.get<CreerDemandeAideUseCase>();
|
|
results['creerDemandeUseCase'] = creerDemandeUseCase != null;
|
|
|
|
final creerPropositionUseCase = _sl.get<CreerPropositionAideUseCase>();
|
|
results['creerPropositionUseCase'] = creerPropositionUseCase != null;
|
|
|
|
final creerEvaluationUseCase = _sl.get<CreerEvaluationUseCase>();
|
|
results['creerEvaluationUseCase'] = creerEvaluationUseCase != null;
|
|
|
|
// Test des services de base
|
|
results['networkInfo'] = _sl.isRegistered<NetworkInfo>();
|
|
results['apiClient'] = _sl.isRegistered<ApiClient>();
|
|
results['sharedPreferences'] = _sl.isRegistered<SharedPreferences>();
|
|
|
|
} catch (e) {
|
|
results['error'] = false;
|
|
}
|
|
|
|
return results;
|
|
}
|
|
}
|
|
|
|
/// Extension pour faciliter l'accès aux services depuis les widgets
|
|
extension SolidariteServiceLocator on GetIt {
|
|
// Use Cases - Demandes d'aide
|
|
CreerDemandeAideUseCase get creerDemandeAide => get<CreerDemandeAideUseCase>();
|
|
MettreAJourDemandeAideUseCase get mettreAJourDemandeAide => get<MettreAJourDemandeAideUseCase>();
|
|
ObtenirDemandeAideUseCase get obtenirDemandeAide => get<ObtenirDemandeAideUseCase>();
|
|
SoumettreDemandeAideUseCase get soumettreDemandeAide => get<SoumettreDemandeAideUseCase>();
|
|
EvaluerDemandeAideUseCase get evaluerDemandeAide => get<EvaluerDemandeAideUseCase>();
|
|
RechercherDemandesAideUseCase get rechercherDemandesAide => get<RechercherDemandesAideUseCase>();
|
|
ObtenirDemandesUrgentesUseCase get obtenirDemandesUrgentes => get<ObtenirDemandesUrgentesUseCase>();
|
|
ObtenirMesDemandesUseCase get obtenirMesdemandes => get<ObtenirMesDemandesUseCase>();
|
|
ValiderDemandeAideUseCase get validerDemandeAide => get<ValiderDemandeAideUseCase>();
|
|
CalculerPrioriteDemandeUseCase get calculerPrioriteDemande => get<CalculerPrioriteDemandeUseCase>();
|
|
|
|
// Use Cases - Propositions d'aide
|
|
CreerPropositionAideUseCase get creerPropositionAide => get<CreerPropositionAideUseCase>();
|
|
MettreAJourPropositionAideUseCase get mettreAJourPropositionAide => get<MettreAJourPropositionAideUseCase>();
|
|
ObtenirPropositionAideUseCase get obtenirPropositionAide => get<ObtenirPropositionAideUseCase>();
|
|
ChangerStatutPropositionUseCase get changerStatutProposition => get<ChangerStatutPropositionUseCase>();
|
|
RechercherPropositionsAideUseCase get rechercherPropositionsAide => get<RechercherPropositionsAideUseCase>();
|
|
ObtenirPropositionsActivesUseCase get obtenirPropositionsActives => get<ObtenirPropositionsActivesUseCase>();
|
|
ObtenirMeilleuresPropositionsUseCase get obtenirMeilleuresPropositions => get<ObtenirMeilleuresPropositionsUseCase>();
|
|
ObtenirMesPropositionsUseCase get obtenirMesPropositions => get<ObtenirMesPropositionsUseCase>();
|
|
ValiderPropositionAideUseCase get validerPropositionAide => get<ValiderPropositionAideUseCase>();
|
|
CalculerScorePropositionUseCase get calculerScoreProposition => get<CalculerScorePropositionUseCase>();
|
|
|
|
// Use Cases - Matching
|
|
TrouverPropositionsCompatiblesUseCase get trouverPropositionsCompatibles => get<TrouverPropositionsCompatiblesUseCase>();
|
|
TrouverDemandesCompatiblesUseCase get trouverDemandesCompatibles => get<TrouverDemandesCompatiblesUseCase>();
|
|
RechercherProposantsFinanciersUseCase get rechercherProposantsFinanciers => get<RechercherProposantsFinanciersUseCase>();
|
|
CalculerScoreCompatibiliteUseCase get calculerScoreCompatibilite => get<CalculerScoreCompatibiliteUseCase>();
|
|
EffectuerMatchingIntelligentUseCase get effectuerMatchingIntelligent => get<EffectuerMatchingIntelligentUseCase>();
|
|
AnalyserTendancesMatchingUseCase get analyserTendancesMatching => get<AnalyserTendancesMatchingUseCase>();
|
|
|
|
// Use Cases - Évaluations
|
|
CreerEvaluationUseCase get creerEvaluation => get<CreerEvaluationUseCase>();
|
|
MettreAJourEvaluationUseCase get mettreAJourEvaluation => get<MettreAJourEvaluationUseCase>();
|
|
ObtenirEvaluationUseCase get obtenirEvaluation => get<ObtenirEvaluationUseCase>();
|
|
ObtenirEvaluationsDemandeUseCase get obtenirEvaluationsDemande => get<ObtenirEvaluationsDemandeUseCase>();
|
|
ObtenirEvaluationsPropositionUseCase get obtenirEvaluationsProposition => get<ObtenirEvaluationsPropositionUseCase>();
|
|
SignalerEvaluationUseCase get signalerEvaluation => get<SignalerEvaluationUseCase>();
|
|
CalculerMoyenneDemandeUseCase get calculerMoyenneDemande => get<CalculerMoyenneDemandeUseCase>();
|
|
CalculerMoyennePropositionUseCase get calculerMoyenneProposition => get<CalculerMoyennePropositionUseCase>();
|
|
ValiderEvaluationUseCase get validerEvaluation => get<ValiderEvaluationUseCase>();
|
|
CalculerScoreQualiteEvaluationUseCase get calculerScoreQualiteEvaluation => get<CalculerScoreQualiteEvaluationUseCase>();
|
|
AnalyserTendancesEvaluationUseCase get analyserTendancesEvaluation => get<AnalyserTendancesEvaluationUseCase>();
|
|
|
|
// Use Cases - Statistiques
|
|
ObtenirStatistiquesSolidariteUseCase get obtenirStatistiquesSolidarite => get<ObtenirStatistiquesSolidariteUseCase>();
|
|
CalculerKPIsPerformanceUseCase get calculerKPIsPerformance => get<CalculerKPIsPerformanceUseCase>();
|
|
GenererRapportActiviteUseCase get genererRapportActivite => get<GenererRapportActiviteUseCase>();
|
|
|
|
// Repository
|
|
SolidariteRepository get solidariteRepository => get<SolidariteRepository>();
|
|
}
|