auto-claude: subtask-4-3 - Create gRPC-based deliveries provider
Add grpcDeliveriesProvider as a gRPC-based alternative to deliveriesProvider. The new provider uses GrpcCqrsApiClient.getDeliveries() for improved performance and type safety. Follows the existing pattern with: - FutureProvider.family pattern for route-specific queries - Authentication check before API calls - Result.when() for proper error handling - Warehouse delivery appended at the end Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -132,6 +132,47 @@ final grpcDeliveryRoutesProvider = FutureProvider<List<DeliveryRoute>>((ref) asy
|
||||
);
|
||||
});
|
||||
|
||||
/// Provider for deliveries using gRPC.
|
||||
///
|
||||
/// This is the gRPC-based alternative to [deliveriesProvider].
|
||||
/// Uses [GrpcCqrsApiClient] for improved performance and type safety.
|
||||
/// Takes a [routeFragmentId] parameter to fetch deliveries for a specific route.
|
||||
///
|
||||
/// Example usage:
|
||||
/// ```dart
|
||||
/// final deliveries = ref.watch(grpcDeliveriesProvider(routeFragmentId));
|
||||
/// deliveries.when(
|
||||
/// data: (data) => displayDeliveries(data),
|
||||
/// loading: () => showLoading(),
|
||||
/// error: (error, stack) => showError(error),
|
||||
/// );
|
||||
/// ```
|
||||
final grpcDeliveriesProvider = FutureProvider.family<List<Delivery>, int>((ref, routeFragmentId) async {
|
||||
final authService = ref.watch(authServiceProvider);
|
||||
final isAuthenticated = await authService.isAuthenticated();
|
||||
|
||||
if (!isAuthenticated) {
|
||||
throw Exception('User not authenticated');
|
||||
}
|
||||
|
||||
final grpcClient = ref.watch(grpcClientProvider);
|
||||
final result = await grpcClient.getDeliveries(routeFragmentId: routeFragmentId);
|
||||
|
||||
final deliveries = result.when(
|
||||
success: (deliveries) => deliveries,
|
||||
onError: (error) {
|
||||
debugPrint('ERROR fetching deliveries for route $routeFragmentId via gRPC: ${error.message}');
|
||||
if (error.originalException != null) {
|
||||
debugPrint('Original exception: ${error.originalException}');
|
||||
}
|
||||
throw Exception(error.message);
|
||||
},
|
||||
);
|
||||
|
||||
// Always append the warehouse delivery at the end
|
||||
return [...deliveries, Delivery.createWarehouseDelivery()];
|
||||
});
|
||||
|
||||
final deliveriesProvider = FutureProvider.family<List<Delivery>, int>((ref, routeFragmentId) async {
|
||||
final authService = ref.watch(authServiceProvider);
|
||||
final isAuthenticated = await authService.isAuthenticated();
|
||||
|
||||
Reference in New Issue
Block a user