From 289b3e31e71f4fb925c1f6550f19a2772bc42d41 Mon Sep 17 00:00:00 2001 From: MikeWallaceDev Date: Mon, 28 Feb 2022 23:06:36 -0500 Subject: [PATCH] refactor: Put View business logic in a service --- .../workspace/application/doc/doc_bloc.dart | 2 +- .../workspace/application/view/view_bloc.dart | 20 +++++----- .../view/view_listener.dart} | 40 +------------------ .../application/view/view_service.dart | 36 +++++++++++++++++ .../infrastructure/deps_resolver.dart | 6 ++- .../stack_page/doc/doc_stack_page.dart | 9 +++-- 6 files changed, 58 insertions(+), 55 deletions(-) rename frontend/app_flowy/lib/workspace/{infrastructure/repos/view_repo.dart => application/view/view_listener.dart} (71%) create mode 100644 frontend/app_flowy/lib/workspace/application/view/view_service.dart diff --git a/frontend/app_flowy/lib/workspace/application/doc/doc_bloc.dart b/frontend/app_flowy/lib/workspace/application/doc/doc_bloc.dart index c8f51c6256..6553c5b959 100644 --- a/frontend/app_flowy/lib/workspace/application/doc/doc_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/doc/doc_bloc.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:app_flowy/workspace/application/doc/doc_service.dart'; import 'package:app_flowy/workspace/application/trash/trash_service.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/view_repo.dart'; +import 'package:app_flowy/workspace/application/view/view_listener.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/trash.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; diff --git a/frontend/app_flowy/lib/workspace/application/view/view_bloc.dart b/frontend/app_flowy/lib/workspace/application/view/view_bloc.dart index 4bdc939e9a..1528600236 100644 --- a/frontend/app_flowy/lib/workspace/application/view/view_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/view/view_bloc.dart @@ -1,4 +1,5 @@ -import 'package:app_flowy/workspace/infrastructure/repos/view_repo.dart'; +import 'package:app_flowy/workspace/application/view/view_listener.dart'; +import 'package:app_flowy/workspace/application/view/view_service.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; @@ -8,18 +9,19 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'view_bloc.freezed.dart'; class ViewBloc extends Bloc { - final ViewRepository repo; - + final ViewService service; final ViewListener listener; + final View view; ViewBloc({ - required this.repo, + required this.view, + required this.service, required this.listener, - }) : super(ViewState.init(repo.view)) { + }) : super(ViewState.init(view)) { on((event, emit) async { await event.map( initial: (e) { - // TODO: Listener can be refctored to a stream. + // TODO: Listener can be refactored to a stream. listener.updatedNotifier.addPublishListener((result) { // emit.forEach(stream, onData: onData) add(ViewEvent.viewDidUpdate(result)); @@ -37,7 +39,7 @@ class ViewBloc extends Bloc { ); }, rename: (e) async { - final result = await repo.updateView(name: e.newName); + final result = await service.updateView(viewId: view.id, name: e.newName); emit( result.fold( (l) => state.copyWith(successOrFailure: left(unit)), @@ -46,7 +48,7 @@ class ViewBloc extends Bloc { ); }, delete: (e) async { - final result = await repo.delete(); + final result = await service.delete(viewId: view.id); emit( result.fold( (l) => state.copyWith(successOrFailure: left(unit)), @@ -55,7 +57,7 @@ class ViewBloc extends Bloc { ); }, duplicate: (e) async { - final result = await repo.duplicate(); + final result = await service.duplicate(viewId: view.id); emit( result.fold( (l) => state.copyWith(successOrFailure: left(unit)), diff --git a/frontend/app_flowy/lib/workspace/infrastructure/repos/view_repo.dart b/frontend/app_flowy/lib/workspace/application/view/view_listener.dart similarity index 71% rename from frontend/app_flowy/lib/workspace/infrastructure/repos/view_repo.dart rename to frontend/app_flowy/lib/workspace/application/view/view_listener.dart index 407b7d62fb..e3c3142fcb 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/repos/view_repo.dart +++ b/frontend/app_flowy/lib/workspace/application/view/view_listener.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:typed_data'; +import 'package:app_flowy/workspace/infrastructure/repos/helper.dart'; import 'package:dartz/dartz.dart'; -import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/dart-notify/subject.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; @@ -9,44 +9,6 @@ import 'package:flowy_sdk/protobuf/flowy-folder/dart_notification.pb.dart'; import 'package:flowy_sdk/rust_stream.dart'; import 'package:flowy_infra/notifier.dart'; -import 'helper.dart'; - -class ViewRepository { - View view; - ViewRepository({ - required this.view, - }); - - Future> readView() { - final request = ViewId(value: view.id); - return FolderEventReadView(request).send(); - } - - Future> updateView({String? name, String? desc}) { - final request = UpdateViewPayload.create()..viewId = view.id; - - if (name != null) { - request.name = name; - } - - if (desc != null) { - request.desc = desc; - } - - return FolderEventUpdateView(request).send(); - } - - Future> delete() { - final request = RepeatedViewId.create()..items.add(view.id); - return FolderEventDeleteView(request).send(); - } - - Future> duplicate() { - final request = ViewId(value: view.id); - return FolderEventDuplicateView(request).send(); - } -} - typedef DeleteNotifierValue = Either; typedef UpdateNotifierValue = Either; typedef RestoreNotifierValue = Either; diff --git a/frontend/app_flowy/lib/workspace/application/view/view_service.dart b/frontend/app_flowy/lib/workspace/application/view/view_service.dart new file mode 100644 index 0000000000..d3d08b0709 --- /dev/null +++ b/frontend/app_flowy/lib/workspace/application/view/view_service.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:dartz/dartz.dart'; +import 'package:flowy_sdk/dispatch/dispatch.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; + +class ViewService { + Future> readView({required String viewId}) { + final request = ViewId(value: viewId); + return FolderEventReadView(request).send(); + } + + Future> updateView({required String viewId, String? name, String? desc}) { + final request = UpdateViewPayload.create()..viewId = viewId; + + if (name != null) { + request.name = name; + } + + if (desc != null) { + request.desc = desc; + } + + return FolderEventUpdateView(request).send(); + } + + Future> delete({required String viewId}) { + final request = RepeatedViewId.create()..items.add(viewId); + return FolderEventDeleteView(request).send(); + } + + Future> duplicate({required String viewId}) { + final request = ViewId(value: viewId); + return FolderEventDuplicateView(request).send(); + } +} diff --git a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart index 255b18e593..bb35d26bbd 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart +++ b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart @@ -11,12 +11,13 @@ import 'package:app_flowy/workspace/application/trash/trash_bloc.dart'; import 'package:app_flowy/workspace/application/trash/trash_listener.dart'; import 'package:app_flowy/workspace/application/trash/trash_service.dart'; import 'package:app_flowy/workspace/application/view/view_bloc.dart'; +import 'package:app_flowy/workspace/application/view/view_listener.dart'; +import 'package:app_flowy/workspace/application/view/view_service.dart'; 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:app_flowy/workspace/infrastructure/repos/view_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'; @@ -53,7 +54,8 @@ class HomeDepsResolver { getIt.registerFactoryParam( (view, _) => ViewBloc( - repo: ViewRepository(view: view), + view: view, + service: ViewService(), listener: getIt(param1: view), ), ); diff --git a/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart b/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart index 8094a81f73..3419df42ae 100644 --- a/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart +++ b/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart @@ -1,9 +1,10 @@ import 'package:app_flowy/startup/startup.dart'; import 'package:app_flowy/workspace/application/appearance.dart'; import 'package:app_flowy/workspace/application/doc/share_bloc.dart'; +import 'package:app_flowy/workspace/application/view/view_listener.dart'; +import 'package:app_flowy/workspace/application/view/view_service.dart'; import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart'; import 'package:app_flowy/workspace/domain/view_ext.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/view_repo.dart'; import 'package:app_flowy/workspace/presentation/widgets/dialogs.dart'; import 'package:app_flowy/workspace/presentation/widgets/pop_up_action.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -92,11 +93,11 @@ class DocumentLeftBarItem extends StatefulWidget { class _DocumentLeftBarItemState extends State { final _controller = TextEditingController(); final _focusNode = FocusNode(); - late ViewRepository repo; + late ViewService service; @override void initState() { - repo = ViewRepository(view: widget.view); + service = ViewService(/*view: widget.view*/); _focusNode.addListener(_handleFocusChanged); super.initState(); } @@ -143,7 +144,7 @@ class _DocumentLeftBarItemState extends State { } if (_controller.text != widget.view.name) { - repo.updateView(name: _controller.text); + service.updateView(viewId: widget.view.id, name: _controller.text); } } }