watch<T> method
Watches an endpoint for changes (Streams).
Implementation
@override
Stream<T> watch<T>(
Endpoint endpoint, {
Map<String, dynamic>? queryParams,
Map<String, String>? pathParams,
}) {
final path = endpoint.buildPath(pathParams);
if (endpoint.requiresAuth && _auth.currentUser == null) {
throw Exception('Authentication required for watching: ${endpoint.id}');
}
final pathSegments = path.split('/').where((s) => s.isNotEmpty).toList();
if (pathSegments.length % 2 == 0) {
// Watch Document
return _firestore.doc(path).snapshots().map((snapshot) {
final data = snapshot.data();
if (data == null) throw Exception('Document not found at $path');
final enrichedData = _attachMetadata(data, snapshot.id);
return endpoint.parser != null
? endpoint.parser!(enrichedData) as T
: enrichedData as T;
});
} else {
// Watch Collection
final query = _applyQueries(_firestore.collection(path), queryParams);
return query.snapshots().map((snapshot) {
final list = snapshot.docs
.map((d) => _attachMetadata(d.data() as Map<String, dynamic>, d.id))
.toList();
return endpoint.parser != null
? endpoint.parser!(list) as T
: list as T;
});
}
}