Files
unionflow-mobile-apps/lib/features/members/domain/usecases/export_members.dart
dahoud b63fc46182 feat(mobile): amélioration UX NotImplementedFailure + SnackbarHelper
- NotImplementedFailure: ajout userFriendlyMessage et icon construction (blue)
- ErrorDisplayWidget: support spécial pour NotImplementedFailure (bientôt disponible)
- SnackbarHelper: classe centralisée pour messages cohérents (success, error, warning, info, notImplemented)
- budgets_list_page: remplace generic snackbar par SnackbarHelper.showNotImplemented
- conversations_page: remplace 2 TODOs par SnackbarHelper.showNotImplemented
- export_members: met à jour TODO obsolète (endpoint PDF maintenant disponible)
- cache_service: fix AppLogger.error calls (error: named param)
- cached_datasource_decorator: fix AppLogger.error call

Task #64 - Fix Snackbar Placeholders + NotImplementedFailure UX
2026-03-17 10:06:21 +00:00

50 lines
1.7 KiB
Dart

/// Use case: Exporter la liste des membres
library export_members;
import 'package:injectable/injectable.dart';
import '../../../../shared/models/membre_search_criteria.dart';
import '../repositories/membre_repository.dart';
/// Use case pour exporter la liste des membres au format CSV ou PDF
/// Réservé aux utilisateurs avec le rôle ADMIN_ORGANISATION
@injectable
class ExportMembers {
final IMembreRepository _repository;
ExportMembers(this._repository);
/// Exécute le use case
///
/// [criteria] - Critères de filtre pour l'export (optionnel)
/// [format] - Format d'export ('csv' ou 'pdf')
///
/// Retourne les données exportées (liste complète des membres selon critères)
/// Note: Backend endpoint GET /api/membres/export?format=csv|excel|pdf disponible
/// Le use case actuel récupère toutes les données, l'export final se fait côté UI
Future<List<Map<String, dynamic>>> call({
MembreSearchCriteria? criteria,
String format = 'csv',
}) async {
// Récupérer tous les membres (pagination large)
final result = await _repository.searchMembres(
criteria: criteria ?? const MembreSearchCriteria(),
page: 0,
size: 10000, // Grande pagination pour export complet
);
// Convertir en liste de maps pour l'export
return result.membres.map((membre) => {
'id': membre.id,
'nom': membre.nom,
'prenom': membre.prenom,
'email': membre.email,
'telephone': membre.telephone,
'adresse': membre.adresse,
'dateNaissance': membre.dateNaissance?.toIso8601String(),
'dateAdhesion': membre.dateAdhesion?.toIso8601String(),
'statut': membre.statut,
'actif': membre.actif,
}).toList();
}
}