diff --git a/lib/core/api/v1/projects.dart b/lib/core/api/v1/projects.dart new file mode 100644 index 0000000..2ec95ad --- /dev/null +++ b/lib/core/api/v1/projects.dart @@ -0,0 +1,36 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:grpc/grpc_web.dart'; +import 'package:softplayer_dart_proto/projects/v1/projects_v1.pbgrpc.dart'; +import 'package:softplayer_web/core/grpc/grpc_client.dart'; + +final projectsGrpcProvider = Provider((ref) { + return ProjectsGrpcRepository(ref.watch(projectsServiceClientProvider)); +}); + +class ProjectsGrpcRepository { + ProjectsGrpcRepository(this._client); + final ProjectsServiceClient _client; + + ResponseFuture createProject( + CreateProjectRequest data, + ) { + try { + final response = _client.createProject(data); + return response; + } catch (e) { + rethrow; + } + } + + Stream listProjects() async* { + try { + await for (final projects in _client.listProjects( + ListProjectsRequest(), + )) { + yield projects; + } + } catch (error) { + rethrow; + } + } +} diff --git a/lib/core/grpc/grpc_client.dart b/lib/core/grpc/grpc_client.dart index 6f1e55c..4cb0ef4 100644 --- a/lib/core/grpc/grpc_client.dart +++ b/lib/core/grpc/grpc_client.dart @@ -1,5 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:softplayer_dart_proto/accounts/v1/accounts_v1.pbgrpc.dart'; +import 'package:softplayer_dart_proto/projects/v1/projects_v1.pbgrpc.dart'; import 'package:softplayer_dart_proto/test/v1/test_v1.pbgrpc.dart'; import 'package:softplayer_web/core/grpc/grpc_auth_interceptor.dart'; import 'package:softplayer_web/core/tokens/application/tokens_application.dart'; @@ -41,6 +42,23 @@ final accountsServiceClientProvider = Provider((ref) { ); }); +final projectsServiceClientProvider = Provider((ref) { + final channel = ref.watch(grpcChannelProvider); + final tokenState = ref.read(tokensControllerProvider).value; + if (tokenState == null) { + throw Exception("Token state is not initialized"); + } + return ProjectsServiceClient( + channel, + interceptors: [ + AuthInterceptor( + getAccessToken: tokenState.getAccessToken, + getRefreshToken: tokenState.getRefreshToken, + ), + ], + ); +}); + final publicAccountsServiceClientProvider = Provider((ref) { final channel = ref.watch(grpcChannelProvider);