diff --git a/frontend/app_flowy/lib/workspace/infrastructure/repos/user_repo.dart b/frontend/app_flowy/lib/user/application/user_listener.dart similarity index 65% rename from frontend/app_flowy/lib/workspace/infrastructure/repos/user_repo.dart rename to frontend/app_flowy/lib/user/application/user_listener.dart index 7514d3dcef..93149b3caf 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/repos/user_repo.dart +++ b/frontend/app_flowy/lib/user/application/user_listener.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'package:dartz/dartz.dart'; -import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'dart:typed_data'; @@ -10,65 +9,9 @@ import 'package:flowy_sdk/protobuf/dart-notify/protobuf.dart'; import 'package:flowy_sdk/protobuf/flowy-folder/dart_notification.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-user-data-model/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart'; -// import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart' as user_error; import 'package:flowy_sdk/protobuf/flowy-user/dart_notification.pb.dart' as user; import 'package:flowy_sdk/rust_stream.dart'; -class UserRepo { - final UserProfile user; - UserRepo({ - required this.user, - }); - - Future> fetchUserProfile({required String userId}) { - return UserEventGetUserProfile().send(); - } - - Future> deleteWorkspace({required String workspaceId}) { - throw UnimplementedError(); - } - - Future> signOut() { - return UserEventSignOut().send(); - } - - Future> initUser() async { - return UserEventInitUser().send(); - } - - Future, FlowyError>> getWorkspaces() { - final request = WorkspaceId.create(); - - return FolderEventReadWorkspaces(request).send().then((result) { - return result.fold( - (workspaces) => left(workspaces.items), - (error) => right(error), - ); - }); - } - - Future> openWorkspace(String workspaceId) { - final request = WorkspaceId.create()..value = workspaceId; - return FolderEventOpenWorkspace(request).send().then((result) { - return result.fold( - (workspace) => left(workspace), - (error) => right(error), - ); - }); - } - - Future> createWorkspace(String name, String desc) { - final request = CreateWorkspacePayload.create() - ..name = name - ..desc = desc; - return FolderEventCreateWorkspace(request).send().then((result) { - return result.fold( - (workspace) => left(workspace), - (error) => right(error), - ); - }); - } -} typedef UserProfileUpdatedNotifierValue = Either; typedef AuthNotifierValue = Either; diff --git a/frontend/app_flowy/lib/user/application/user_service.dart b/frontend/app_flowy/lib/user/application/user_service.dart new file mode 100644 index 0000000000..35486ac78b --- /dev/null +++ b/frontend/app_flowy/lib/user/application/user_service.dart @@ -0,0 +1,57 @@ +import 'dart:async'; +import 'package:dartz/dartz.dart'; +import 'package:flowy_sdk/dispatch/dispatch.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart'; + +class UserService { + Future> fetchUserProfile({required String userId}) { + return UserEventGetUserProfile().send(); + } + + Future> deleteWorkspace({required String workspaceId}) { + throw UnimplementedError(); + } + + Future> signOut() { + return UserEventSignOut().send(); + } + + Future> initUser() async { + return UserEventInitUser().send(); + } + + Future, FlowyError>> getWorkspaces() { + final request = WorkspaceId.create(); + + return FolderEventReadWorkspaces(request).send().then((result) { + return result.fold( + (workspaces) => left(workspaces.items), + (error) => right(error), + ); + }); + } + + Future> openWorkspace(String workspaceId) { + final request = WorkspaceId.create()..value = workspaceId; + return FolderEventOpenWorkspace(request).send().then((result) { + return result.fold( + (workspace) => left(workspace), + (error) => right(error), + ); + }); + } + + Future> createWorkspace(String name, String desc) { + final request = CreateWorkspacePayload.create() + ..name = name + ..desc = desc; + return FolderEventCreateWorkspace(request).send().then((result) { + return result.fold( + (workspace) => left(workspace), + (error) => right(error), + ); + }); + } +} diff --git a/frontend/app_flowy/lib/user/infrastructure/router.dart b/frontend/app_flowy/lib/user/infrastructure/router.dart index 2fb15420b5..2a54e6c059 100644 --- a/frontend/app_flowy/lib/user/infrastructure/router.dart +++ b/frontend/app_flowy/lib/user/infrastructure/router.dart @@ -4,7 +4,6 @@ import 'package:app_flowy/user/presentation/sign_in_screen.dart'; import 'package:app_flowy/user/presentation/sign_up_screen.dart'; import 'package:app_flowy/user/presentation/skip_log_in_screen.dart'; import 'package:app_flowy/user/presentation/welcome_screen.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; import 'package:app_flowy/workspace/presentation/home/home_screen.dart'; import 'package:flowy_infra/time/duration.dart'; import 'package:flowy_infra_ui/widget/route/animation.dart'; @@ -38,9 +37,8 @@ class AuthRouter { } class SplashRoute { - Future pushWelcomeScreen(BuildContext context, UserProfile user) async { - final repo = UserRepo(user: user); - final screen = WelcomeScreen(repo: repo); + Future pushWelcomeScreen(BuildContext context, UserProfile userProfile) async { + final screen = WelcomeScreen(userProfile: userProfile); final workspaceId = await Navigator.of(context).push( PageRoutes.fade( () => screen, @@ -48,7 +46,7 @@ class SplashRoute { ), ); - pushHomeScreen(context, repo.user, workspaceId); + pushHomeScreen(context, userProfile, workspaceId); } void pushHomeScreen(BuildContext context, UserProfile userProfile, CurrentWorkspaceSetting workspaceSetting) { diff --git a/frontend/app_flowy/lib/user/presentation/skip_log_in_screen.dart b/frontend/app_flowy/lib/user/presentation/skip_log_in_screen.dart index f86feb8226..bff30b8521 100644 --- a/frontend/app_flowy/lib/user/presentation/skip_log_in_screen.dart +++ b/frontend/app_flowy/lib/user/presentation/skip_log_in_screen.dart @@ -1,7 +1,7 @@ +import 'package:app_flowy/user/application/user_listener.dart'; import 'package:app_flowy/user/infrastructure/router.dart'; import 'package:app_flowy/user/infrastructure/repos/auth_repo.dart'; import 'package:app_flowy/user/presentation/widgets/background.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/size.dart'; import 'package:flowy_infra/theme.dart'; diff --git a/frontend/app_flowy/lib/user/presentation/welcome_screen.dart b/frontend/app_flowy/lib/user/presentation/welcome_screen.dart index f1b8f2c3bf..81f7cfb50f 100644 --- a/frontend/app_flowy/lib/user/presentation/welcome_screen.dart +++ b/frontend/app_flowy/lib/user/presentation/welcome_screen.dart @@ -6,22 +6,22 @@ import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/widget/error_page.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; import 'package:app_flowy/generated/locale_keys.g.dart'; class WelcomeScreen extends StatelessWidget { - final UserRepo repo; + final UserProfile userProfile; const WelcomeScreen({ Key? key, - required this.repo, + required this.userProfile, }) : super(key: key); @override Widget build(BuildContext context) { return BlocProvider( - create: (_) => getIt(param1: repo.user)..add(const WelcomeEvent.initial()), + create: (_) => getIt(param1: userProfile)..add(const WelcomeEvent.initial()), child: BlocBuilder( builder: (context, state) { return Scaffold( diff --git a/frontend/app_flowy/lib/workspace/application/home/home_listen_bloc.dart b/frontend/app_flowy/lib/workspace/application/home/home_listen_bloc.dart index 5285c067df..f3da1af678 100644 --- a/frontend/app_flowy/lib/workspace/application/home/home_listen_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/home/home_listen_bloc.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; +import 'package:app_flowy/user/application/user_listener.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; diff --git a/frontend/app_flowy/lib/workspace/application/menu/menu_user_bloc.dart b/frontend/app_flowy/lib/workspace/application/menu/menu_user_bloc.dart index e8c5dfb0b7..5129612ecb 100644 --- a/frontend/app_flowy/lib/workspace/application/menu/menu_user_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/menu/menu_user_bloc.dart @@ -1,4 +1,5 @@ -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; +import 'package:app_flowy/user/application/user_listener.dart'; +import 'package:app_flowy/user/application/user_service.dart'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; @@ -10,16 +11,17 @@ import 'package:dartz/dartz.dart'; part 'menu_user_bloc.freezed.dart'; class MenuUserBloc extends Bloc { - final UserRepo repo; - final UserListener listener; + final UserService userService; + final UserListener userListener; + final UserProfile userProfile; - MenuUserBloc(this.repo, this.listener) : super(MenuUserState.initial(repo.user)) { + MenuUserBloc(this.userProfile, this.userService, this.userListener) : super(MenuUserState.initial(userProfile)) { on((event, emit) async { await event.map( initial: (_) async { - listener.profileUpdatedNotifier.addPublishListener(_profileUpdated); - listener.workspaceUpdatedNotifier.addPublishListener(_workspacesUpdated); - listener.start(); + userListener.profileUpdatedNotifier.addPublishListener(_profileUpdated); + userListener.workspaceUpdatedNotifier.addPublishListener(_workspacesUpdated); + userListener.start(); await _initUser(); }, fetchWorkspaces: (_FetchWorkspaces value) async {}, @@ -29,12 +31,12 @@ class MenuUserBloc extends Bloc { @override Future close() async { - await listener.stop(); + await userListener.stop(); super.close(); } Future _initUser() async { - final result = await repo.initUser(); + final result = await userService.initUser(); result.fold((l) => null, (error) => Log.error(error)); } diff --git a/frontend/app_flowy/lib/workspace/application/workspace/welcome_bloc.dart b/frontend/app_flowy/lib/workspace/application/workspace/welcome_bloc.dart index b613109f11..8276331d10 100644 --- a/frontend/app_flowy/lib/workspace/application/workspace/welcome_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/workspace/welcome_bloc.dart @@ -1,4 +1,5 @@ -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; +import 'package:app_flowy/user/application/user_listener.dart'; +import 'package:app_flowy/user/application/user_service.dart'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; @@ -9,14 +10,14 @@ import 'package:dartz/dartz.dart'; part 'welcome_bloc.freezed.dart'; class WelcomeBloc extends Bloc { - final UserRepo repo; - final UserListener listener; - WelcomeBloc({required this.repo, required this.listener}) : super(WelcomeState.initial()) { + final UserService userService; + final UserListener userListener; + WelcomeBloc({required this.userService, required this.userListener}) : super(WelcomeState.initial()) { on( (event, emit) async { await event.map(initial: (e) async { - listener.workspaceUpdatedNotifier.addPublishListener(_workspacesUpdated); - listener.start(); + userListener.workspaceUpdatedNotifier.addPublishListener(_workspacesUpdated); + userListener.start(); // await _fetchWorkspaces(emit); }, openWorkspace: (e) async { @@ -35,12 +36,12 @@ class WelcomeBloc extends Bloc { @override Future close() async { - await listener.stop(); + await userListener.stop(); super.close(); } Future _fetchWorkspaces(Emitter emit) async { - final workspacesOrFailed = await repo.getWorkspaces(); + final workspacesOrFailed = await userService.getWorkspaces(); emit(workspacesOrFailed.fold( (workspaces) => state.copyWith(workspaces: workspaces, successOrFailure: left(unit)), (error) { @@ -51,7 +52,7 @@ class WelcomeBloc extends Bloc { } Future _openWorkspace(Workspace workspace, Emitter emit) async { - final result = await repo.openWorkspace(workspace.id); + final result = await userService.openWorkspace(workspace.id); emit(result.fold( (workspaces) => state.copyWith(successOrFailure: left(unit)), (error) { @@ -62,7 +63,7 @@ class WelcomeBloc extends Bloc { } Future _createWorkspace(String name, String desc, Emitter emit) async { - final result = await repo.createWorkspace(name, desc); + final result = await userService.createWorkspace(name, desc); emit(result.fold( (workspace) { return state.copyWith(successOrFailure: left(unit)); diff --git a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart index bb35d26bbd..125a93f2cf 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart +++ b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart @@ -1,3 +1,5 @@ +import 'package:app_flowy/user/application/user_listener.dart'; +import 'package:app_flowy/user/application/user_service.dart'; import 'package:app_flowy/workspace/application/app/app_bloc.dart'; import 'package:app_flowy/workspace/application/app/app_listener.dart'; import 'package:app_flowy/workspace/application/app/app_service.dart'; @@ -17,7 +19,6 @@ import 'package:app_flowy/workspace/application/workspace/welcome_bloc.dart'; import 'package:app_flowy/workspace/application/workspace/workspace_listener.dart'; import 'package:app_flowy/workspace/application/workspace/workspace_service.dart'; import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart'; @@ -38,8 +39,8 @@ class HomeDepsResolver { getIt.registerLazySingleton(() => HomeStackManager()); getIt.registerFactoryParam( (user, _) => WelcomeBloc( - repo: UserRepo(user: user), - listener: getIt(param1: user), + userService: UserService(), + userListener: getIt(param1: user), ), ); @@ -71,7 +72,8 @@ class HomeDepsResolver { getIt.registerFactoryParam( (user, _) => MenuUserBloc( - UserRepo(user: user), + user, + UserService(), getIt(param1: user), ), );