refactoring
This commit is contained in:
@@ -6,6 +6,8 @@ import 'package:dio/dio.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'membres_event.dart';
|
||||
import 'membres_state.dart';
|
||||
import '../../../shared/models/membre_search_criteria.dart';
|
||||
import '../../../shared/models/membre_search_result.dart';
|
||||
import '../domain/usecases/get_members.dart';
|
||||
import '../domain/usecases/get_member_by_id.dart';
|
||||
import '../domain/usecases/create_member.dart' as uc;
|
||||
@@ -64,11 +66,25 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
emit(const MembresLoading());
|
||||
}
|
||||
|
||||
final result = await _getMembers(
|
||||
page: event.page,
|
||||
size: event.size,
|
||||
recherche: event.recherche,
|
||||
);
|
||||
final MembreSearchResult result;
|
||||
if (event.organisationId != null) {
|
||||
// OrgAdmin : scope la requête à son organisation via la recherche avancée
|
||||
result = await _searchMembers(
|
||||
criteria: MembreSearchCriteria(
|
||||
organisationIds: [event.organisationId!],
|
||||
query: event.recherche?.isNotEmpty == true ? event.recherche : null,
|
||||
),
|
||||
page: event.page,
|
||||
size: event.size,
|
||||
);
|
||||
} else {
|
||||
// SuperAdmin et autres rôles : accès global sans filtre org
|
||||
result = await _getMembers(
|
||||
page: event.page,
|
||||
size: event.size,
|
||||
recherche: event.recherche,
|
||||
);
|
||||
}
|
||||
|
||||
emit(MembresLoaded(
|
||||
membres: result.membres,
|
||||
@@ -76,16 +92,19 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
currentPage: result.currentPage,
|
||||
pageSize: result.pageSize,
|
||||
totalPages: result.totalPages,
|
||||
organisationId: event.organisationId,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur inattendue lors du chargement des membres: $e',
|
||||
message: 'Erreur lors du chargement des membres. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -110,14 +129,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
));
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors du chargement du membre: $e',
|
||||
message: 'Erreur lors du chargement du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -135,6 +156,7 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembreCreated(membre));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
if (e.response?.statusCode == 400) {
|
||||
// Erreur de validation
|
||||
final errors = _extractValidationErrors(e.response?.data);
|
||||
@@ -151,8 +173,9 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de la création du membre: $e',
|
||||
message: 'Erreur lors de la création du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -170,6 +193,7 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembreUpdated(membre));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
if (e.response?.statusCode == 400) {
|
||||
final errors = _extractValidationErrors(e.response?.data);
|
||||
emit(MembresValidationError(
|
||||
@@ -185,8 +209,9 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de la mise à jour du membre: $e',
|
||||
message: 'Erreur lors de la mise à jour du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -204,14 +229,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembreDeleted(event.id));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de la suppression du membre: $e',
|
||||
message: 'Erreur lors de la suppression du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -229,14 +256,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembreActivated(membre));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de l\'activation du membre: $e',
|
||||
message: 'Erreur lors de l\'activation du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -254,14 +283,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembreDeactivated(membre));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de la désactivation du membre: $e',
|
||||
message: 'Erreur lors de la désactivation du membre. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -289,14 +320,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors de la recherche de membres: $e',
|
||||
message: 'Erreur lors de la recherche de membres. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -323,14 +356,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors du chargement des membres actifs: $e',
|
||||
message: 'Erreur lors du chargement des membres actifs. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -357,14 +392,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors du chargement des membres du bureau: $e',
|
||||
message: 'Erreur lors du chargement des membres du bureau. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -382,14 +419,16 @@ class MembresBloc extends Bloc<MembresEvent, MembresState> {
|
||||
|
||||
emit(MembresStatsLoaded(stats));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(MembresError(
|
||||
message: 'Erreur lors du chargement des statistiques: $e',
|
||||
message: 'Erreur lors du chargement des statistiques. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -19,16 +19,18 @@ class LoadMembres extends MembresEvent {
|
||||
final int size;
|
||||
final String? recherche;
|
||||
final bool refresh;
|
||||
final String? organisationId;
|
||||
|
||||
const LoadMembres({
|
||||
this.page = 0,
|
||||
this.size = 20,
|
||||
this.recherche,
|
||||
this.refresh = false,
|
||||
this.organisationId,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [page, size, recherche, refresh];
|
||||
List<Object?> get props => [page, size, recherche, refresh, organisationId];
|
||||
}
|
||||
|
||||
/// Événement pour charger un membre par ID
|
||||
|
||||
@@ -40,6 +40,7 @@ class MembresLoaded extends MembresState {
|
||||
final int pageSize;
|
||||
final int totalPages;
|
||||
final bool hasMore;
|
||||
final String? organisationId;
|
||||
|
||||
const MembresLoaded({
|
||||
required this.membres,
|
||||
@@ -47,10 +48,19 @@ class MembresLoaded extends MembresState {
|
||||
this.currentPage = 0,
|
||||
this.pageSize = 20,
|
||||
required this.totalPages,
|
||||
this.organisationId,
|
||||
}) : hasMore = currentPage < totalPages - 1;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [membres, totalElements, currentPage, pageSize, totalPages, hasMore];
|
||||
List<Object?> get props => [
|
||||
membres,
|
||||
totalElements,
|
||||
currentPage,
|
||||
pageSize,
|
||||
totalPages,
|
||||
hasMore,
|
||||
organisationId,
|
||||
];
|
||||
|
||||
MembresLoaded copyWith({
|
||||
List<MembreCompletModel>? membres,
|
||||
@@ -58,6 +68,7 @@ class MembresLoaded extends MembresState {
|
||||
int? currentPage,
|
||||
int? pageSize,
|
||||
int? totalPages,
|
||||
String? organisationId,
|
||||
}) {
|
||||
return MembresLoaded(
|
||||
membres: membres ?? this.membres,
|
||||
@@ -65,6 +76,7 @@ class MembresLoaded extends MembresState {
|
||||
currentPage: currentPage ?? this.currentPage,
|
||||
pageSize: pageSize ?? this.pageSize,
|
||||
totalPages: totalPages ?? this.totalPages,
|
||||
organisationId: organisationId ?? this.organisationId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user