diff --git a/.auto-claude-status b/.auto-claude-status index f4301a9..c221313 100644 --- a/.auto-claude-status +++ b/.auto-claude-status @@ -3,23 +3,23 @@ "spec": "002-migrate-api-routes-from-http-to-grpc", "state": "building", "subtasks": { - "completed": 6, + "completed": 9, "total": 13, "in_progress": 1, "failed": 0 }, "phase": { - "current": "gRPC Client Implementation", + "current": "Provider Integration", "id": null, - "total": 4 + "total": 3 }, "workers": { "active": 0, "max": 1 }, "session": { - "number": 7, + "number": 10, "started_at": "2026-01-20T12:45:59.858836" }, - "last_update": "2026-01-20T13:03:21.219002" + "last_update": "2026-01-20T13:08:01.853317" } \ No newline at end of file diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart index d766883..1120529 100644 --- a/lib/providers/providers.dart +++ b/lib/providers/providers.dart @@ -95,6 +95,43 @@ final deliveryRoutesProvider = FutureProvider>((ref) async { return result.whenSuccess((routes) => routes) ?? []; }); +/// Provider for delivery routes using gRPC. +/// +/// This is the gRPC-based alternative to [deliveryRoutesProvider]. +/// Uses [GrpcCqrsApiClient] for improved performance and type safety. +/// +/// Example usage: +/// ```dart +/// final routes = ref.watch(grpcDeliveryRoutesProvider); +/// routes.when( +/// data: (data) => displayRoutes(data), +/// loading: () => showLoading(), +/// error: (error, stack) => showError(error), +/// ); +/// ``` +final grpcDeliveryRoutesProvider = FutureProvider>((ref) 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.getDeliveryRoutes(); + + return result.when( + success: (routes) => routes, + onError: (error) { + debugPrint('ERROR fetching delivery routes via gRPC: ${error.message}'); + if (error.originalException != null) { + debugPrint('Original exception: ${error.originalException}'); + } + throw Exception(error.message); + }, + ); +}); + final deliveriesProvider = FutureProvider.family, int>((ref, routeFragmentId) async { final authService = ref.watch(authServiceProvider); final isAuthenticated = await authService.isAuthenticated();