feat(features): refontes onboarding/organizations/profile/reports/settings/solidarity

- onboarding : datasource souscription, models formule/status, bloc complet
- organizations : bloc orgs + switcher + types bloc, models, pages edit/create
- profile : bloc complet avec change password, delete account, preferences
- reports : bloc avec DashboardReports + ScheduleReports + GenerateReport
- settings : language, privacy, feedback pages
- solidarity : bloc complet demandes d'aide (CRUD, approuver, rejeter)
This commit is contained in:
dahoud
2026-04-15 20:27:12 +00:00
parent dbf6a972ba
commit 744faa3a9c
17 changed files with 711 additions and 403 deletions

View File

@@ -38,6 +38,20 @@ class SystemSettingsBloc extends Bloc<SystemSettingsEvent, SystemSettingsState>
on<TestDatabaseConnection>(_onTestDatabaseConnection);
on<TestEmailConfiguration>(_onTestEmailConfiguration);
on<ResetSystemConfig>(_onResetSystemConfig);
on<OptimizeDatabase>(_onOptimizeDatabase);
on<ForceGlobalLogout>(_onForceGlobalLogout);
on<CleanupSessions>(_onCleanupSessions);
on<CleanOldLogs>(_onCleanOldLogs);
on<PurgeExpiredData>(_onPurgeExpiredData);
on<AnalyzePerformance>(_onAnalyzePerformance);
on<CreateBackup>(_onCreateBackup);
on<ScheduleMaintenance>(_onScheduleMaintenance);
on<EmergencyMaintenance>(_onEmergencyMaintenance);
on<CheckUpdates>(_onCheckUpdates);
on<ExportLogs>(_onExportLogs);
on<GenerateUsageReport>(_onGenerateUsageReport);
on<GenerateAuditReport>(_onGenerateAuditReport);
on<ExportGDPRData>(_onExportGDPRData);
}
Future<void> _onLoadSystemConfig(
@@ -165,4 +179,159 @@ class SystemSettingsBloc extends Bloc<SystemSettingsEvent, SystemSettingsState>
emit(SystemSettingsError('Erreur de réinitialisation: ${e.toString()}'));
}
}
Future<void> _onOptimizeDatabase(OptimizeDatabase event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.optimizeDatabase();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Base de données optimisée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onForceGlobalLogout(ForceGlobalLogout event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.forceGlobalLogout();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Déconnexion globale déclenchée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onCleanupSessions(CleanupSessions event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.cleanupSessions();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Sessions nettoyées'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onCleanOldLogs(CleanOldLogs event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.cleanOldLogs();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Logs nettoyés'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onPurgeExpiredData(PurgeExpiredData event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.purgeExpiredData();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Données purgées'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onAnalyzePerformance(AnalyzePerformance event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.analyzePerformance();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Analyse terminée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onCreateBackup(CreateBackup event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.createBackup();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Sauvegarde créée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onScheduleMaintenance(ScheduleMaintenance event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.scheduleMaintenance(scheduledAt: event.scheduledAt, reason: event.reason);
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Maintenance planifiée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onEmergencyMaintenance(EmergencyMaintenance event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.emergencyMaintenance();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Maintenance d\'urgence activée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onCheckUpdates(CheckUpdates event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.checkUpdates();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Vérification terminée'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onExportLogs(ExportLogs event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.exportLogs();
final count = result['count'] as int? ?? 0;
emit(SystemSettingsSuccess('$count log(s) exporté(s)'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onGenerateUsageReport(GenerateUsageReport event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.generateUsageReport();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Rapport généré'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onGenerateAuditReport(GenerateAuditReport event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.generateAuditReport();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Rapport d\'audit généré'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
Future<void> _onExportGDPRData(ExportGDPRData event, Emitter<SystemSettingsState> emit) async {
emit(SystemSettingsLoading());
try {
final result = await _repository.exportGDPRData();
emit(SystemSettingsSuccess(result['message'] as String? ?? 'Export RGPD initié'));
} catch (e) {
if (e is DioException && e.type == DioExceptionType.cancel) return;
emit(SystemSettingsError('Erreur: ${e.toString()}'));
}
}
}