import 'package:cloud_firestore/cloud_firestore.dart'; import '../models/trip.dart'; class TripRepository { final FirebaseFirestore _firestore = FirebaseFirestore.instance; CollectionReference get _tripsCollection => _firestore.collection('trips'); // Récupérer tous les voyages d'un utilisateur Stream> getTripsByUserId(String userId) { try { return _tripsCollection .where('participants', arrayContains: userId) .snapshots() .map((snapshot) { final trips = snapshot.docs .map((doc) { try { final data = doc.data() as Map; return Trip.fromMap(data, doc.id); } catch (e) { return null; } }) .whereType() .toList(); return trips; }); } catch (e) { throw Exception('Erreur lors de la récupération des voyages: $e'); } } // Créer un voyage et retourner son ID Future createTrip(Trip trip) async { try { final tripData = trip.toMap(); // Ne pas modifier les timestamps ici, ils sont déjà au bon format final docRef = await _tripsCollection.add(tripData); return docRef.id; } catch (e) { throw Exception('Erreur lors de la création du voyage: $e'); } } // Récupérer un voyage par son ID Future getTripById(String tripId) async { try { final doc = await _tripsCollection.doc(tripId).get(); if (!doc.exists) { return null; } return Trip.fromMap(doc.data() as Map, doc.id); } catch (e) { throw Exception('Erreur lors de la récupération du voyage: $e'); } } // Mettre à jour un voyage Future updateTrip(String tripId, Trip trip) async { try { final tripData = trip.toMap(); // Mettre à jour le timestamp de modification tripData['updatedAt'] = Timestamp.now(); await _tripsCollection.doc(tripId).update(tripData); } catch (e) { throw Exception('Erreur lors de la mise à jour du voyage: $e'); } } // Supprimer un voyage Future deleteTrip(String tripId) async { try { await _tripsCollection.doc(tripId).delete(); } catch (e) { throw Exception('Erreur lors de la suppression du voyage: $e'); } } }