feat: Implement centralized error handling with ErrorService; replace print statements with logging in services and blocs

feat: Add ErrorContent widget for displaying error messages in dialogs and bottom sheets
refactor: Update GroupBloc and GroupRepository to utilize ErrorService for error logging
refactor: Enhance user and trip services to log errors using ErrorService
refactor: Clean up debug print statements in GroupContent and related components
This commit is contained in:
Dayron
2025-10-15 11:43:21 +02:00
parent 03ed85bf98
commit 0162eb67f5
12 changed files with 422 additions and 197 deletions

View File

@@ -1,9 +1,11 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:travel_mate/services/error_service.dart';
import '../data/models/group.dart';
import '../data/models/group_member.dart';
class GroupRepository {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final _errorService = ErrorService();
CollectionReference get _groupsCollection => _firestore.collection('groups');
@@ -34,22 +36,16 @@ class GroupRepository {
}
}
Stream<List<Group>> getGroupsByUserId(String userId) {
print('===== GroupRepository: getGroupsByUserId START =====');
print('UserId recherché: $userId');
Stream<List<Group>> getGroupsByUserId(String userId) {
return _groupsCollection
.snapshots()
.asyncMap((snapshot) async {
print('===== GroupRepository: Nouveau snapshot (${DateTime.now()}) =====');
print('Nombre de documents: ${snapshot.docs.length}');
List<Group> userGroups = [];
for (var groupDoc in snapshot.docs) {
try {
final groupId = groupDoc.id;
print('--- Vérification groupe: $groupId ---');
// Vérifier si l'utilisateur est membre
final memberDoc = await groupDoc.reference
@@ -57,34 +53,24 @@ class GroupRepository {
.doc(userId)
.get();
print('Membre existe dans $groupId: ${memberDoc.exists}');
if (memberDoc.exists) {
print('✓ Utilisateur trouvé dans $groupId');
final groupData = groupDoc.data() as Map<String, dynamic>;
final group = Group.fromMap(groupData, groupId);
final members = await getGroupMembers(groupId);
print('${members.length} membres chargés pour $groupId');
userGroups.add(group.copyWith(members: members));
} else {
print('Utilisateur NON membre de $groupId');
_errorService.logInfo('group_repository.dart','Utilisateur NON membre de $groupId');
}
} catch (e, stackTrace) {
print('ERREUR groupe ${groupDoc.id}: $e');
print('StackTrace: $stackTrace');
_errorService.logError(e.toString(), stackTrace);
}
}
print('===== Retour: ${userGroups.length} groupes =====');
return userGroups;
})
.distinct((prev, next) {
// Comparer les listes pour éviter les doublons
if (prev.length != next.length) {
print('>>> Changement détecté: ${prev.length} -> ${next.length} groupes');
return false;
}
@@ -95,17 +81,10 @@ class GroupRepository {
final identical = prevIds.difference(nextIds).isEmpty &&
nextIds.difference(prevIds).isEmpty;
if (!identical) {
print('>>> Changement détecté: IDs différents');
} else {
print('>>> Données identiques, émission ignorée');
}
return identical;
})
.handleError((error, stackTrace) {
print('ERREUR stream: $error');
print('StackTrace: $stackTrace');
_errorService.logError(error, stackTrace);
return <Group>[];
});
}
@@ -146,10 +125,7 @@ class GroupRepository {
Future<List<GroupMember>> getGroupMembers(String groupId) async {
try {
print('Chargement membres pour: $groupId');
final snapshot = await _membersCollection(groupId).get();
print('${snapshot.docs.length} membres trouvés');
final snapshot = await _membersCollection(groupId).get();
return snapshot.docs
.map((doc) {
return GroupMember.fromMap(
@@ -159,7 +135,6 @@ class GroupRepository {
})
.toList();
} catch (e) {
print('ERREUR getGroupMembers: $e');
throw Exception('Erreur lors de la récupération des membres: $e');
}
}