From f76d722b4cc4072e61e666dc2671c4151d12fdd8 Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Tue, 21 Feb 2023 15:47:51 +0800 Subject: [PATCH] Feat/database view (#1875) * chore: rename structs * chore: add todos * chore: hidden database id * refactor: add database folder, prepare to extract the view * refactor: rename grid-model to datbase-model * ci: fix warnings --- .github/workflows/tauri_ci.yaml | 2 +- .../application/board_data_controller.dart | 2 +- .../cell/cell_service/cell_controller.dart | 2 +- .../grid/application/cell/date_cal_bloc.dart | 2 +- .../field/field_action_sheet_bloc.dart | 2 +- .../application/field/field_cell_bloc.dart | 4 +- .../application/field/field_controller.dart | 4 +- .../application/field/field_editor_bloc.dart | 2 +- .../grid/application/field/field_service.dart | 20 +- .../type_option/type_option_context.dart | 18 +- .../type_option_data_controller.dart | 7 +- .../filter/checkbox_filter_editor_bloc.dart | 2 +- .../filter/checklist_filter_bloc.dart | 2 +- .../filter/filter_create_bloc.dart | 2 +- .../application/filter/filter_service.dart | 14 +- .../filter/select_option_filter_bloc.dart | 2 +- .../filter/text_filter_editor_bloc.dart | 2 +- .../application/grid_data_controller.dart | 2 +- .../grid/application/grid_header_bloc.dart | 2 +- .../grid/application/grid_service.dart | 18 +- .../grid/application/row/row_cache.dart | 2 +- .../grid/application/row/row_detail_bloc.dart | 2 +- .../grid/application/row/row_service.dart | 8 +- .../application/setting/property_bloc.dart | 2 +- .../application/setting/setting_service.dart | 4 +- .../grid/application/sort/sort_service.dart | 10 +- .../header/field_cell_action_sheet.dart | 8 +- .../widgets/header/grid_header.dart | 6 +- .../widgets/header/type_option/builder.dart | 4 +- .../presentation/widgets/row/row_detail.dart | 4 +- .../widgets/toolbar/grid_property.dart | 2 +- .../board_test/create_or_edit_field_test.dart | 2 +- .../test/bloc_test/board_test/util.dart | 8 +- .../grid_test/field/edit_field_test.dart | 4 +- .../grid_test/filter/create_filter_test.dart | 14 +- .../filter/edit_filter_field_test.dart | 4 +- .../grid_test/filter/filter_menu_test.dart | 4 +- .../filter/filter_rows_by_checkbox_test.dart | 4 +- .../filter/filter_rows_by_text_test.dart | 8 +- .../test/bloc_test/grid_test/util.dart | 8 +- frontend/appflowy_tauri/src-tauri/Cargo.lock | 30 +- .../effects/database/backend_service.ts | 6 +- .../effects/database/field/backend_service.ts | 12 +- frontend/rust-lib/Cargo.lock | 30 +- .../rust-lib/flowy-client-sync/Cargo.toml | 2 +- .../src/client_database/block_revision_pad.rs | 85 +- .../src/client_database/database_builder.rs | 7 +- .../client_database/database_revision_pad.rs | 85 +- ...n_pad.rs => database_view_revision_pad.rs} | 28 +- .../src/client_database/mod.rs | 4 +- frontend/rust-lib/flowy-core/Cargo.toml | 2 +- .../src/deps_resolve/folder_deps.rs | 34 +- frontend/rust-lib/flowy-database/Cargo.toml | 2 +- .../src/entities/cell_entities.rs | 2 +- .../src/entities/field_entities.rs | 89 +- .../filter_entities/checkbox_filter.rs | 2 +- .../filter_entities/checklist_filter.rs | 2 +- .../entities/filter_entities/date_filter.rs | 2 +- .../entities/filter_entities/number_filter.rs | 2 +- .../filter_entities/select_option_filter.rs | 2 +- .../entities/filter_entities/text_filter.rs | 2 +- .../src/entities/filter_entities/util.rs | 2 +- .../src/entities/grid_entities.rs | 4 +- .../entities/group_entities/configuration.rs | 2 +- .../src/entities/group_entities/group.rs | 9 +- .../src/entities/row_entities.rs | 20 +- .../src/entities/setting_entities.rs | 10 +- .../src/entities/sort_entities.rs | 2 +- .../flowy-database/src/event_handler.rs | 74 +- .../rust-lib/flowy-database/src/event_map.rs | 16 +- .../rust-lib/flowy-database/src/manager.rs | 47 +- .../src/services/cell/cell_operation.rs | 2 +- .../src/services/cell/type_cell_data.rs | 2 +- .../services/{ => database}/block_editor.rs | 37 +- .../services/{ => database}/block_manager.rs | 37 +- .../database_editor.rs} | 293 +++-- .../src/services/database/mod.rs | 10 + .../src/services/{ => database}/retry.rs | 6 +- .../trait_impl.rs} | 14 +- .../{view_editor => database_view}/editor.rs | 52 +- .../editor_manager.rs | 18 +- .../{view_editor => database_view}/mod.rs | 4 +- .../notifier.rs} | 7 +- .../trait_impl.rs | 31 +- .../src/services/field/field_builder.rs | 2 +- .../src/services/field/field_operation.rs | 6 +- .../src/services/field/type_option_builder.rs | 2 +- .../checkbox_type_option/checkbox_tests.rs | 2 +- .../checkbox_type_option.rs | 2 +- .../date_type_option/date_tests.rs | 2 +- .../date_type_option/date_type_option.rs | 2 +- .../number_type_option/number_tests.rs | 2 +- .../number_type_option/number_type_option.rs | 2 +- .../checklist_type_option.rs | 2 +- .../multi_select_type_option.rs | 2 +- .../select_type_option.rs | 2 +- .../single_select_type_option.rs | 2 +- .../type_option_transform.rs | 2 +- .../text_type_option/text_type_option.rs | 2 +- .../field/type_options/type_option.rs | 2 +- .../field/type_options/type_option_cell.rs | 2 +- .../type_options/url_type_option/url_tests.rs | 2 +- .../url_type_option/url_type_option.rs | 2 +- .../src/services/filter/controller.rs | 8 +- .../src/services/filter/entities.rs | 2 +- .../src/services/group/action.rs | 2 +- .../src/services/group/configuration.rs | 4 +- .../src/services/group/controller.rs | 4 +- .../controller_impls/checkbox_controller.rs | 2 +- .../controller_impls/default_controller.rs | 2 +- .../multi_select_controller.rs | 2 +- .../single_select_controller.rs | 2 +- .../select_option_controller/util.rs | 2 +- .../group/controller_impls/url_controller.rs | 4 +- .../src/services/group/group_util.rs | 4 +- .../flowy-database/src/services/mod.rs | 8 +- .../src/services/persistence/migration.rs | 2 +- .../src/services/row/row_builder.rs | 2 +- .../src/services/row/row_loader.rs | 2 +- .../src/services/setting/setting_builder.rs | 2 +- .../src/services/sort/controller.rs | 8 +- .../src/services/sort/entities.rs | 2 +- frontend/rust-lib/flowy-database/src/util.rs | 2 +- .../tests/grid/block_test/block_test.rs | 8 +- .../tests/grid/block_test/row_test.rs | 2 +- .../tests/grid/block_test/script.rs | 14 +- .../tests/grid/block_test/util.rs | 2 +- .../tests/grid/database_editor.rs | 6 +- .../tests/grid/field_test/script.rs | 4 +- .../tests/grid/field_test/util.rs | 6 +- .../tests/grid/filter_test/script.rs | 4 +- .../flowy-database/tests/grid/grid_editor.rs | 1030 +++++++++-------- .../flowy-database/tests/grid/grid_test.rs | 639 +++++----- .../tests/grid/group_test/script.rs | 4 +- .../tests/grid/mock_data/board_mock_data.rs | 2 +- .../grid/mock_data/calendar_mock_data.rs | 2 +- .../tests/grid/mock_data/grid_mock_data.rs | 2 +- .../flowy-database/tests/grid/script.rs | 685 ++++++----- .../tests/grid/snapshot_test/script.rs | 4 +- .../grid/sort_test/checkbox_and_text_test.rs | 2 +- .../tests/grid/sort_test/multi_sort_test.rs | 2 +- .../tests/grid/sort_test/script.rs | 4 +- .../tests/grid/sort_test/single_sort_test.rs | 2 +- .../persistence/version_1/view_sql.rs | 29 +- .../flowy-net/src/local_server/server.rs | 24 +- frontend/scripts/makefile/tauri.toml | 2 +- shared-lib/Cargo.lock | 24 +- shared-lib/Cargo.toml | 2 +- .../{grid-model => database-model}/Cargo.toml | 2 +- .../src/block_rev.rs} | 0 .../src/database_rev.rs} | 33 +- .../src/filter_rev.rs | 0 .../src/group_rev.rs | 4 +- shared-lib/database-model/src/lib.rs | 15 + .../src/setting_rev.rs} | 7 +- .../src/sort_rev.rs | 0 .../src/view_rev.rs} | 9 +- shared-lib/folder-model/src/user_default.rs | 20 +- shared-lib/folder-model/src/view_rev.rs | 33 +- shared-lib/grid-model/src/lib.rs | 15 - 160 files changed, 2152 insertions(+), 1947 deletions(-) rename frontend/rust-lib/flowy-client-sync/src/client_database/{view_revision_pad.rs => database_view_revision_pad.rs} (92%) rename frontend/rust-lib/flowy-database/src/services/{ => database}/block_editor.rs (84%) rename frontend/rust-lib/flowy-database/src/services/{ => database}/block_manager.rs (89%) rename frontend/rust-lib/flowy-database/src/services/{grid_editor.rs => database/database_editor.rs} (78%) create mode 100644 frontend/rust-lib/flowy-database/src/services/database/mod.rs rename frontend/rust-lib/flowy-database/src/services/{ => database}/retry.rs (82%) rename frontend/rust-lib/flowy-database/src/services/{grid_editor_trait_impl.rs => database/trait_impl.rs} (87%) rename frontend/rust-lib/flowy-database/src/services/{view_editor => database_view}/editor.rs (95%) rename frontend/rust-lib/flowy-database/src/services/{view_editor => database_view}/editor_manager.rs (95%) rename frontend/rust-lib/flowy-database/src/services/{view_editor => database_view}/mod.rs (65%) rename frontend/rust-lib/flowy-database/src/services/{view_editor/changed_notifier.rs => database_view/notifier.rs} (93%) rename frontend/rust-lib/flowy-database/src/services/{view_editor => database_view}/trait_impl.rs (90%) rename shared-lib/{grid-model => database-model}/Cargo.toml (93%) rename shared-lib/{grid-model/src/grid_block.rs => database-model/src/block_rev.rs} (100%) rename shared-lib/{grid-model/src/grid_rev.rs => database-model/src/database_rev.rs} (88%) rename shared-lib/{grid-model => database-model}/src/filter_rev.rs (100%) rename shared-lib/{grid-model => database-model}/src/group_rev.rs (98%) create mode 100644 shared-lib/database-model/src/lib.rs rename shared-lib/{grid-model/src/grid_setting_rev.rs => database-model/src/setting_rev.rs} (97%) rename shared-lib/{grid-model => database-model}/src/sort_rev.rs (100%) rename shared-lib/{grid-model/src/grid_view.rs => database-model/src/view_rev.rs} (90%) delete mode 100644 shared-lib/grid-model/src/lib.rs diff --git a/.github/workflows/tauri_ci.yaml b/.github/workflows/tauri_ci.yaml index 752784ef52..419ed95535 100644 --- a/.github/workflows/tauri_ci.yaml +++ b/.github/workflows/tauri_ci.yaml @@ -74,7 +74,7 @@ jobs: run: | mkdir dist npm install - cargo make --cwd .. build_tauri_backend + cargo make --cwd .. tauri_build yarn && yarn build - uses: tauri-apps/tauri-action@v0 diff --git a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart index f68983e053..00d8e520b0 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart @@ -45,7 +45,7 @@ class BoardDataController { BoardDataController({required ViewPB view}) : viewId = view.id, _listener = BoardListener(view.id), - _databaseFFIService = DatabaseFFIService(databaseId: view.id), + _databaseFFIService = DatabaseFFIService(viewId: view.id), fieldController = GridFieldController(databaseId: view.id) { // _viewCache = DatabaseViewCache( diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart index b32fd124c7..1a59d443ca 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart @@ -152,7 +152,7 @@ class GridCellController extends Equatable { _cellDataPersistence = cellDataPersistence, _fieldNotifier = fieldNotifier, _fieldService = FieldService( - databaseId: cellId.databaseId, + viewId: cellId.databaseId, fieldId: cellId.fieldInfo.id, ), _cacheKey = GridCellCacheKey( diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart index 60e017d90d..791752dac8 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart @@ -175,7 +175,7 @@ class DateCalBloc extends Bloc { }); final result = await FieldService.updateFieldTypeOption( - databaseId: cellController.databaseId, + viewId: cellController.databaseId, fieldId: cellController.fieldInfo.id, typeOptionData: newDateTypeOption.writeToBuffer(), ); diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart index 87126801be..c6add37b80 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart @@ -13,7 +13,7 @@ class FieldActionSheetBloc FieldActionSheetBloc({required GridFieldCellContext fieldCellContext}) : fieldService = FieldService( - databaseId: fieldCellContext.databaseId, + viewId: fieldCellContext.viewId, fieldId: fieldCellContext.field.id, ), super( diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart index 6e5717b86b..2ba48eaa55 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart @@ -16,7 +16,7 @@ class FieldCellBloc extends Bloc { required GridFieldCellContext cellContext, }) : _fieldListener = SingleFieldListener(fieldId: cellContext.field.id), _fieldService = FieldService( - databaseId: cellContext.databaseId, fieldId: cellContext.field.id), + viewId: cellContext.viewId, fieldId: cellContext.field.id), super(FieldCellState.initial(cellContext)) { on( (event, emit) async { @@ -80,7 +80,7 @@ class FieldCellState with _$FieldCellState { factory FieldCellState.initial(GridFieldCellContext cellContext) => FieldCellState( - databaseId: cellContext.databaseId, + databaseId: cellContext.viewId, field: cellContext.field, width: cellContext.field.width.toDouble(), ); diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart index 811729016f..523c6e020a 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart @@ -150,9 +150,9 @@ class GridFieldController { GridFieldController({required this.databaseId}) : _fieldListener = DatabaseFieldsListener(databaseId: databaseId), _settingListener = DatabaseSettingListener(databaseId: databaseId), - _filterFFIService = FilterFFIService(databaseId: databaseId), + _filterFFIService = FilterFFIService(viewId: databaseId), _filtersListener = FiltersListener(viewId: databaseId), - _gridFFIService = DatabaseFFIService(databaseId: databaseId), + _gridFFIService = DatabaseFFIService(viewId: databaseId), _sortFFIService = SortFFIService(viewId: databaseId), _sortsListener = SortsListener(viewId: databaseId), _settingFFIService = SettingFFIService(viewId: databaseId) { diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart index 7461906765..3a4012c5f9 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart @@ -49,7 +49,7 @@ class FieldEditorBloc extends Bloc { () => null, (field) { final fieldService = FieldService( - databaseId: databaseId, + viewId: databaseId, fieldId: field.id, ); fieldService.deleteField(); diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart index 78bf85ff7e..793b90b100 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart @@ -12,14 +12,14 @@ part 'field_service.freezed.dart'; /// /// You could check out the rust-lib/flowy-database/event_map.rs for more information. class FieldService { - final String databaseId; + final String viewId; final String fieldId; - FieldService({required this.databaseId, required this.fieldId}); + FieldService({required this.viewId, required this.fieldId}); Future> moveField(int fromIndex, int toIndex) { final payload = MoveFieldPayloadPB.create() - ..viewId = databaseId + ..viewId = viewId ..fieldId = fieldId ..fromIndex = fromIndex ..toIndex = toIndex; @@ -35,7 +35,7 @@ class FieldService { double? width, }) { var payload = FieldChangesetPB.create() - ..databaseId = databaseId + ..databaseId = viewId ..fieldId = fieldId; if (name != null) { @@ -62,12 +62,12 @@ class FieldService { } static Future> updateFieldTypeOption({ - required String databaseId, + required String viewId, required String fieldId, required List typeOptionData, }) { var payload = TypeOptionChangesetPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldId ..typeOptionData = typeOptionData; @@ -76,7 +76,7 @@ class FieldService { Future> deleteField() { final payload = DeleteFieldPayloadPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldId; return DatabaseEventDeleteField(payload).send(); @@ -84,7 +84,7 @@ class FieldService { Future> duplicateField() { final payload = DuplicateFieldPayloadPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldId; return DatabaseEventDuplicateField(payload).send(); @@ -94,7 +94,7 @@ class FieldService { required FieldType fieldType, }) { final payload = TypeOptionPathPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldId ..fieldType = fieldType; return DatabaseEventGetTypeOption(payload).send().then((result) { @@ -109,7 +109,7 @@ class FieldService { @freezed class GridFieldCellContext with _$GridFieldCellContext { const factory GridFieldCellContext({ - required String databaseId, + required String viewId, required FieldPB field, }) = _GridFieldCellContext; } diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart index 807f220e60..cc2205e406 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart @@ -155,13 +155,13 @@ abstract class TypeOptionFieldDelegate { } abstract class IFieldTypeOptionLoader { - String get databaseId; + String get viewId; Future> load(); Future> switchToField( String fieldId, FieldType fieldType) { final payload = UpdateFieldTypePayloadPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldId ..fieldType = fieldType; @@ -174,9 +174,9 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader { TypeOptionPB? fieldTypeOption; @override - final String databaseId; + final String viewId; NewFieldTypeOptionLoader({ - required this.databaseId, + required this.viewId, }); /// Creates the field type option if the fieldTypeOption is null. @@ -185,14 +185,14 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader { Future> load() { if (fieldTypeOption != null) { final payload = TypeOptionPathPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = fieldTypeOption!.field_2.id ..fieldType = fieldTypeOption!.field_2.fieldType; return DatabaseEventGetTypeOption(payload).send(); } else { final payload = CreateFieldPayloadPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldType = FieldType.RichText; return DatabaseEventCreateTypeOption(payload).send().then((result) { @@ -211,18 +211,18 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader { /// Uses when editing a existing field class FieldTypeOptionLoader extends IFieldTypeOptionLoader { @override - final String databaseId; + final String viewId; final FieldPB field; FieldTypeOptionLoader({ - required this.databaseId, + required this.viewId, required this.field, }); @override Future> load() { final payload = TypeOptionPathPB.create() - ..databaseId = databaseId + ..viewId = viewId ..fieldId = field.id ..fieldType = field.fieldType; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart index 95e7261348..6ac4512927 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart @@ -28,7 +28,7 @@ class TypeOptionDataController { }) { if (fieldInfo != null) { _typeOptiondata = TypeOptionPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..field_2 = fieldInfo.field; } } @@ -66,8 +66,7 @@ class TypeOptionDataController { _fieldNotifier.value = _typeOptiondata.field_2; - FieldService(databaseId: databaseId, fieldId: field.id) - .updateField(name: name); + FieldService(viewId: databaseId, fieldId: field.id).updateField(name: name); } set typeOptionData(List typeOptionData) { @@ -78,7 +77,7 @@ class TypeOptionDataController { }); FieldService.updateFieldTypeOption( - databaseId: databaseId, + viewId: databaseId, fieldId: field.id, typeOptionData: typeOptionData, ); diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart index 6e59ac4464..ebf46b2e7a 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart @@ -16,7 +16,7 @@ class CheckboxFilterEditorBloc final FilterListener _listener; CheckboxFilterEditorBloc({required this.filterInfo}) - : _ffiService = FilterFFIService(databaseId: filterInfo.viewId), + : _ffiService = FilterFFIService(viewId: filterInfo.viewId), _listener = FilterListener( viewId: filterInfo.viewId, filterId: filterInfo.filter.id, diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart index 58f3ff70d6..f66640b44c 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart @@ -18,7 +18,7 @@ class ChecklistFilterEditorBloc ChecklistFilterEditorBloc({ required this.filterInfo, - }) : _ffiService = FilterFFIService(databaseId: filterInfo.viewId), + }) : _ffiService = FilterFFIService(viewId: filterInfo.viewId), // _selectOptionService = // SelectOptionFFIService(cellId: cellController.cellId) _listener = FilterListener( diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart index 70b980f1fb..45f93f924c 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart @@ -22,7 +22,7 @@ class GridCreateFilterBloc final GridFieldController fieldController; void Function(List)? _onFieldFn; GridCreateFilterBloc({required this.viewId, required this.fieldController}) - : _ffiService = FilterFFIService(databaseId: viewId), + : _ffiService = FilterFFIService(viewId: viewId), super(GridCreateFilterState.initial(fieldController.fieldInfos)) { on( (event, emit) async { diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart index 42f9e433e9..564d546101 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart @@ -15,11 +15,11 @@ import 'package:appflowy_backend/protobuf/flowy-database/util.pb.dart'; import 'package:fixnum/fixnum.dart' as $fixnum; class FilterFFIService { - final String databaseId; - const FilterFFIService({required this.databaseId}); + final String viewId; + const FilterFFIService({required this.viewId}); Future, FlowyError>> getAllFilters() { - final payload = DatabaseIdPB()..value = databaseId; + final payload = DatabaseViewIdPB()..value = viewId; return DatabaseEventGetAllFilters(payload).send().then((result) { return result.fold( @@ -171,7 +171,7 @@ class FilterFFIService { var insertFilterPayload = AlterFilterPayloadPB.create() ..fieldId = fieldId ..fieldType = fieldType - ..viewId = databaseId + ..viewId = viewId ..data = data; if (filterId != null) { @@ -179,7 +179,7 @@ class FilterFFIService { } final payload = DatabaseSettingChangesetPB.create() - ..databaseId = databaseId + ..viewId = viewId ..alterFilter = insertFilterPayload; return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) { return result.fold( @@ -200,11 +200,11 @@ class FilterFFIService { final deleteFilterPayload = DeleteFilterPayloadPB.create() ..fieldId = fieldId ..filterId = filterId - ..viewId = databaseId + ..viewId = viewId ..fieldType = fieldType; final payload = DatabaseSettingChangesetPB.create() - ..databaseId = databaseId + ..viewId = viewId ..deleteFilter = deleteFilterPayload; return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) { diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart index d882565055..c503c279ca 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart @@ -20,7 +20,7 @@ class SelectOptionFilterEditorBloc SelectOptionFilterEditorBloc({ required this.filterInfo, required this.delegate, - }) : _ffiService = FilterFFIService(databaseId: filterInfo.viewId), + }) : _ffiService = FilterFFIService(viewId: filterInfo.viewId), _listener = FilterListener( viewId: filterInfo.viewId, filterId: filterInfo.filter.id, diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart index be0ed2d239..b1d6839a85 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart @@ -16,7 +16,7 @@ class TextFilterEditorBloc final FilterListener _listener; TextFilterEditorBloc({required this.filterInfo}) - : _ffiService = FilterFFIService(databaseId: filterInfo.viewId), + : _ffiService = FilterFFIService(viewId: filterInfo.viewId), _listener = FilterListener( viewId: filterInfo.viewId, filterId: filterInfo.filter.id, diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart index 37fddb4ef9..62290b17a4 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart @@ -32,7 +32,7 @@ class GridController { GridController({required ViewPB view}) : databaseId = view.id, - _gridFFIService = DatabaseFFIService(databaseId: view.id), + _gridFFIService = DatabaseFFIService(viewId: view.id), fieldController = GridFieldController(databaseId: view.id) { _viewCache = DatabaseViewCache( databaseId: databaseId, diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart index 90faac4e7d..f46f1347b2 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart @@ -46,7 +46,7 @@ class GridHeaderBloc extends Bloc { emit(state.copyWith(fields: fields)); final fieldService = - FieldService(databaseId: databaseId, fieldId: value.field.id); + FieldService(viewId: databaseId, fieldId: value.field.id); final result = await fieldService.moveField( value.fromIndex, value.toIndex, diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_service.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_service.dart index bbf97b21d3..c2aa2384b5 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_service.dart @@ -8,20 +8,20 @@ import 'package:appflowy_backend/protobuf/flowy-database/group.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart'; class DatabaseFFIService { - final String databaseId; + final String viewId; DatabaseFFIService({ - required this.databaseId, + required this.viewId, }); Future> openGrid() async { - await FolderEventSetLatestView(ViewIdPB(value: databaseId)).send(); + await FolderEventSetLatestView(ViewIdPB(value: viewId)).send(); - final payload = DatabaseIdPB(value: databaseId); + final payload = DatabaseViewIdPB(value: viewId); return DatabaseEventGetDatabase(payload).send(); } Future> createRow({Option? startRowId}) { - var payload = CreateRowPayloadPB.create()..databaseId = databaseId; + var payload = CreateRowPayloadPB.create()..viewId = viewId; startRowId?.fold(() => null, (id) => payload.startRowId = id); return DatabaseEventCreateRow(payload).send(); } @@ -31,7 +31,7 @@ class DatabaseFFIService { String? startRowId, ) { CreateBoardCardPayloadPB payload = CreateBoardCardPayloadPB.create() - ..databaseId = databaseId + ..viewId = viewId ..groupId = groupId; if (startRowId != null) { @@ -43,7 +43,7 @@ class DatabaseFFIService { Future, FlowyError>> getFields( {List? fieldIds}) { - var payload = GetFieldPayloadPB.create()..databaseId = databaseId; + var payload = GetFieldPayloadPB.create()..viewId = viewId; if (fieldIds != null) { payload.fieldIds = RepeatedFieldIdPB(items: fieldIds); @@ -54,12 +54,12 @@ class DatabaseFFIService { } Future> closeGrid() { - final request = ViewIdPB(value: databaseId); + final request = ViewIdPB(value: viewId); return FolderEventCloseView(request).send(); } Future> loadGroups() { - final payload = DatabaseIdPB(value: databaseId); + final payload = DatabaseViewIdPB(value: viewId); return DatabaseEventGetGroup(payload).send(); } } diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart index 01113ff7c0..0631bc4caf 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart @@ -214,7 +214,7 @@ class GridRowCache { Future _loadRow(String rowId) async { final payload = RowIdPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..rowId = rowId; final result = await DatabaseEventGetRow(payload).send(); diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart index 1d01c31833..5f89a6a51d 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart @@ -27,7 +27,7 @@ class RowDetailBloc extends Bloc { }, deleteField: (_DeleteField value) { final fieldService = FieldService( - databaseId: dataController.rowInfo.databaseId, + viewId: dataController.rowInfo.databaseId, fieldId: value.fieldId, ); fieldService.deleteField(); diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart index 3cfe5cb161..91900f4cf8 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart @@ -14,7 +14,7 @@ class RowFFIService { Future> createRow(String rowId) { final payload = CreateRowPayloadPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..startRowId = rowId; return DatabaseEventCreateRow(payload).send(); @@ -22,7 +22,7 @@ class RowFFIService { Future> getRow(String rowId) { final payload = RowIdPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..rowId = rowId; return DatabaseEventGetRow(payload).send(); @@ -30,7 +30,7 @@ class RowFFIService { Future> deleteRow(String rowId) { final payload = RowIdPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..rowId = rowId; return DatabaseEventDeleteRow(payload).send(); @@ -38,7 +38,7 @@ class RowFFIService { Future> duplicateRow(String rowId) { final payload = RowIdPB.create() - ..databaseId = databaseId + ..viewId = databaseId ..rowId = rowId; return DatabaseEventDuplicateRow(payload).send(); diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart index 3420d66830..d21b6e5dbb 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart @@ -26,7 +26,7 @@ class GridPropertyBloc extends Bloc { }, setFieldVisibility: (_SetFieldVisibility value) async { final fieldService = - FieldService(databaseId: databaseId, fieldId: value.fieldId); + FieldService(viewId: databaseId, fieldId: value.fieldId); final result = await fieldService.updateField(visibility: value.visibility); result.fold( diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart index 183a7a8f5e..2f0cc056f5 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart @@ -12,7 +12,7 @@ class SettingFFIService { const SettingFFIService({required this.viewId}); Future> getSetting() { - final payload = DatabaseIdPB.create()..value = viewId; + final payload = DatabaseViewIdPB.create()..value = viewId; return DatabaseEventGetDatabaseSetting(payload).send(); } @@ -24,7 +24,7 @@ class SettingFFIService { ..fieldId = fieldId ..fieldType = fieldType; final payload = DatabaseSettingChangesetPB.create() - ..databaseId = viewId + ..viewId = viewId ..insertGroup = insertGroupPayload; return DatabaseEventUpdateDatabaseSetting(payload).send(); diff --git a/frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart b/frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart index a1fdecce07..40fba8f673 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart @@ -13,7 +13,7 @@ class SortFFIService { SortFFIService({required this.viewId}); Future, FlowyError>> getAllSorts() { - final payload = DatabaseIdPB()..value = viewId; + final payload = DatabaseViewIdPB()..value = viewId; return DatabaseEventGetAllSorts(payload).send().then((result) { return result.fold( @@ -37,7 +37,7 @@ class SortFFIService { ..sortId = sortId; final payload = DatabaseSettingChangesetPB.create() - ..databaseId = viewId + ..viewId = viewId ..alterSort = insertSortPayload; return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) { return result.fold( @@ -62,7 +62,7 @@ class SortFFIService { ..condition = condition; final payload = DatabaseSettingChangesetPB.create() - ..databaseId = viewId + ..viewId = viewId ..alterSort = insertSortPayload; return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) { return result.fold( @@ -87,7 +87,7 @@ class SortFFIService { ..fieldType = fieldType; final payload = DatabaseSettingChangesetPB.create() - ..databaseId = viewId + ..viewId = viewId ..deleteSort = deleteFilterPayload; return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) { @@ -102,7 +102,7 @@ class SortFFIService { } Future> deleteAllSorts() { - final payload = DatabaseIdPB(value: viewId); + final payload = DatabaseViewIdPB(value: viewId); return DatabaseEventDeleteAllSorts(payload).send().then((result) { return result.fold( (l) => left(l), diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart index c6ef75ff6a..0d016da388 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart @@ -35,10 +35,10 @@ class _GridFieldCellActionSheetState extends State { return SizedBox( width: 400, child: FieldEditor( - databaseId: widget.cellContext.databaseId, + databaseId: widget.cellContext.viewId, fieldName: field.name, typeOptionLoader: FieldTypeOptionLoader( - databaseId: widget.cellContext.databaseId, + viewId: widget.cellContext.viewId, field: field, ), ), @@ -206,7 +206,7 @@ extension _FieldActionExtension on FieldAction { PopoverContainer.of(context).close(); FieldService( - databaseId: fieldInfo.databaseId, + viewId: fieldInfo.viewId, fieldId: fieldInfo.field.id, ).duplicateField(); @@ -218,7 +218,7 @@ extension _FieldActionExtension on FieldAction { title: LocaleKeys.grid_field_deleteFieldPromptMessage.tr(), confirm: () { FieldService( - databaseId: fieldInfo.databaseId, + viewId: fieldInfo.viewId, fieldId: fieldInfo.field.id, ).deleteField(); }, diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart index 2fea122b95..21d96c3ed6 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart @@ -98,8 +98,8 @@ class _GridHeaderState extends State<_GridHeader> { builder: (context, state) { final cells = state.fields .where((field) => field.visibility) - .map((field) => GridFieldCellContext( - databaseId: widget.viewId, field: field.field)) + .map((field) => + GridFieldCellContext(viewId: widget.viewId, field: field.field)) .map((ctx) => GridFieldCell(key: _getKeyById(ctx.field.id), cellContext: ctx)) .toList(); @@ -189,7 +189,7 @@ class CreateFieldButton extends StatelessWidget { popupBuilder: (BuildContext popover) { return FieldEditor( databaseId: databaseId, - typeOptionLoader: NewFieldTypeOptionLoader(databaseId: databaseId), + typeOptionLoader: NewFieldTypeOptionLoader(viewId: databaseId), ); }, ); diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart index de8648b0e1..d92da4ed37 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart @@ -144,7 +144,7 @@ TypeOptionContext makeTypeOptionContext({ required FieldInfo fieldInfo, }) { final loader = - FieldTypeOptionLoader(databaseId: databaseId, field: fieldInfo.field); + FieldTypeOptionLoader(viewId: databaseId, field: fieldInfo.field); final dataController = TypeOptionDataController( databaseId: databaseId, loader: loader, @@ -176,7 +176,7 @@ TypeOptionContext makeSelectTypeOptionContext({ required FieldPB fieldPB, }) { final loader = FieldTypeOptionLoader( - databaseId: databaseId, + viewId: databaseId, field: fieldPB, ); final dataController = TypeOptionDataController( diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart index 268fe50c99..53c4ab1ae5 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart @@ -206,7 +206,7 @@ class _CreateFieldButtonState extends State<_CreateFieldButton> { popupBuilder: (BuildContext popOverContext) { return FieldEditor( databaseId: widget.viewId, - typeOptionLoader: NewFieldTypeOptionLoader(databaseId: widget.viewId), + typeOptionLoader: NewFieldTypeOptionLoader(viewId: widget.viewId), onDeleted: (fieldId) { popoverController.close(); @@ -300,7 +300,7 @@ class _RowDetailCellState extends State<_RowDetailCell> { fieldName: widget.cellId.fieldInfo.field.name, isGroupField: widget.cellId.fieldInfo.isGroupField, typeOptionLoader: FieldTypeOptionLoader( - databaseId: widget.cellId.databaseId, + viewId: widget.cellId.databaseId, field: widget.cellId.fieldInfo.field, ), onDeleted: (fieldId) { diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart index f49d2301a0..9e1c3ca095 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart @@ -139,7 +139,7 @@ class _GridPropertyCellState extends State<_GridPropertyCell> { databaseId: widget.databaseId, fieldName: widget.fieldInfo.name, typeOptionLoader: FieldTypeOptionLoader( - databaseId: widget.databaseId, + viewId: widget.databaseId, field: widget.fieldInfo.field, ), ); diff --git a/frontend/app_flowy/test/bloc_test/board_test/create_or_edit_field_test.dart b/frontend/app_flowy/test/bloc_test/board_test/create_or_edit_field_test.dart index f21550b2c2..5a0d3154b5 100644 --- a/frontend/app_flowy/test/bloc_test/board_test/create_or_edit_field_test.dart +++ b/frontend/app_flowy/test/bloc_test/board_test/create_or_edit_field_test.dart @@ -30,7 +30,7 @@ void main() { final fieldInfo = context.singleSelectFieldContext(); final loader = FieldTypeOptionLoader( - databaseId: context.gridView.id, + viewId: context.gridView.id, field: fieldInfo.field, ); diff --git a/frontend/app_flowy/test/bloc_test/board_test/util.dart b/frontend/app_flowy/test/bloc_test/board_test/util.dart index 18b1c54947..c55ff91ec8 100644 --- a/frontend/app_flowy/test/bloc_test/board_test/util.dart +++ b/frontend/app_flowy/test/bloc_test/board_test/util.dart @@ -81,10 +81,10 @@ class BoardTestContext { }) { IFieldTypeOptionLoader loader; if (fieldInfo == null) { - loader = NewFieldTypeOptionLoader(databaseId: gridView.id); + loader = NewFieldTypeOptionLoader(viewId: gridView.id); } else { - loader = FieldTypeOptionLoader( - databaseId: gridView.id, field: fieldInfo.field); + loader = + FieldTypeOptionLoader(viewId: gridView.id, field: fieldInfo.field); } final editorBloc = FieldEditorBloc( @@ -144,7 +144,7 @@ class BoardTestContext { GridFieldCellContext singleSelectFieldCellContext() { final field = singleSelectFieldContext().field; - return GridFieldCellContext(databaseId: gridView.id, field: field); + return GridFieldCellContext(viewId: gridView.id, field: field); } FieldInfo textFieldContext() { diff --git a/frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart index 4086eefe4c..c62a797c4d 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart @@ -8,7 +8,7 @@ Future createEditorBloc(AppFlowyGridTest gridTest) async { final context = await gridTest.createTestGrid(); final fieldInfo = context.singleSelectFieldContext(); final loader = FieldTypeOptionLoader( - databaseId: context.gridView.id, + viewId: context.gridView.id, field: fieldInfo.field, ); @@ -78,7 +78,7 @@ Future makeEditorBloc(AppFlowyGridTest gridTest) async { final context = await gridTest.createTestGrid(); final fieldInfo = context.singleSelectFieldContext(); final loader = FieldTypeOptionLoader( - databaseId: context.gridView.id, + viewId: context.gridView.id, field: fieldInfo.field, ); diff --git a/frontend/app_flowy/test/bloc_test/grid_test/filter/create_filter_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/filter/create_filter_test.dart index db1fac699f..2b8126d959 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/filter/create_filter_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/filter/create_filter_test.dart @@ -15,7 +15,7 @@ void main() { test('create a text filter)', () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); await service.insertTextFilter( fieldId: textField.id, @@ -28,7 +28,7 @@ void main() { test('delete a text filter)', () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); await service.insertTextFilter( fieldId: textField.id, @@ -49,7 +49,7 @@ void main() { test('filter rows with condition: text is empty', () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final gridController = GridController(view: context.gridView); final gridBloc = GridBloc( view: context.gridView, @@ -70,7 +70,7 @@ void main() { test('filter rows with condition: text is empty(After edit the row)', () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final gridController = GridController(view: context.gridView); final gridBloc = GridBloc( view: context.gridView, @@ -97,7 +97,7 @@ void main() { test('filter rows with condition: text is not empty', () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); await gridResponseFuture(); await service.insertTextFilter( @@ -111,7 +111,7 @@ void main() { test('filter rows with condition: checkbox uncheck', () async { final context = await gridTest.createTestGrid(); final checkboxField = context.checkboxFieldContext(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final gridController = GridController(view: context.gridView); final gridBloc = GridBloc( view: context.gridView, @@ -130,7 +130,7 @@ void main() { test('filter rows with condition: checkbox check', () async { final context = await gridTest.createTestGrid(); final checkboxField = context.checkboxFieldContext(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final gridController = GridController(view: context.gridView); final gridBloc = GridBloc( view: context.gridView, diff --git a/frontend/app_flowy/test/bloc_test/grid_test/filter/edit_filter_field_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/filter/edit_filter_field_test.dart index d2067c12d9..b04a9edb7c 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/filter/edit_filter_field_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/filter/edit_filter_field_test.dart @@ -16,7 +16,7 @@ void main() { test("create a text filter and then alter the filter's field)", () async { final context = await gridTest.createTestGrid(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // Create the filter menu bloc @@ -35,7 +35,7 @@ void main() { // Edit the text field final loader = FieldTypeOptionLoader( - databaseId: context.gridView.id, + viewId: context.gridView.id, field: textField.field, ); diff --git a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart index b9327a2c24..766b2d8232 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart @@ -19,7 +19,7 @@ void main() { await gridResponseFuture(); assert(menuBloc.state.creatableFields.length == 3); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); await service.insertTextFilter( fieldId: textField.id, @@ -36,7 +36,7 @@ void main() { ..add(const GridFilterMenuEvent.initial()); await gridResponseFuture(); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // Create filter diff --git a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_checkbox_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_checkbox_test.dart index bd25fab2fb..28a101b234 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_checkbox_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_checkbox_test.dart @@ -13,7 +13,7 @@ void main() { test('filter rows by checkbox is check condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final controller = await context.makeCheckboxCellController(0); controller.saveCellData("Yes"); @@ -32,7 +32,7 @@ void main() { test('filter rows by checkbox is uncheck condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final controller = await context.makeCheckboxCellController(0); controller.saveCellData("Yes"); diff --git a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_text_test.dart b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_text_test.dart index 2309fa6a2e..73cb170e26 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_text_test.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_text_test.dart @@ -14,7 +14,7 @@ void main() { test('filter rows by text is empty condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // create a new filter await service.insertTextFilter( @@ -41,7 +41,7 @@ void main() { test('filter rows by text is not empty condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // create a new filter await service.insertTextFilter( @@ -66,7 +66,7 @@ void main() { test('filter rows by text is empty or is not empty condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // create a new filter await service.insertTextFilter( @@ -102,7 +102,7 @@ void main() { test('filter rows by text is condition)', () async { final context = await createTestFilterGrid(gridTest); - final service = FilterFFIService(databaseId: context.gridView.id); + final service = FilterFFIService(viewId: context.gridView.id); final textField = context.textFieldContext(); // create a new filter await service.insertTextFilter( diff --git a/frontend/app_flowy/test/bloc_test/grid_test/util.dart b/frontend/app_flowy/test/bloc_test/grid_test/util.dart index 26affed00b..7305f7f7ce 100644 --- a/frontend/app_flowy/test/bloc_test/grid_test/util.dart +++ b/frontend/app_flowy/test/bloc_test/grid_test/util.dart @@ -39,10 +39,10 @@ class GridTestContext { }) { IFieldTypeOptionLoader loader; if (fieldInfo == null) { - loader = NewFieldTypeOptionLoader(databaseId: gridView.id); + loader = NewFieldTypeOptionLoader(viewId: gridView.id); } else { - loader = FieldTypeOptionLoader( - databaseId: gridView.id, field: fieldInfo.field); + loader = + FieldTypeOptionLoader(viewId: gridView.id, field: fieldInfo.field); } final editorBloc = FieldEditorBloc( @@ -104,7 +104,7 @@ class GridTestContext { GridFieldCellContext singleSelectFieldCellContext() { final field = singleSelectFieldContext().field; - return GridFieldCellContext(databaseId: gridView.id, field: field); + return GridFieldCellContext(viewId: gridView.id, field: field); } FieldInfo textFieldContext() { diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index 1c83fa3c34..4d20bc28b5 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -849,6 +849,18 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "database-model" +version = "0.1.0" +dependencies = [ + "bytes", + "indexmap", + "nanoid", + "serde", + "serde_json", + "serde_repr", +] + [[package]] name = "derivative" version = "2.2.0" @@ -1132,12 +1144,12 @@ version = "0.1.0" dependencies = [ "bytes", "chrono", + "database-model", "dissimilar", "document-model", "flowy-derive", "flowy-sync", "folder-model", - "grid-model", "lib-infra", "lib-ot", "parking_lot", @@ -1195,6 +1207,7 @@ name = "flowy-core" version = "0.1.0" dependencies = [ "bytes", + "database-model", "flowy-client-ws", "flowy-database", "flowy-document", @@ -1206,7 +1219,6 @@ dependencies = [ "flowy-task", "flowy-user", "futures-core", - "grid-model", "lib-dispatch", "lib-infra", "lib-log", @@ -1230,6 +1242,7 @@ dependencies = [ "chrono", "crossbeam-utils", "dashmap", + "database-model", "diesel", "fancy-regex 0.10.0", "flowy-client-sync", @@ -1242,7 +1255,6 @@ dependencies = [ "flowy-sqlite", "flowy-task", "futures", - "grid-model", "indexmap", "lazy_static", "lib-dispatch", @@ -1960,18 +1972,6 @@ dependencies = [ "system-deps 6.0.3", ] -[[package]] -name = "grid-model" -version = "0.1.0" -dependencies = [ - "bytes", - "indexmap", - "nanoid", - "serde", - "serde_json", - "serde_repr", -] - [[package]] name = "gtk" version = "0.15.5" diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts index 2dfd598ff5..25f9fcb29a 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts @@ -3,7 +3,7 @@ import { DatabaseEventGetDatabase, DatabaseEventGetFields, } from '../../../../services/backend/events/flowy-database/event'; -import { DatabaseIdPB } from '../../../../services/backend/models/flowy-database'; +import { DatabaseViewIdPB } from '../../../../services/backend/models/flowy-database'; import { CreateRowPayloadPB } from '../../../../services/backend/models/flowy-database/row_entities'; import { GetFieldPayloadPB, @@ -21,7 +21,7 @@ export class DatabaseBackendService { } openDatabase = async () => { - const payload = DatabaseIdPB.fromObject({ + const payload = DatabaseViewIdPB.fromObject({ value: this.viewId, }); return DatabaseEventGetDatabase(payload); @@ -39,7 +39,7 @@ export class DatabaseBackendService { }; getFields = async (fieldIds?: FieldIdPB[]) => { - const payload = GetFieldPayloadPB.fromObject({ database_id: this.viewId }); + const payload = GetFieldPayloadPB.fromObject({ view_id: this.viewId }); if (!fieldIds) { payload.field_ids = RepeatedFieldIdPB.fromObject({ items: fieldIds }); diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts index a0eee6df18..62e20dbf27 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts @@ -19,7 +19,7 @@ export abstract class TypeOptionParser { } export class FieldBackendService { - constructor(public readonly databaseId: string, public readonly fieldId: string) {} + constructor(public readonly viewId: string, public readonly fieldId: string) {} updateField = (data: { name?: string; @@ -28,7 +28,7 @@ export class FieldBackendService { visibility?: boolean; width?: number; }) => { - const payload = FieldChangesetPB.fromObject({ database_id: this.databaseId, field_id: this.fieldId }); + const payload = FieldChangesetPB.fromObject({ database_id: this.viewId, field_id: this.fieldId }); if (data.name !== undefined) { payload.name = data.name; @@ -55,7 +55,7 @@ export class FieldBackendService { updateTypeOption = (typeOptionData: Uint8Array) => { const payload = TypeOptionChangesetPB.fromObject({ - database_id: this.databaseId, + view_id: this.viewId, field_id: this.fieldId, type_option_data: typeOptionData, }); @@ -64,20 +64,20 @@ export class FieldBackendService { }; deleteField = () => { - const payload = DeleteFieldPayloadPB.fromObject({ database_id: this.databaseId, field_id: this.fieldId }); + const payload = DeleteFieldPayloadPB.fromObject({ view_id: this.viewId, field_id: this.fieldId }); return DatabaseEventDeleteField(payload); }; duplicateField = () => { - const payload = DuplicateFieldPayloadPB.fromObject({ database_id: this.databaseId, field_id: this.fieldId }); + const payload = DuplicateFieldPayloadPB.fromObject({ view_id: this.viewId, field_id: this.fieldId }); return DatabaseEventDuplicateField(payload); }; getTypeOptionData = (fieldType: FieldType) => { const payload = TypeOptionPathPB.fromObject({ - database_id: this.databaseId, + view_id: this.viewId, field_id: this.fieldId, field_type: fieldType, }); diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 47b4e83652..075fac5a0b 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -695,6 +695,18 @@ dependencies = [ "parking_lot 0.12.1", ] +[[package]] +name = "database-model" +version = "0.1.0" +dependencies = [ + "bytes", + "indexmap", + "nanoid", + "serde", + "serde_json", + "serde_repr", +] + [[package]] name = "derivative" version = "2.2.0" @@ -921,12 +933,12 @@ version = "0.1.0" dependencies = [ "bytes", "chrono", + "database-model", "dissimilar", "document-model", "flowy-derive", "flowy-sync", "folder-model", - "grid-model", "lib-infra", "lib-ot", "parking_lot 0.12.1", @@ -984,6 +996,7 @@ name = "flowy-core" version = "0.1.0" dependencies = [ "bytes", + "database-model", "flowy-client-ws", "flowy-database", "flowy-document", @@ -995,7 +1008,6 @@ dependencies = [ "flowy-task", "flowy-user", "futures-core", - "grid-model", "lib-dispatch", "lib-infra", "lib-log", @@ -1019,6 +1031,7 @@ dependencies = [ "chrono", "crossbeam-utils", "dashmap", + "database-model", "diesel", "fancy-regex 0.10.0", "flowy-client-sync", @@ -1033,7 +1046,6 @@ dependencies = [ "flowy-task", "flowy-test", "futures", - "grid-model", "indexmap", "lazy_static", "lib-dispatch", @@ -1613,18 +1625,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "grid-model" -version = "0.1.0" -dependencies = [ - "bytes", - "indexmap", - "nanoid", - "serde", - "serde_json", - "serde_repr", -] - [[package]] name = "h2" version = "0.3.15" diff --git a/frontend/rust-lib/flowy-client-sync/Cargo.toml b/frontend/rust-lib/flowy-client-sync/Cargo.toml index abd436bf0f..5168f98839 100644 --- a/frontend/rust-lib/flowy-client-sync/Cargo.toml +++ b/frontend/rust-lib/flowy-client-sync/Cargo.toml @@ -10,7 +10,7 @@ lib-ot = { path = "../../../shared-lib/lib-ot" } lib-infra = { path = "../../../shared-lib/lib-infra" } flowy-derive = { path = "../flowy-derive" } folder-model = { path = "../../../shared-lib/folder-model" } -grid-model = { path = "../../../shared-lib/grid-model" } +database-model = { path = "../../../shared-lib/database-model" } revision-model = { path = "../../../shared-lib/revision-model" } document-model = { path = "../../../shared-lib/document-model" } flowy-sync = { path = "../../../shared-lib/flowy-sync" } diff --git a/frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs b/frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs index ea08675831..700abb369d 100644 --- a/frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs +++ b/frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs @@ -1,26 +1,27 @@ use crate::errors::{SyncError, SyncResult}; use crate::util::cal_diff; -use flowy_sync::util::make_operations_from_revisions; -use grid_model::{ +use database_model::{ gen_block_id, gen_row_id, CellRevision, DatabaseBlockRevision, RowChangeset, RowRevision, }; +use flowy_sync::util::make_operations_from_revisions; use lib_infra::util::md5; use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform}; use revision_model::Revision; +use std::any::type_name; use std::borrow::Cow; use std::collections::HashMap; use std::sync::Arc; -pub type GridBlockOperations = DeltaOperations; -pub type GridBlockOperationsBuilder = DeltaBuilder; +pub type DatabaseBlockOperations = DeltaOperations; +pub type DatabaseBlockOperationsBuilder = DeltaBuilder; #[derive(Debug, Clone)] -pub struct GridBlockRevisionPad { +pub struct DatabaseBlockRevisionPad { block: DatabaseBlockRevision, - operations: GridBlockOperations, + operations: DatabaseBlockOperations, } -impl std::ops::Deref for GridBlockRevisionPad { +impl std::ops::Deref for DatabaseBlockRevisionPad { type Target = DatabaseBlockRevision; fn deref(&self) -> &Self::Target { @@ -28,7 +29,7 @@ impl std::ops::Deref for GridBlockRevisionPad { } } -impl GridBlockRevisionPad { +impl DatabaseBlockRevisionPad { pub fn duplicate_data(&self, duplicated_block_id: &str) -> DatabaseBlockRevision { let duplicated_rows = self .block @@ -47,10 +48,14 @@ impl GridBlockRevisionPad { } } - pub fn from_operations(operations: GridBlockOperations) -> SyncResult { + pub fn from_operations(operations: DatabaseBlockOperations) -> SyncResult { let s = operations.content()?; let revision: DatabaseBlockRevision = serde_json::from_str(&s).map_err(|e| { - let msg = format!("Deserialize operations to GridBlockRevision failed: {}", e); + let msg = format!( + "Deserialize operations to {} failed: {}", + type_name::(), + e + ); tracing::error!("{}", s); SyncError::internal().context(msg) })?; @@ -60,8 +65,8 @@ impl GridBlockRevisionPad { }) } - pub fn from_revisions(_grid_id: &str, revisions: Vec) -> SyncResult { - let operations: GridBlockOperations = make_operations_from_revisions(revisions)?; + pub fn from_revisions(revisions: Vec) -> SyncResult { + let operations: DatabaseBlockOperations = make_operations_from_revisions(revisions)?; Self::from_operations(operations) } @@ -70,7 +75,7 @@ impl GridBlockRevisionPad { &mut self, row: RowRevision, start_row_id: Option, - ) -> SyncResult> { + ) -> SyncResult> { self.modify(|rows| { if let Some(start_row_id) = start_row_id { if !start_row_id.is_empty() { @@ -89,7 +94,7 @@ impl GridBlockRevisionPad { pub fn delete_rows( &mut self, row_ids: Vec>, - ) -> SyncResult> { + ) -> SyncResult> { self.modify(|rows| { rows.retain(|row| !row_ids.contains(&Cow::Borrowed(&row.id))); Ok(Some(())) @@ -168,7 +173,7 @@ impl GridBlockRevisionPad { pub fn update_row( &mut self, changeset: RowChangeset, - ) -> SyncResult> { + ) -> SyncResult> { let row_id = changeset.row_id.clone(); self.modify_row(&row_id, |row| { let mut is_changed = None; @@ -201,7 +206,7 @@ impl GridBlockRevisionPad { row_id: &str, from: usize, to: usize, - ) -> SyncResult> { + ) -> SyncResult> { self.modify(|row_revs| { if let Some(position) = row_revs.iter().position(|row_rev| row_rev.id == row_id) { debug_assert_eq!(from, position); @@ -218,7 +223,7 @@ impl GridBlockRevisionPad { }) } - pub fn modify(&mut self, f: F) -> SyncResult> + pub fn modify(&mut self, f: F) -> SyncResult> where F: for<'a> FnOnce(&'a mut Vec>) -> SyncResult>, { @@ -232,11 +237,12 @@ impl GridBlockRevisionPad { None => Ok(None), Some(operations) => { tracing::trace!( - "[GridBlockRevision] Composing operations {}", + "[{}] Composing operations {}", + type_name::(), operations.json_str() ); self.operations = self.operations.compose(&operations)?; - Ok(Some(GridBlockRevisionChangeset { + Ok(Some(DatabaseBlockRevisionChangeset { operations, md5: md5(&self.operations.json_bytes()), })) @@ -246,7 +252,11 @@ impl GridBlockRevisionPad { } } - fn modify_row(&mut self, row_id: &str, f: F) -> SyncResult> + fn modify_row( + &mut self, + row_id: &str, + f: F, + ) -> SyncResult> where F: FnOnce(&mut RowRevision) -> SyncResult>, { @@ -270,28 +280,30 @@ impl GridBlockRevisionPad { } } -pub struct GridBlockRevisionChangeset { - pub operations: GridBlockOperations, +pub struct DatabaseBlockRevisionChangeset { + pub operations: DatabaseBlockOperations, /// md5: the md5 of the grid after applying the change. pub md5: String, } -pub fn make_database_block_operations(block_rev: &DatabaseBlockRevision) -> GridBlockOperations { +pub fn make_database_block_operations( + block_rev: &DatabaseBlockRevision, +) -> DatabaseBlockOperations { let json = serde_json::to_string(&block_rev).unwrap(); - GridBlockOperationsBuilder::new().insert(&json).build() + DatabaseBlockOperationsBuilder::new().insert(&json).build() } -pub fn make_grid_block_revisions( +pub fn make_database_block_revisions( _user_id: &str, - grid_block_meta_data: &DatabaseBlockRevision, + database_block_meta_data: &DatabaseBlockRevision, ) -> Vec { - let operations = make_database_block_operations(grid_block_meta_data); + let operations = make_database_block_operations(database_block_meta_data); let bytes = operations.json_bytes(); - let revision = Revision::initial_revision(&grid_block_meta_data.block_id, bytes); + let revision = Revision::initial_revision(&database_block_meta_data.block_id, bytes); vec![revision] } -impl std::default::Default for GridBlockRevisionPad { +impl std::default::Default for DatabaseBlockRevisionPad { fn default() -> Self { let block_revision = DatabaseBlockRevision { block_id: gen_block_id(), @@ -299,7 +311,7 @@ impl std::default::Default for GridBlockRevisionPad { }; let operations = make_database_block_operations(&block_revision); - GridBlockRevisionPad { + DatabaseBlockRevisionPad { block: block_revision, operations, } @@ -308,8 +320,8 @@ impl std::default::Default for GridBlockRevisionPad { #[cfg(test)] mod tests { - use crate::client_database::{GridBlockOperations, GridBlockRevisionPad}; - use grid_model::{RowChangeset, RowRevision}; + use crate::client_database::{DatabaseBlockOperations, DatabaseBlockRevisionPad}; + use database_model::{RowChangeset, RowRevision}; use std::borrow::Cow; @@ -365,7 +377,7 @@ mod tests { assert_eq!(*pad.rows[2], row_3); } - fn test_row_rev(id: &str, pad: &GridBlockRevisionPad) -> RowRevision { + fn test_row_rev(id: &str, pad: &DatabaseBlockRevisionPad) -> RowRevision { RowRevision { id: id.to_string(), block_id: pad.block_id.clone(), @@ -470,9 +482,10 @@ mod tests { ); } - fn test_pad() -> GridBlockRevisionPad { + fn test_pad() -> DatabaseBlockRevisionPad { let operations = - GridBlockOperations::from_json(r#"[{"insert":"{\"block_id\":\"1\",\"rows\":[]}"}]"#).unwrap(); - GridBlockRevisionPad::from_operations(operations).unwrap() + DatabaseBlockOperations::from_json(r#"[{"insert":"{\"block_id\":\"1\",\"rows\":[]}"}]"#) + .unwrap(); + DatabaseBlockRevisionPad::from_operations(operations).unwrap() } } diff --git a/frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs b/frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs index 99b08e9de0..180cec67dd 100644 --- a/frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs +++ b/frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs @@ -1,6 +1,7 @@ use crate::errors::{SyncError, SyncResult}; -use grid_model::{ - BuildDatabaseContext, DatabaseBlockRevision, FieldRevision, GridBlockMetaRevision, RowRevision, +use database_model::{ + BuildDatabaseContext, DatabaseBlockMetaRevision, DatabaseBlockRevision, FieldRevision, + RowRevision, }; use std::sync::Arc; @@ -12,7 +13,7 @@ impl std::default::Default for DatabaseBuilder { fn default() -> Self { let mut build_context = BuildDatabaseContext::new(); - let block_meta = GridBlockMetaRevision::new(); + let block_meta = DatabaseBlockMetaRevision::new(); let block_meta_data = DatabaseBlockRevision { block_id: block_meta.block_id.clone(), rows: vec![], diff --git a/frontend/rust-lib/flowy-client-sync/src/client_database/database_revision_pad.rs b/frontend/rust-lib/flowy-client-sync/src/client_database/database_revision_pad.rs index d4785caaca..4fbddc4eb0 100644 --- a/frontend/rust-lib/flowy-client-sync/src/client_database/database_revision_pad.rs +++ b/frontend/rust-lib/flowy-client-sync/src/client_database/database_revision_pad.rs @@ -1,10 +1,10 @@ use crate::errors::{internal_sync_error, SyncError, SyncResult}; use crate::util::cal_diff; -use flowy_sync::util::make_operations_from_revisions; -use grid_model::{ - gen_block_id, gen_grid_id, DatabaseRevision, FieldRevision, FieldTypeRevision, - GridBlockMetaRevision, GridBlockMetaRevisionChangeset, +use database_model::{ + gen_block_id, gen_database_id, DatabaseBlockMetaRevision, DatabaseBlockMetaRevisionChangeset, + DatabaseRevision, FieldRevision, FieldTypeRevision, }; +use flowy_sync::util::make_operations_from_revisions; use lib_infra::util::md5; use lib_infra::util::move_vec_element; use lib_ot::core::{DeltaOperationBuilder, DeltaOperations, EmptyAttributes, OperationTransform}; @@ -17,7 +17,7 @@ pub type DatabaseOperationsBuilder = DeltaOperationBuilder; #[derive(Clone)] pub struct DatabaseRevisionPad { - grid_rev: Arc, + database_rev: Arc, operations: DatabaseOperations, } @@ -26,21 +26,22 @@ pub trait JsonDeserializer { } impl DatabaseRevisionPad { - pub fn grid_id(&self) -> String { - self.grid_rev.grid_id.clone() + pub fn database_id(&self) -> String { + self.database_rev.database_id.clone() } - pub async fn duplicate_grid_block_meta( + + pub async fn duplicate_database_block_meta( &self, - ) -> (Vec, Vec) { + ) -> (Vec, Vec) { let fields = self - .grid_rev + .database_rev .fields .iter() .map(|field_rev| field_rev.as_ref().clone()) .collect(); let blocks = self - .grid_rev + .database_rev .blocks .iter() .map(|block| { @@ -48,21 +49,21 @@ impl DatabaseRevisionPad { duplicated_block.block_id = gen_block_id(); duplicated_block }) - .collect::>(); + .collect::>(); (fields, blocks) } pub fn from_operations(operations: DatabaseOperations) -> SyncResult { let content = operations.content()?; - let grid: DatabaseRevision = serde_json::from_str(&content).map_err(|e| { + let database_rev: DatabaseRevision = serde_json::from_str(&content).map_err(|e| { let msg = format!("Deserialize operations to grid failed: {}", e); tracing::error!("{}", msg); SyncError::internal().context(msg) })?; Ok(Self { - grid_rev: Arc::new(grid), + database_rev: Arc::new(database_rev), operations, }) } @@ -78,7 +79,7 @@ impl DatabaseRevisionPad { new_field_rev: FieldRevision, start_field_id: Option, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { // Check if the field exists or not if grid_meta .fields @@ -109,7 +110,7 @@ impl DatabaseRevisionPad { &mut self, field_id: &str, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { match grid_meta .fields .iter() @@ -133,7 +134,7 @@ impl DatabaseRevisionPad { field_id: &str, duplicated_field_id: &str, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { match grid_meta .fields .iter() @@ -176,7 +177,7 @@ impl DatabaseRevisionPad { T: Into, { let new_field_type = new_field_type.into(); - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { match grid_meta .fields .iter_mut() @@ -224,7 +225,7 @@ impl DatabaseRevisionPad { &mut self, field_rev: Arc, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { match grid_meta .fields .iter() @@ -246,7 +247,7 @@ impl DatabaseRevisionPad { from_index: usize, to_index: usize, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { match move_vec_element( &mut grid_meta.fields, |field| field.id == field_id, @@ -263,7 +264,7 @@ impl DatabaseRevisionPad { pub fn contain_field(&self, field_id: &str) -> bool { self - .grid_rev + .database_rev .fields .iter() .any(|field| field.id == field_id) @@ -271,7 +272,7 @@ impl DatabaseRevisionPad { pub fn get_field_rev(&self, field_id: &str) -> Option<(usize, &Arc)> { self - .grid_rev + .database_rev .fields .iter() .enumerate() @@ -283,10 +284,10 @@ impl DatabaseRevisionPad { field_ids: Option>, ) -> SyncResult>> { match field_ids { - None => Ok(self.grid_rev.fields.clone()), + None => Ok(self.database_rev.fields.clone()), Some(field_ids) => { let field_by_field_id = self - .grid_rev + .database_rev .fields .iter() .map(|field| (&field.id, field)) @@ -309,9 +310,9 @@ impl DatabaseRevisionPad { pub fn create_block_meta_rev( &mut self, - block: GridBlockMetaRevision, + block: DatabaseBlockMetaRevision, ) -> SyncResult> { - self.modify_grid(|grid_meta| { + self.modify_database(|grid_meta| { if grid_meta.blocks.iter().any(|b| b.block_id == block.block_id) { tracing::warn!("Duplicate grid block"); Ok(None) @@ -333,13 +334,13 @@ impl DatabaseRevisionPad { }) } - pub fn get_block_meta_revs(&self) -> Vec> { - self.grid_rev.blocks.clone() + pub fn get_block_meta_revs(&self) -> Vec> { + self.database_rev.blocks.clone() } pub fn update_block_rev( &mut self, - changeset: GridBlockMetaRevisionChangeset, + changeset: DatabaseBlockMetaRevisionChangeset, ) -> SyncResult> { let block_id = changeset.block_id.clone(); self.modify_block(&block_id, |block| { @@ -368,18 +369,18 @@ impl DatabaseRevisionPad { } pub fn get_fields(&self) -> &[Arc] { - &self.grid_rev.fields + &self.database_rev.fields } - fn modify_grid(&mut self, f: F) -> SyncResult> + fn modify_database(&mut self, f: F) -> SyncResult> where F: FnOnce(&mut DatabaseRevision) -> SyncResult>, { - let cloned_grid = self.grid_rev.clone(); - match f(Arc::make_mut(&mut self.grid_rev))? { + let cloned_database = self.database_rev.clone(); + match f(Arc::make_mut(&mut self.database_rev))? { None => Ok(None), Some(_) => { - let old = make_database_rev_json_str(&cloned_grid)?; + let old = make_database_rev_json_str(&cloned_database)?; let new = self.json_str()?; match cal_diff::(old, new) { None => Ok(None), @@ -401,9 +402,9 @@ impl DatabaseRevisionPad { f: F, ) -> SyncResult> where - F: FnOnce(&mut GridBlockMetaRevision) -> SyncResult>, + F: FnOnce(&mut DatabaseBlockMetaRevision) -> SyncResult>, { - self.modify_grid(|grid_rev| { + self.modify_database(|grid_rev| { match grid_rev .blocks .iter() @@ -429,7 +430,7 @@ impl DatabaseRevisionPad { where F: FnOnce(&mut FieldRevision) -> SyncResult>, { - self.modify_grid(|grid_rev| { + self.modify_database(|grid_rev| { match grid_rev .fields .iter() @@ -448,7 +449,7 @@ impl DatabaseRevisionPad { } pub fn json_str(&self) -> SyncResult { - make_database_rev_json_str(&self.grid_rev) + make_database_rev_json_str(&self.database_rev) } } @@ -472,16 +473,16 @@ pub fn make_database_operations(grid_rev: &DatabaseRevision) -> DatabaseOperatio pub fn make_database_revisions(_user_id: &str, grid_rev: &DatabaseRevision) -> Vec { let operations = make_database_operations(grid_rev); let bytes = operations.json_bytes(); - let revision = Revision::initial_revision(&grid_rev.grid_id, bytes); + let revision = Revision::initial_revision(&grid_rev.database_id, bytes); vec![revision] } impl std::default::Default for DatabaseRevisionPad { fn default() -> Self { - let grid = DatabaseRevision::new(&gen_grid_id()); - let operations = make_database_operations(&grid); + let database = DatabaseRevision::new(&gen_database_id()); + let operations = make_database_operations(&database); DatabaseRevisionPad { - grid_rev: Arc::new(grid), + database_rev: Arc::new(database), operations, } } diff --git a/frontend/rust-lib/flowy-client-sync/src/client_database/view_revision_pad.rs b/frontend/rust-lib/flowy-client-sync/src/client_database/database_view_revision_pad.rs similarity index 92% rename from frontend/rust-lib/flowy-client-sync/src/client_database/view_revision_pad.rs rename to frontend/rust-lib/flowy-client-sync/src/client_database/database_view_revision_pad.rs index 4f57d8fe04..4ce588189e 100644 --- a/frontend/rust-lib/flowy-client-sync/src/client_database/view_revision_pad.rs +++ b/frontend/rust-lib/flowy-client-sync/src/client_database/database_view_revision_pad.rs @@ -1,10 +1,10 @@ use crate::errors::{internal_sync_error, SyncError, SyncResult}; use crate::util::cal_diff; -use flowy_sync::util::make_operations_from_revisions; -use grid_model::{ +use database_model::{ DatabaseViewRevision, FieldRevision, FieldTypeRevision, FilterRevision, GroupConfigurationRevision, LayoutRevision, SortRevision, }; +use flowy_sync::util::make_operations_from_revisions; use lib_infra::util::md5; use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform}; use revision_model::Revision; @@ -14,12 +14,12 @@ pub type GridViewOperations = DeltaOperations; pub type GridViewOperationsBuilder = DeltaBuilder; #[derive(Debug, Clone)] -pub struct GridViewRevisionPad { +pub struct DatabaseViewRevisionPad { view: Arc, operations: GridViewOperations, } -impl std::ops::Deref for GridViewRevisionPad { +impl std::ops::Deref for DatabaseViewRevisionPad { type Target = DatabaseViewRevision; fn deref(&self) -> &Self::Target { @@ -27,23 +27,19 @@ impl std::ops::Deref for GridViewRevisionPad { } } -impl GridViewRevisionPad { - // For the moment, the view_id is equal to grid_id. The grid_id represents the database id. +impl DatabaseViewRevisionPad { + // For the moment, the view_id is equal to grid_id. The database_id represents the database id. // A database can be referenced by multiple views. - pub fn new(grid_id: String, view_id: String, layout: LayoutRevision) -> Self { - let view = Arc::new(DatabaseViewRevision::new(grid_id, view_id, layout)); + pub fn new(database_id: String, view_id: String, layout: LayoutRevision) -> Self { + let view = Arc::new(DatabaseViewRevision::new(database_id, view_id, layout)); let json = serde_json::to_string(&view).unwrap(); let operations = GridViewOperationsBuilder::new().insert(&json).build(); Self { view, operations } } - pub fn from_operations(view_id: &str, operations: GridViewOperations) -> SyncResult { + pub fn from_operations(operations: GridViewOperations) -> SyncResult { if operations.is_empty() { - return Ok(GridViewRevisionPad::new( - view_id.to_owned(), - view_id.to_owned(), - LayoutRevision::Grid, - )); + return Err(SyncError::record_not_found().context("Unexpected empty operations")); } let s = operations.content()?; let view: DatabaseViewRevision = serde_json::from_str(&s).map_err(|e| { @@ -57,9 +53,9 @@ impl GridViewRevisionPad { }) } - pub fn from_revisions(view_id: &str, revisions: Vec) -> SyncResult { + pub fn from_revisions(revisions: Vec) -> SyncResult { let operations: GridViewOperations = make_operations_from_revisions(revisions)?; - Self::from_operations(view_id, operations) + Self::from_operations(operations) } pub fn get_groups_by_field_revs( diff --git a/frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs b/frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs index 8eb559cc85..2ae1fd58ae 100644 --- a/frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs +++ b/frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs @@ -1,9 +1,9 @@ mod block_revision_pad; mod database_builder; mod database_revision_pad; -mod view_revision_pad; +mod database_view_revision_pad; pub use block_revision_pad::*; pub use database_builder::*; pub use database_revision_pad::*; -pub use view_revision_pad::*; +pub use database_view_revision_pad::*; diff --git a/frontend/rust-lib/flowy-core/Cargo.toml b/frontend/rust-lib/flowy-core/Cargo.toml index 653447e75f..9b40c20b38 100644 --- a/frontend/rust-lib/flowy-core/Cargo.toml +++ b/frontend/rust-lib/flowy-core/Cargo.toml @@ -12,7 +12,7 @@ flowy-user = { path = "../flowy-user" } flowy-net = { path = "../flowy-net" } flowy-folder = { path = "../flowy-folder" } flowy-database = { path = "../flowy-database" } -grid-model = { path = "../../../shared-lib/grid-model" } +database-model = { path = "../../../shared-lib/database-model" } user-model = { path = "../../../shared-lib/user-model" } flowy-client-ws = { path = "../../../shared-lib/flowy-client-ws" } flowy-sqlite = { path = "../flowy-sqlite", optional = true } diff --git a/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs b/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs index 931063d971..a0c0970df0 100644 --- a/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs +++ b/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs @@ -1,6 +1,7 @@ use bytes::Bytes; use flowy_sqlite::ConnectionPool; +use database_model::BuildDatabaseContext; use flowy_client_ws::FlowyWebSocketConnect; use flowy_database::entities::LayoutTypePB; use flowy_database::manager::{make_database_view_data, DatabaseManager}; @@ -19,7 +20,6 @@ use flowy_net::{http_server::folder::FolderHttpCloudService, local_server::Local use flowy_revision::{RevisionWebSocket, WSStateReceiver}; use flowy_user::services::UserSession; use futures_core::future::BoxFuture; -use grid_model::BuildDatabaseContext; use lib_infra::future::{BoxResultFuture, FutureResult}; use lib_ws::{WSChannel, WSMessageReceiver, WebSocketRawMessage}; use revision_model::Revision; @@ -36,7 +36,7 @@ impl FolderDepsResolver { server_config: &ClientServerConfiguration, ws_conn: &Arc, text_block_manager: &Arc, - grid_manager: &Arc, + database_manager: &Arc, ) -> Arc { let user: Arc = Arc::new(WorkspaceUserImpl(user_session.clone())); let database: Arc = Arc::new(WorkspaceDatabaseImpl(user_session)); @@ -47,7 +47,7 @@ impl FolderDepsResolver { }; let view_data_processor = - make_view_data_processor(text_block_manager.clone(), grid_manager.clone()); + make_view_data_processor(text_block_manager.clone(), database_manager.clone()); let folder_manager = Arc::new( FolderManager::new( user.clone(), @@ -74,7 +74,7 @@ impl FolderDepsResolver { fn make_view_data_processor( document_manager: Arc, - grid_manager: Arc, + database_manager: Arc, ) -> ViewDataProcessorMap { let mut map: HashMap> = HashMap::new(); @@ -86,7 +86,7 @@ fn make_view_data_processor( map.insert(data_type, document_processor.clone()); }); - let grid_data_impl = Arc::new(GridViewDataProcessor(grid_manager)); + let grid_data_impl = Arc::new(GridViewDataProcessor(database_manager)); grid_data_impl .data_types() .into_iter() @@ -177,7 +177,7 @@ impl ViewDataProcessor for DocumentViewDataProcessor { debug_assert_eq!(layout, ViewLayoutTypePB::Document); let view_data = match String::from_utf8(view_data.to_vec()) { Ok(content) => match make_transaction_from_document_content(&content) { - Ok(transaction) => transaction.to_bytes().unwrap_or(vec![]), + Ok(transaction) => transaction.to_bytes().unwrap_or_else(|_| vec![]), Err(_) => vec![], }, Err(_) => vec![], @@ -259,9 +259,9 @@ impl ViewDataProcessor for GridViewDataProcessor { ) -> FutureResult<(), FlowyError> { let revision = Revision::initial_revision(view_id, delta_data); let view_id = view_id.to_string(); - let grid_manager = self.0.clone(); + let database_manager = self.0.clone(); FutureResult::new(async move { - grid_manager + database_manager .create_database(view_id, vec![revision]) .await?; Ok(()) @@ -269,20 +269,20 @@ impl ViewDataProcessor for GridViewDataProcessor { } fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> { - let grid_manager = self.0.clone(); + let database_manager = self.0.clone(); let view_id = view_id.to_string(); FutureResult::new(async move { - grid_manager.close_database(view_id).await?; + database_manager.close_database(view_id).await?; Ok(()) }) } fn get_view_data(&self, view: &ViewPB) -> FutureResult { - let grid_manager = self.0.clone(); + let database_manager = self.0.clone(); let view_id = view.id.clone(); FutureResult::new(async move { - let editor = grid_manager.open_database(view_id).await?; - let delta_bytes = editor.duplicate_grid().await?; + let editor = database_manager.open_database(view_id).await?; + let delta_bytes = editor.duplicate_database().await?; Ok(delta_bytes.into()) }) } @@ -308,9 +308,9 @@ impl ViewDataProcessor for GridViewDataProcessor { let user_id = user_id.to_string(); let view_id = view_id.to_string(); - let grid_manager = self.0.clone(); + let database_manager = self.0.clone(); FutureResult::new(async move { - make_database_view_data(&user_id, &view_id, layout, grid_manager, build_context).await + make_database_view_data(&user_id, &view_id, layout, database_manager, build_context).await }) } @@ -323,7 +323,7 @@ impl ViewDataProcessor for GridViewDataProcessor { ) -> FutureResult { let user_id = user_id.to_string(); let view_id = view_id.to_string(); - let grid_manager = self.0.clone(); + let database_manager = self.0.clone(); let layout = match layout { ViewLayoutTypePB::Grid => LayoutTypePB::Grid, @@ -339,7 +339,7 @@ impl ViewDataProcessor for GridViewDataProcessor { FutureResult::new(async move { let bytes = Bytes::from(data); let build_context = BuildDatabaseContext::try_from(bytes)?; - make_database_view_data(&user_id, &view_id, layout, grid_manager, build_context).await + make_database_view_data(&user_id, &view_id, layout, database_manager, build_context).await }) } diff --git a/frontend/rust-lib/flowy-database/Cargo.toml b/frontend/rust-lib/flowy-database/Cargo.toml index bd5759b880..9bc9140769 100644 --- a/frontend/rust-lib/flowy-database/Cargo.toml +++ b/frontend/rust-lib/flowy-database/Cargo.toml @@ -15,7 +15,7 @@ flowy-error = { path = "../flowy-error", features = ["adaptor_database", "adapto flowy-derive = { path = "../flowy-derive" } lib-ot = { path = "../../../shared-lib/lib-ot" } lib-infra = { path = "../../../shared-lib/lib-infra" } -grid-model = { path = "../../../shared-lib/grid-model" } +database-model = { path = "../../../shared-lib/database-model" } flowy-client-sync = { path = "../flowy-client-sync"} revision-model = { path = "../../../shared-lib/revision-model" } flowy-sqlite = { path = "../flowy-sqlite", optional = true } diff --git a/frontend/rust-lib/flowy-database/src/entities/cell_entities.rs b/frontend/rust-lib/flowy-database/src/entities/cell_entities.rs index a0582ead31..ef4b44a970 100644 --- a/frontend/rust-lib/flowy-database/src/entities/cell_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/cell_entities.rs @@ -1,8 +1,8 @@ use crate::entities::parser::NotEmptyStr; use crate::entities::FieldType; +use database_model::{CellRevision, RowChangeset}; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; -use grid_model::{CellRevision, RowChangeset}; use std::collections::HashMap; #[derive(ProtoBuf, Default)] diff --git a/frontend/rust-lib/flowy-database/src/entities/field_entities.rs b/frontend/rust-lib/flowy-database/src/entities/field_entities.rs index e48922e82c..54dc8ad68f 100644 --- a/frontend/rust-lib/flowy-database/src/entities/field_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/field_entities.rs @@ -1,6 +1,6 @@ +use database_model::{FieldRevision, FieldTypeRevision}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::{FieldRevision, FieldTypeRevision}; use serde_repr::*; use std::sync::Arc; @@ -88,7 +88,7 @@ impl std::convert::From<&Arc> for FieldIdPB { #[derive(Debug, Clone, Default, ProtoBuf)] pub struct DatabaseFieldChangesetPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub inserted_fields: Vec, @@ -103,7 +103,7 @@ pub struct DatabaseFieldChangesetPB { impl DatabaseFieldChangesetPB { pub fn insert(database_id: &str, inserted_fields: Vec) -> Self { Self { - database_id: database_id.to_owned(), + view_id: database_id.to_owned(), inserted_fields, deleted_fields: vec![], updated_fields: vec![], @@ -112,7 +112,7 @@ impl DatabaseFieldChangesetPB { pub fn delete(database_id: &str, deleted_fields: Vec) -> Self { Self { - database_id: database_id.to_string(), + view_id: database_id.to_string(), inserted_fields: vec![], deleted_fields, updated_fields: vec![], @@ -121,7 +121,7 @@ impl DatabaseFieldChangesetPB { pub fn update(database_id: &str, updated_fields: Vec) -> Self { Self { - database_id: database_id.to_string(), + view_id: database_id.to_string(), inserted_fields: vec![], deleted_fields: vec![], updated_fields, @@ -150,7 +150,7 @@ impl IndexFieldPB { #[derive(Debug, Default, ProtoBuf)] pub struct CreateFieldPayloadPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub field_type: FieldType, @@ -161,7 +161,7 @@ pub struct CreateFieldPayloadPB { #[derive(Clone)] pub struct CreateFieldParams { - pub database_id: String, + pub view_id: String, pub field_type: FieldType, pub type_option_data: Option>, } @@ -170,10 +170,9 @@ impl TryInto for CreateFieldPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; Ok(CreateFieldParams { - database_id: database_id.0, + view_id: view_id.0, field_type: self.field_type, type_option_data: self.type_option_data, }) @@ -183,7 +182,7 @@ impl TryInto for CreateFieldPayloadPB { #[derive(Debug, Default, ProtoBuf)] pub struct UpdateFieldTypePayloadPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub field_id: String, @@ -196,7 +195,7 @@ pub struct UpdateFieldTypePayloadPB { } pub struct EditFieldParams { - pub database_id: String, + pub view_id: String, pub field_id: String, pub field_type: FieldType, } @@ -205,11 +204,10 @@ impl TryInto for UpdateFieldTypePayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?; Ok(EditFieldParams { - database_id: database_id.0, + view_id: view_id.0, field_id: field_id.0, field_type: self.field_type, }) @@ -219,7 +217,7 @@ impl TryInto for UpdateFieldTypePayloadPB { #[derive(Debug, Default, ProtoBuf)] pub struct TypeOptionPathPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub field_id: String, @@ -229,7 +227,7 @@ pub struct TypeOptionPathPB { } pub struct TypeOptionPathParams { - pub database_id: String, + pub view_id: String, pub field_id: String, pub field_type: FieldType, } @@ -238,11 +236,10 @@ impl TryInto for TypeOptionPathPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let database_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?; Ok(TypeOptionPathParams { - database_id: database_id.0, + view_id: database_id.0, field_id: field_id.0, field_type: self.field_type, }) @@ -252,7 +249,7 @@ impl TryInto for TypeOptionPathPB { #[derive(Debug, Default, ProtoBuf)] pub struct TypeOptionPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub field: FieldPB, @@ -317,7 +314,7 @@ impl std::convert::From for RepeatedFieldIdPB { #[derive(ProtoBuf, Default)] pub struct TypeOptionChangesetPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub field_id: String, @@ -329,7 +326,7 @@ pub struct TypeOptionChangesetPB { #[derive(Clone)] pub struct TypeOptionChangesetParams { - pub database_id: String, + pub view_id: String, pub field_id: String, pub type_option_data: Vec, } @@ -338,12 +335,11 @@ impl TryInto for TypeOptionChangesetPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let _ = NotEmptyStr::parse(self.field_id.clone()).map_err(|_| ErrorCode::FieldIdIsEmpty)?; Ok(TypeOptionChangesetParams { - database_id: database_id.0, + view_id: view_id.0, field_id: self.field_id, type_option_data: self.type_option_data, }) @@ -353,14 +349,14 @@ impl TryInto for TypeOptionChangesetPB { #[derive(ProtoBuf, Default)] pub struct GetFieldPayloadPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2, one_of)] pub field_ids: Option, } pub struct GetFieldParams { - pub database_id: String, + pub view_id: String, pub field_ids: Option>, } @@ -368,8 +364,7 @@ impl TryInto for GetFieldPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let field_ids = self.field_ids.map(|repeated| { repeated .items @@ -379,7 +374,7 @@ impl TryInto for GetFieldPayloadPB { }); Ok(GetFieldParams { - database_id: database_id.0, + view_id: view_id.0, field_ids, }) } @@ -624,27 +619,26 @@ pub struct DuplicateFieldPayloadPB { pub field_id: String, #[pb(index = 2)] - pub database_id: String, + pub view_id: String, } -#[derive(Debug, Clone, Default, ProtoBuf)] -pub struct GridFieldIdentifierPayloadPB { - #[pb(index = 1)] - pub field_id: String, - - #[pb(index = 2)] - pub database_id: String, -} +// #[derive(Debug, Clone, Default, ProtoBuf)] +// pub struct GridFieldIdentifierPayloadPB { +// #[pb(index = 1)] +// pub field_id: String, +// +// #[pb(index = 2)] +// pub view_id: String, +// } impl TryInto for DuplicateFieldPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?; Ok(FieldIdParams { - database_id: database_id.0, + view_id: view_id.0, field_id: field_id.0, }) } @@ -656,18 +650,17 @@ pub struct DeleteFieldPayloadPB { pub field_id: String, #[pb(index = 2)] - pub database_id: String, + pub view_id: String, } impl TryInto for DeleteFieldPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?; Ok(FieldIdParams { - database_id: database_id.0, + view_id: view_id.0, field_id: field_id.0, }) } @@ -675,5 +668,5 @@ impl TryInto for DeleteFieldPayloadPB { pub struct FieldIdParams { pub field_id: String, - pub database_id: String, + pub view_id: String, } diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs index 7cc133e32a..544ab2574d 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs @@ -1,7 +1,7 @@ use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct CheckboxFilterPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs index b823b7919f..60c70273e0 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs @@ -1,7 +1,7 @@ use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct ChecklistFilterPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs index c6ad0a7f4a..5eb962a1fa 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs @@ -1,7 +1,7 @@ use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; use serde::{Deserialize, Serialize}; use std::str::FromStr; diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs index cea30b70ea..8d8c32cc4d 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs @@ -1,7 +1,7 @@ use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct NumberFilterPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/select_option_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/select_option_filter.rs index d4e58c0552..868ea95345 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/select_option_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/select_option_filter.rs @@ -1,8 +1,8 @@ use crate::services::field::SelectOptionIds; use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct SelectOptionFilterPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs index 483c1e61ce..5b468bd0cc 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs @@ -1,7 +1,7 @@ use crate::services::filter::FromFilterString; +use database_model::FilterRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::FilterRevision; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct TextFilterPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/filter_entities/util.rs b/frontend/rust-lib/flowy-database/src/entities/filter_entities/util.rs index e1f8119fdb..ec5a5afb77 100644 --- a/frontend/rust-lib/flowy-database/src/entities/filter_entities/util.rs +++ b/frontend/rust-lib/flowy-database/src/entities/filter_entities/util.rs @@ -6,9 +6,9 @@ use crate::entities::{ use crate::services::field::SelectOptionIds; use crate::services::filter::FilterType; use bytes::Bytes; +use database_model::{FieldRevision, FieldTypeRevision, FilterRevision}; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; -use grid_model::{FieldRevision, FieldTypeRevision, FilterRevision}; use std::convert::TryInto; use std::sync::Arc; diff --git a/frontend/rust-lib/flowy-database/src/entities/grid_entities.rs b/frontend/rust-lib/flowy-database/src/entities/grid_entities.rs index 09e5ac8667..ffd8264900 100644 --- a/frontend/rust-lib/flowy-database/src/entities/grid_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/grid_entities.rs @@ -23,12 +23,12 @@ pub struct CreateDatabasePayloadPB { } #[derive(Clone, ProtoBuf, Default, Debug)] -pub struct DatabaseIdPB { +pub struct DatabaseViewIdPB { #[pb(index = 1)] pub value: String, } -impl AsRef for DatabaseIdPB { +impl AsRef for DatabaseViewIdPB { fn as_ref(&self) -> &str { &self.value } diff --git a/frontend/rust-lib/flowy-database/src/entities/group_entities/configuration.rs b/frontend/rust-lib/flowy-database/src/entities/group_entities/configuration.rs index 13dfcc6069..0d8f724b8e 100644 --- a/frontend/rust-lib/flowy-database/src/entities/group_entities/configuration.rs +++ b/frontend/rust-lib/flowy-database/src/entities/group_entities/configuration.rs @@ -1,5 +1,5 @@ +use database_model::{GroupRevision, SelectOptionGroupConfigurationRevision}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; -use grid_model::{GroupRevision, SelectOptionGroupConfigurationRevision}; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct UrlGroupConfigurationPB { diff --git a/frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs b/frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs index cff0eafc2c..bd163ec060 100644 --- a/frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs +++ b/frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs @@ -1,16 +1,16 @@ use crate::entities::parser::NotEmptyStr; use crate::entities::{CreateRowParams, FieldType, LayoutTypePB, RowPB}; use crate::services::group::Group; +use database_model::{FieldTypeRevision, GroupConfigurationRevision}; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; -use grid_model::{FieldTypeRevision, GroupConfigurationRevision}; use std::convert::TryInto; use std::sync::Arc; #[derive(ProtoBuf, Debug, Default, Clone)] pub struct CreateBoardCardPayloadPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub group_id: String, @@ -23,8 +23,7 @@ impl TryInto for CreateBoardCardPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let group_id = NotEmptyStr::parse(self.group_id).map_err(|_| ErrorCode::GroupIdIsEmpty)?; let start_row_id = match self.start_row_id { None => None, @@ -35,7 +34,7 @@ impl TryInto for CreateBoardCardPayloadPB { ), }; Ok(CreateRowParams { - database_id: database_id.0, + view_id: view_id.0, start_row_id, group_id: Some(group_id.0), layout: LayoutTypePB::Board, diff --git a/frontend/rust-lib/flowy-database/src/entities/row_entities.rs b/frontend/rust-lib/flowy-database/src/entities/row_entities.rs index e3f43396e0..fddcd6bbd0 100644 --- a/frontend/rust-lib/flowy-database/src/entities/row_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/row_entities.rs @@ -1,8 +1,8 @@ use crate::entities::parser::NotEmptyStr; use crate::entities::LayoutTypePB; +use database_model::RowRevision; use flowy_derive::ProtoBuf; use flowy_error::ErrorCode; -use grid_model::RowRevision; use std::sync::Arc; /// [RowPB] Describes a row. Has the id of the parent Block. Has the metadata of the row. @@ -136,14 +136,14 @@ pub struct UpdatedRowPB { #[derive(Debug, Default, Clone, ProtoBuf)] pub struct RowIdPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub row_id: String, } pub struct RowIdParams { - pub database_id: String, + pub view_id: String, pub row_id: String, } @@ -151,12 +151,11 @@ impl TryInto for RowIdPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; let row_id = NotEmptyStr::parse(self.row_id).map_err(|_| ErrorCode::RowIdIsEmpty)?; Ok(RowIdParams { - database_id: database_id.0, + view_id: view_id.0, row_id: row_id.0, }) } @@ -174,7 +173,7 @@ pub struct BlockRowIdPB { #[derive(ProtoBuf, Default)] pub struct CreateRowPayloadPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2, one_of)] pub start_row_id: Option, @@ -182,7 +181,7 @@ pub struct CreateRowPayloadPB { #[derive(Default)] pub struct CreateRowParams { - pub database_id: String, + pub view_id: String, pub start_row_id: Option, pub group_id: Option, pub layout: LayoutTypePB, @@ -192,11 +191,10 @@ impl TryInto for CreateRowPayloadPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = - NotEmptyStr::parse(self.database_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; + let view_id = NotEmptyStr::parse(self.view_id).map_err(|_| ErrorCode::DatabaseIdIsEmpty)?; Ok(CreateRowParams { - database_id: database_id.0, + view_id: view_id.0, start_row_id: self.start_row_id, group_id: None, layout: LayoutTypePB::Grid, diff --git a/frontend/rust-lib/flowy-database/src/entities/setting_entities.rs b/frontend/rust-lib/flowy-database/src/entities/setting_entities.rs index ddd9467700..36cbbfeb82 100644 --- a/frontend/rust-lib/flowy-database/src/entities/setting_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/setting_entities.rs @@ -5,9 +5,9 @@ use crate::entities::{ DeleteSortPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB, RepeatedGroupConfigurationPB, RepeatedSortPB, }; +use database_model::LayoutRevision; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::LayoutRevision; use std::convert::TryInto; use strum::IntoEnumIterator; use strum_macros::EnumIter; @@ -85,7 +85,7 @@ impl std::convert::From for LayoutRevision { #[derive(Default, ProtoBuf)] pub struct DatabaseSettingChangesetPB { #[pb(index = 1)] - pub database_id: String, + pub view_id: String, #[pb(index = 2)] pub layout_type: LayoutTypePB, @@ -113,7 +113,7 @@ impl TryInto for DatabaseSettingChangesetPB { type Error = ErrorCode; fn try_into(self) -> Result { - let database_id = NotEmptyStr::parse(self.database_id) + let view_id = NotEmptyStr::parse(self.view_id) .map_err(|_| ErrorCode::ViewIdInvalid)? .0; @@ -148,7 +148,7 @@ impl TryInto for DatabaseSettingChangesetPB { }; Ok(DatabaseSettingChangesetParams { - database_id, + view_id, layout_type: self.layout_type.into(), insert_filter, delete_filter, @@ -161,7 +161,7 @@ impl TryInto for DatabaseSettingChangesetPB { } pub struct DatabaseSettingChangesetParams { - pub database_id: String, + pub view_id: String, pub layout_type: LayoutRevision, pub insert_filter: Option, pub delete_filter: Option, diff --git a/frontend/rust-lib/flowy-database/src/entities/sort_entities.rs b/frontend/rust-lib/flowy-database/src/entities/sort_entities.rs index f0204c9385..ff99b8a853 100644 --- a/frontend/rust-lib/flowy-database/src/entities/sort_entities.rs +++ b/frontend/rust-lib/flowy-database/src/entities/sort_entities.rs @@ -3,9 +3,9 @@ use crate::entities::FieldType; use crate::services::sort::SortType; use std::sync::Arc; +use database_model::{FieldTypeRevision, SortCondition, SortRevision}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; -use grid_model::{FieldTypeRevision, SortCondition, SortRevision}; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] pub struct SortPB { diff --git a/frontend/rust-lib/flowy-database/src/event_handler.rs b/frontend/rust-lib/flowy-database/src/event_handler.rs index 4708dd442e..94f0bd8c36 100644 --- a/frontend/rust-lib/flowy-database/src/event_handler.rs +++ b/frontend/rust-lib/flowy-database/src/event_handler.rs @@ -8,17 +8,17 @@ use crate::services::field::{ SelectOptionChangeset, SelectOptionChangesetPB, SelectOptionIds, SelectOptionPB, }; use crate::services::row::make_row_from_row_rev; +use database_model::FieldRevision; use flowy_error::{ErrorCode, FlowyError, FlowyResult}; -use grid_model::FieldRevision; use lib_dispatch::prelude::{data_result, AFPluginData, AFPluginState, DataResult}; use std::sync::Arc; #[tracing::instrument(level = "trace", skip(data, manager), err)] pub(crate) async fn get_database_data_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> DataResult { - let database_id: DatabaseIdPB = data.into_inner(); + let database_id: DatabaseViewIdPB = data.into_inner(); let editor = manager.open_database(database_id.as_ref()).await?; let database = editor.get_database(database_id.as_ref()).await?; data_result(database) @@ -26,10 +26,10 @@ pub(crate) async fn get_database_data_handler( #[tracing::instrument(level = "trace", skip(data, manager), err)] pub(crate) async fn get_database_setting_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> DataResult { - let database_id: DatabaseIdPB = data.into_inner(); + let database_id: DatabaseViewIdPB = data.into_inner(); let editor = manager.open_database(database_id).await?; let database_setting = editor.get_setting().await?; data_result(database_setting) @@ -42,7 +42,7 @@ pub(crate) async fn update_database_setting_handler( ) -> Result<(), FlowyError> { let params: DatabaseSettingChangesetParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; if let Some(insert_params) = params.insert_group { editor.insert_group(insert_params).await?; } @@ -70,10 +70,10 @@ pub(crate) async fn update_database_setting_handler( #[tracing::instrument(level = "trace", skip(data, manager), err)] pub(crate) async fn get_all_filters_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> DataResult { - let database_id: DatabaseIdPB = data.into_inner(); + let database_id: DatabaseViewIdPB = data.into_inner(); let editor = manager.open_database(database_id).await?; let filters = RepeatedFilterPB { items: editor.get_all_filters().await?, @@ -83,10 +83,10 @@ pub(crate) async fn get_all_filters_handler( #[tracing::instrument(level = "trace", skip(data, manager), err)] pub(crate) async fn get_all_sorts_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> DataResult { - let database_id: DatabaseIdPB = data.into_inner(); + let database_id: DatabaseViewIdPB = data.into_inner(); let editor = manager.open_database(database_id.as_ref()).await?; let sorts = RepeatedSortPB { items: editor.get_all_sorts(database_id.as_ref()).await?, @@ -96,10 +96,10 @@ pub(crate) async fn get_all_sorts_handler( #[tracing::instrument(level = "trace", skip(data, manager), err)] pub(crate) async fn delete_all_sorts_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> Result<(), FlowyError> { - let database_id: DatabaseIdPB = data.into_inner(); + let database_id: DatabaseViewIdPB = data.into_inner(); let editor = manager.open_database(database_id.as_ref()).await?; editor.delete_all_sorts(database_id.as_ref()).await?; Ok(()) @@ -111,7 +111,7 @@ pub(crate) async fn get_fields_handler( manager: AFPluginState>, ) -> DataResult { let params: GetFieldParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; let field_revs = editor.get_field_revs(params.field_ids).await?; let repeated_field: RepeatedFieldPB = field_revs .into_iter() @@ -138,15 +138,10 @@ pub(crate) async fn update_field_type_option_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: TypeOptionChangesetParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; let old_field_rev = editor.get_field_rev(¶ms.field_id).await; editor - .update_field_type_option( - ¶ms.database_id, - ¶ms.field_id, - params.type_option_data, - old_field_rev, - ) + .update_field_type_option(¶ms.field_id, params.type_option_data, old_field_rev) .await?; Ok(()) } @@ -157,7 +152,7 @@ pub(crate) async fn delete_field_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: FieldIdParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; editor.delete_field(¶ms.field_id).await?; Ok(()) } @@ -168,7 +163,7 @@ pub(crate) async fn switch_to_field_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: EditFieldParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; let old_field_rev = editor.get_field_rev(¶ms.field_id).await; editor .switch_to_field_type(¶ms.field_id, ¶ms.field_type) @@ -183,12 +178,7 @@ pub(crate) async fn switch_to_field_handler( // Update the type-option data after the field type has been changed let type_option_data = get_type_option_data(&new_field_rev, ¶ms.field_type).await?; editor - .update_field_type_option( - ¶ms.database_id, - &new_field_rev.id, - type_option_data, - old_field_rev, - ) + .update_field_type_option(&new_field_rev.id, type_option_data, old_field_rev) .await?; Ok(()) @@ -200,7 +190,7 @@ pub(crate) async fn duplicate_field_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: FieldIdParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; editor.duplicate_field(¶ms.field_id).await?; Ok(()) } @@ -212,14 +202,14 @@ pub(crate) async fn get_field_type_option_data_handler( manager: AFPluginState>, ) -> DataResult { let params: TypeOptionPathParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; match editor.get_field_rev(¶ms.field_id).await { None => Err(FlowyError::record_not_found()), Some(field_rev) => { let field_type = field_rev.ty.into(); let type_option_data = get_type_option_data(&field_rev, &field_type).await?; let data = TypeOptionPB { - database_id: params.database_id, + view_id: params.view_id, field: field_rev.into(), type_option_data, }; @@ -235,7 +225,7 @@ pub(crate) async fn create_field_type_option_data_handler( manager: AFPluginState>, ) -> DataResult { let params: CreateFieldParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; let field_rev = editor .create_new_field_rev_with_type_option(¶ms.field_type, params.type_option_data) .await?; @@ -243,7 +233,7 @@ pub(crate) async fn create_field_type_option_data_handler( let type_option_data = get_type_option_data(&field_rev, &field_type).await?; data_result(TypeOptionPB { - database_id: params.database_id, + view_id: params.view_id, field: field_rev.into(), type_option_data, }) @@ -286,7 +276,7 @@ pub(crate) async fn get_row_handler( manager: AFPluginState>, ) -> DataResult { let params: RowIdParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; let row = editor .get_row_rev(¶ms.row_id) .await? @@ -301,7 +291,7 @@ pub(crate) async fn delete_row_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: RowIdParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; editor.delete_row(¶ms.row_id).await?; Ok(()) } @@ -312,7 +302,7 @@ pub(crate) async fn duplicate_row_handler( manager: AFPluginState>, ) -> Result<(), FlowyError> { let params: RowIdParams = data.into_inner().try_into()?; - let editor = manager.get_database_editor(¶ms.database_id).await?; + let editor = manager.get_database_editor(¶ms.view_id).await?; editor.duplicate_row(¶ms.row_id).await?; Ok(()) } @@ -334,9 +324,7 @@ pub(crate) async fn create_table_row_handler( manager: AFPluginState>, ) -> DataResult { let params: CreateRowParams = data.into_inner().try_into()?; - let editor = manager - .get_database_editor(params.database_id.as_ref()) - .await?; + let editor = manager.get_database_editor(params.view_id.as_ref()).await?; let row = editor.create_row(params).await?; data_result(row) } @@ -531,10 +519,10 @@ pub(crate) async fn update_date_cell_handler( #[tracing::instrument(level = "trace", skip_all, err)] pub(crate) async fn get_groups_handler( - data: AFPluginData, + data: AFPluginData, manager: AFPluginState>, ) -> DataResult { - let params: DatabaseIdPB = data.into_inner(); + let params: DatabaseViewIdPB = data.into_inner(); let editor = manager.get_database_editor(¶ms.value).await?; let group = editor.load_groups().await?; data_result(group) @@ -546,9 +534,7 @@ pub(crate) async fn create_board_card_handler( manager: AFPluginState>, ) -> DataResult { let params: CreateRowParams = data.into_inner().try_into()?; - let editor = manager - .get_database_editor(params.database_id.as_ref()) - .await?; + let editor = manager.get_database_editor(params.view_id.as_ref()).await?; let row = editor.create_row(params).await?; data_result(row) } diff --git a/frontend/rust-lib/flowy-database/src/event_map.rs b/frontend/rust-lib/flowy-database/src/event_map.rs index 07db6891fc..8c485974e8 100644 --- a/frontend/rust-lib/flowy-database/src/event_map.rs +++ b/frontend/rust-lib/flowy-database/src/event_map.rs @@ -59,15 +59,15 @@ pub fn init(database_manager: Arc) -> AFPlugin { pub enum DatabaseEvent { /// [GetDatabase] event is used to get the [DatabasePB] /// - /// The event handler accepts a [DatabaseIdPB] and returns a [DatabasePB] if there are no errors. - #[event(input = "DatabaseIdPB", output = "DatabasePB")] + /// The event handler accepts a [DatabaseViewIdPB] and returns a [DatabasePB] if there are no errors. + #[event(input = "DatabaseViewIdPB", output = "DatabasePB")] GetDatabase = 0, /// [GetDatabaseSetting] event is used to get the database's settings. /// - /// The event handler accepts [DatabaseIdPB] and return [DatabaseViewSettingPB] + /// The event handler accepts [DatabaseViewIdPB] and return [DatabaseViewSettingPB] /// if there is no errors. - #[event(input = "DatabaseIdPB", output = "DatabaseViewSettingPB")] + #[event(input = "DatabaseViewIdPB", output = "DatabaseViewSettingPB")] GetDatabaseSetting = 2, /// [UpdateDatabaseSetting] event is used to update the database's settings. @@ -76,13 +76,13 @@ pub enum DatabaseEvent { #[event(input = "DatabaseSettingChangesetPB")] UpdateDatabaseSetting = 3, - #[event(input = "DatabaseIdPB", output = "RepeatedFilterPB")] + #[event(input = "DatabaseViewIdPB", output = "RepeatedFilterPB")] GetAllFilters = 4, - #[event(input = "DatabaseIdPB", output = "RepeatedSortPB")] + #[event(input = "DatabaseViewIdPB", output = "RepeatedSortPB")] GetAllSorts = 5, - #[event(input = "DatabaseIdPB")] + #[event(input = "DatabaseViewIdPB")] DeleteAllSorts = 6, /// [GetFields] event is used to get the database's settings. @@ -215,7 +215,7 @@ pub enum DatabaseEvent { #[event(input = "DateChangesetPB")] UpdateDateCell = 80, - #[event(input = "DatabaseIdPB", output = "RepeatedGroupPB")] + #[event(input = "DatabaseViewIdPB", output = "RepeatedGroupPB")] GetGroup = 100, #[event(input = "CreateBoardCardPayloadPB", output = "RowPB")] diff --git a/frontend/rust-lib/flowy-database/src/manager.rs b/frontend/rust-lib/flowy-database/src/manager.rs index a4b7d1dba0..03e4a8c350 100644 --- a/frontend/rust-lib/flowy-database/src/manager.rs +++ b/frontend/rust-lib/flowy-database/src/manager.rs @@ -1,7 +1,9 @@ use crate::entities::LayoutTypePB; -use crate::services::grid_editor::{ - DatabaseRevisionEditor, GridRevisionCloudService, GridRevisionMergeable, GridRevisionSerde, +use crate::services::database::{ + make_database_block_rev_manager, DatabaseRevisionCloudService, DatabaseRevisionEditor, + DatabaseRevisionMergeable, DatabaseRevisionSerde, }; +use crate::services::database_view::make_database_view_rev_manager; use crate::services::persistence::block_index::BlockIndexCache; use crate::services::persistence::kv::DatabaseKVPersistence; use crate::services::persistence::migration::DatabaseMigration; @@ -9,8 +11,8 @@ use crate::services::persistence::rev_sqlite::{ SQLiteDatabaseRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence, }; use crate::services::persistence::GridDatabase; -use crate::services::view_editor::make_database_view_rev_manager; use bytes::Bytes; +use database_model::{BuildDatabaseContext, DatabaseRevision, DatabaseViewRevision}; use flowy_client_sync::client_database::{ make_database_block_operations, make_database_operations, make_grid_view_operations, }; @@ -19,12 +21,10 @@ use flowy_revision::{ RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration, RevisionWebSocket, }; use flowy_sqlite::ConnectionPool; -use grid_model::{BuildDatabaseContext, DatabaseRevision, DatabaseViewRevision}; use lib_infra::async_trait::async_trait; use lib_infra::ref_map::{RefCountHashMap, RefCountValue}; use revision_model::Revision; -use crate::services::block_manager::make_database_block_rev_manager; use flowy_task::TaskDispatcher; use std::sync::Arc; use tokio::sync::RwLock; @@ -135,6 +135,7 @@ impl DatabaseManager { } // #[tracing::instrument(level = "debug", skip(self), err)] + //TODO(nathan): map the view_id to database_id pub async fn get_database_editor( &self, database_id: &str, @@ -175,11 +176,11 @@ impl DatabaseManager { ) -> Result, FlowyError> { let user = self.database_user.clone(); let token = user.token()?; - let cloud = Arc::new(GridRevisionCloudService::new(token)); + let cloud = Arc::new(DatabaseRevisionCloudService::new(token)); let mut rev_manager = self.make_database_rev_manager(database_id, pool.clone())?; let database_pad = Arc::new(RwLock::new( rev_manager - .initialize::(Some(cloud)) + .initialize::(Some(cloud)) .await?, )); let database_editor = DatabaseRevisionEditor::new( @@ -213,7 +214,7 @@ impl DatabaseManager { let snapshot_persistence = SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool); - let rev_compress = GridRevisionMergeable(); + let rev_compress = DatabaseRevisionMergeable(); let rev_manager = RevisionManager::new( &user_id, database_id, @@ -236,7 +237,7 @@ pub async fn make_database_view_data( field_revs, block_metas, blocks, - grid_view_revision_data, + database_view_data: grid_view_revision_data, } = build_context; for block_meta_data in &blocks { @@ -249,40 +250,40 @@ pub async fn make_database_view_data( }); // Create grid's block - let grid_block_delta = make_database_block_operations(block_meta_data); - let block_delta_data = grid_block_delta.json_bytes(); - let revision = Revision::initial_revision(block_id, block_delta_data); + let database_block_ops = make_database_block_operations(block_meta_data); + let database_block_bytes = database_block_ops.json_bytes(); + let revision = Revision::initial_revision(block_id, database_block_bytes); database_manager .create_database_block(&block_id, vec![revision]) .await?; } // Will replace the grid_id with the value returned by the gen_grid_id() - let grid_id = view_id.to_owned(); - let grid_rev = DatabaseRevision::from_build_context(&grid_id, field_revs, block_metas); + let database_id = view_id.to_owned(); + let database_rev = DatabaseRevision::from_build_context(&database_id, field_revs, block_metas); // Create grid - let grid_rev_delta = make_database_operations(&grid_rev); - let grid_rev_delta_bytes = grid_rev_delta.json_bytes(); - let revision = Revision::initial_revision(&grid_id, grid_rev_delta_bytes.clone()); + let database_ops = make_database_operations(&database_rev); + let database_bytes = database_ops.json_bytes(); + let revision = Revision::initial_revision(&database_id, database_bytes.clone()); database_manager - .create_database(&grid_id, vec![revision]) + .create_database(&database_id, vec![revision]) .await?; // Create grid view let grid_view = if grid_view_revision_data.is_empty() { - DatabaseViewRevision::new(grid_id, view_id.to_owned(), layout.into()) + DatabaseViewRevision::new(database_id, view_id.to_owned(), layout.into()) } else { DatabaseViewRevision::from_json(grid_view_revision_data)? }; - let grid_view_delta = make_grid_view_operations(&grid_view); - let grid_view_delta_bytes = grid_view_delta.json_bytes(); - let revision = Revision::initial_revision(view_id, grid_view_delta_bytes); + let database_view_ops = make_grid_view_operations(&grid_view); + let database_view_bytes = database_view_ops.json_bytes(); + let revision = Revision::initial_revision(view_id, database_view_bytes); database_manager .create_database_view(view_id, vec![revision]) .await?; - Ok(grid_rev_delta_bytes) + Ok(database_bytes) } #[async_trait] diff --git a/frontend/rust-lib/flowy-database/src/services/cell/cell_operation.rs b/frontend/rust-lib/flowy-database/src/services/cell/cell_operation.rs index fb90f8f32f..7c66f69572 100644 --- a/frontend/rust-lib/flowy-database/src/services/cell/cell_operation.rs +++ b/frontend/rust-lib/flowy-database/src/services/cell/cell_operation.rs @@ -3,8 +3,8 @@ use crate::services::cell::{AtomicCellDataCache, CellProtobufBlob, TypeCellData} use crate::services::field::*; use crate::services::group::make_no_status_group; +use database_model::{CellRevision, FieldRevision}; use flowy_error::{ErrorCode, FlowyError, FlowyResult}; -use grid_model::{CellRevision, FieldRevision}; use std::fmt::Debug; diff --git a/frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs b/frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs index 259b10f48c..3b002dacce 100644 --- a/frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs +++ b/frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs @@ -1,8 +1,8 @@ use crate::entities::FieldType; use bytes::Bytes; +use database_model::CellRevision; use flowy_error::{internal_error, FlowyError, FlowyResult}; -use grid_model::CellRevision; use serde::{Deserialize, Serialize}; /// TypeCellData is a generic CellData, you can parse the type_cell_data according to the field_type. diff --git a/frontend/rust-lib/flowy-database/src/services/block_editor.rs b/frontend/rust-lib/flowy-database/src/services/database/block_editor.rs similarity index 84% rename from frontend/rust-lib/flowy-database/src/services/block_editor.rs rename to frontend/rust-lib/flowy-database/src/services/database/block_editor.rs index 63bc428b67..5b5cf46413 100644 --- a/frontend/rust-lib/flowy-database/src/services/block_editor.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/block_editor.rs @@ -1,6 +1,9 @@ -use crate::services::retry::GetRowDataRetryAction; +use crate::services::database::retry::GetRowDataRetryAction; use bytes::Bytes; -use flowy_client_sync::client_database::{GridBlockRevisionChangeset, GridBlockRevisionPad}; +use database_model::{CellRevision, DatabaseBlockRevision, RowChangeset, RowRevision}; +use flowy_client_sync::client_database::{ + DatabaseBlockRevisionChangeset, DatabaseBlockRevisionPad, +}; use flowy_client_sync::make_operations_from_revisions; use flowy_error::{FlowyError, FlowyResult}; use flowy_revision::{ @@ -8,7 +11,6 @@ use flowy_revision::{ RevisionObjectSerializer, }; use flowy_sqlite::ConnectionPool; -use grid_model::{CellRevision, DatabaseBlockRevision, RowChangeset, RowRevision}; use lib_infra::future::FutureResult; use lib_infra::retry::spawn_retry; use lib_ot::core::EmptyAttributes; @@ -21,7 +23,7 @@ pub struct DatabaseBlockRevisionEditor { #[allow(dead_code)] user_id: String, pub block_id: String, - pad: Arc>, + pad: Arc>, rev_manager: Arc>>, } @@ -32,7 +34,7 @@ impl DatabaseBlockRevisionEditor { block_id: &str, mut rev_manager: RevisionManager>, ) -> FlowyResult { - let cloud = Arc::new(GridBlockRevisionCloudService { + let cloud = Arc::new(DatabaseBlockRevisionCloudService { token: token.to_owned(), }); let block_revision_pad = rev_manager @@ -165,8 +167,8 @@ impl DatabaseBlockRevisionEditor { async fn modify(&self, f: F) -> FlowyResult<()> where F: for<'a> FnOnce( - &'a mut GridBlockRevisionPad, - ) -> FlowyResult>, + &'a mut DatabaseBlockRevisionPad, + ) -> FlowyResult>, { let mut write_guard = self.pad.write().await; let changeset = f(&mut write_guard)?; @@ -179,8 +181,8 @@ impl DatabaseBlockRevisionEditor { Ok(()) } - async fn apply_change(&self, change: GridBlockRevisionChangeset) -> FlowyResult<()> { - let GridBlockRevisionChangeset { + async fn apply_change(&self, change: DatabaseBlockRevisionChangeset) -> FlowyResult<()> { + let DatabaseBlockRevisionChangeset { operations: delta, md5, } = change; @@ -190,12 +192,12 @@ impl DatabaseBlockRevisionEditor { } } -struct GridBlockRevisionCloudService { +struct DatabaseBlockRevisionCloudService { #[allow(dead_code)] token: String, } -impl RevisionCloudService for GridBlockRevisionCloudService { +impl RevisionCloudService for DatabaseBlockRevisionCloudService { #[tracing::instrument(level = "trace", skip(self))] fn fetch_object( &self, @@ -208,10 +210,13 @@ impl RevisionCloudService for GridBlockRevisionCloudService { struct DatabaseBlockRevisionSerde(); impl RevisionObjectDeserializer for DatabaseBlockRevisionSerde { - type Output = GridBlockRevisionPad; + type Output = DatabaseBlockRevisionPad; - fn deserialize_revisions(object_id: &str, revisions: Vec) -> FlowyResult { - let pad = GridBlockRevisionPad::from_revisions(object_id, revisions)?; + fn deserialize_revisions( + _object_id: &str, + revisions: Vec, + ) -> FlowyResult { + let pad = DatabaseBlockRevisionPad::from_revisions(revisions)?; Ok(pad) } @@ -227,8 +232,8 @@ impl RevisionObjectSerializer for DatabaseBlockRevisionSerde { } } -pub struct GridBlockRevisionMergeable(); -impl RevisionMergeable for GridBlockRevisionMergeable { +pub struct DatabaseBlockRevisionMergeable(); +impl RevisionMergeable for DatabaseBlockRevisionMergeable { fn combine_revisions(&self, revisions: Vec) -> FlowyResult { DatabaseBlockRevisionSerde::combine_revisions(revisions) } diff --git a/frontend/rust-lib/flowy-database/src/services/block_manager.rs b/frontend/rust-lib/flowy-database/src/services/database/block_manager.rs similarity index 89% rename from frontend/rust-lib/flowy-database/src/services/block_manager.rs rename to frontend/rust-lib/flowy-database/src/services/database/block_manager.rs index a42c1b0f5b..e0985c3f23 100644 --- a/frontend/rust-lib/flowy-database/src/services/block_manager.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/block_manager.rs @@ -1,19 +1,19 @@ use crate::entities::{CellChangesetPB, InsertedRowPB, UpdatedRowPB}; use crate::manager::DatabaseUser; use crate::notification::{send_notification, DatabaseNotification}; -use crate::services::block_editor::{DatabaseBlockRevisionEditor, GridBlockRevisionMergeable}; +use crate::services::database::{DatabaseBlockRevisionEditor, DatabaseBlockRevisionMergeable}; use crate::services::persistence::block_index::BlockIndexCache; use crate::services::persistence::rev_sqlite::{ SQLiteDatabaseBlockRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence, }; use crate::services::row::{make_row_from_row_rev, DatabaseBlockRow, DatabaseBlockRowRevision}; use dashmap::DashMap; +use database_model::{ + DatabaseBlockMetaRevision, DatabaseBlockMetaRevisionChangeset, RowChangeset, RowRevision, +}; use flowy_error::FlowyResult; use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration}; use flowy_sqlite::ConnectionPool; -use grid_model::{ - GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowChangeset, RowRevision, -}; use std::borrow::Cow; use std::collections::HashMap; use std::sync::Arc; @@ -51,7 +51,7 @@ pub(crate) struct DatabaseBlockManager { impl DatabaseBlockManager { pub(crate) async fn new( user: &Arc, - block_meta_revs: Vec>, + block_meta_revs: Vec>, persistence: Arc, event_notifier: broadcast::Sender, ) -> FlowyResult { @@ -73,7 +73,7 @@ impl DatabaseBlockManager { } // #[tracing::instrument(level = "trace", skip(self))] - pub(crate) async fn get_block_editor( + pub(crate) async fn get_or_create_block_editor( &self, block_id: &str, ) -> FlowyResult> { @@ -99,7 +99,7 @@ impl DatabaseBlockManager { row_id: &str, ) -> FlowyResult> { let block_id = self.persistence.get_block_id(row_id)?; - self.get_block_editor(&block_id).await + self.get_or_create_block_editor(&block_id).await } #[tracing::instrument(level = "trace", skip(self, start_row_id), err)] @@ -110,7 +110,7 @@ impl DatabaseBlockManager { ) -> FlowyResult { let block_id = row_rev.block_id.clone(); self.persistence.insert(&row_rev.block_id, &row_rev.id)?; - let editor = self.get_block_editor(&row_rev.block_id).await?; + let editor = self.get_or_create_block_editor(&row_rev.block_id).await?; let mut row = InsertedRowPB::from(&row_rev); let (number_of_rows, index) = editor.create_row(row_rev, start_row_id).await?; @@ -125,10 +125,10 @@ impl DatabaseBlockManager { pub(crate) async fn insert_row( &self, rows_by_block_id: HashMap>, - ) -> FlowyResult> { + ) -> FlowyResult> { let mut changesets = vec![]; for (block_id, row_revs) in rows_by_block_id { - let editor = self.get_block_editor(&block_id).await?; + let editor = self.get_or_create_block_editor(&block_id).await?; for row_rev in row_revs { self.persistence.insert(&row_rev.block_id, &row_rev.id)?; let mut row = InsertedRowPB::from(&row_rev); @@ -138,7 +138,7 @@ impl DatabaseBlockManager { row, }); } - changesets.push(GridBlockMetaRevisionChangeset::from_row_count( + changesets.push(DatabaseBlockMetaRevisionChangeset::from_row_count( block_id.clone(), editor.number_of_rows().await, )); @@ -179,7 +179,7 @@ impl DatabaseBlockManager { pub async fn delete_row(&self, row_id: &str) -> FlowyResult>> { let row_id = row_id.to_owned(); let block_id = self.persistence.get_block_id(&row_id)?; - let editor = self.get_block_editor(&block_id).await?; + let editor = self.get_or_create_block_editor(&block_id).await?; match editor.get_row_rev(&row_id).await? { None => Ok(None), Some((_, row_rev)) => { @@ -197,17 +197,18 @@ impl DatabaseBlockManager { pub(crate) async fn delete_rows( &self, block_rows: Vec, - ) -> FlowyResult> { + ) -> FlowyResult> { let mut changesets = vec![]; for block_row in block_rows { - let editor = self.get_block_editor(&block_row.block_id).await?; + let editor = self.get_or_create_block_editor(&block_row.block_id).await?; let row_ids = block_row .row_ids .into_iter() .map(Cow::Owned) .collect::>>(); let row_count = editor.delete_rows(row_ids).await?; - let changeset = GridBlockMetaRevisionChangeset::from_row_count(block_row.block_id, row_count); + let changeset = + DatabaseBlockMetaRevisionChangeset::from_row_count(block_row.block_id, row_count); changesets.push(changeset); } @@ -285,7 +286,7 @@ impl DatabaseBlockManager { }, Some(block_ids) => { for block_id in block_ids { - let editor = self.get_block_editor(&block_id).await?; + let editor = self.get_or_create_block_editor(&block_id).await?; let row_revs = editor.get_row_revs::<&str>(None).await?; blocks.push(DatabaseBlockRowRevision { block_id, row_revs }); } @@ -304,7 +305,7 @@ impl DatabaseBlockManager { /// Initialize each block editor async fn make_block_editors( user: &Arc, - block_meta_revs: Vec>, + block_meta_revs: Vec>, ) -> FlowyResult>> { let editor_map = DashMap::new(); for block_meta_rev in block_meta_revs { @@ -343,7 +344,7 @@ pub fn make_database_block_rev_manager( let snapshot_persistence = SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool); - let rev_compress = GridBlockRevisionMergeable(); + let rev_compress = DatabaseBlockRevisionMergeable(); let rev_manager = RevisionManager::new( &user_id, block_id, diff --git a/frontend/rust-lib/flowy-database/src/services/grid_editor.rs b/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs similarity index 78% rename from frontend/rust-lib/flowy-database/src/services/grid_editor.rs rename to frontend/rust-lib/flowy-database/src/services/database/database_editor.rs index 318cb0127c..e02becaf66 100644 --- a/frontend/rust-lib/flowy-database/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs @@ -2,26 +2,28 @@ use crate::entities::CellIdParams; use crate::entities::*; use crate::manager::DatabaseUser; use crate::notification::{send_notification, DatabaseNotification}; -use crate::services::block_manager::DatabaseBlockManager; use crate::services::cell::{ apply_cell_data_changeset, get_type_cell_protobuf, stringify_cell_data, AnyTypeCache, AtomicCellDataCache, CellProtobufBlob, ToCellChangesetString, TypeCellData, }; +use crate::services::database::DatabaseBlockManager; use crate::services::field::{ default_type_option_builder_from_type, transform_type_option, type_option_builder_from_bytes, FieldBuilder, RowSingleCellData, }; +use crate::services::database::DatabaseViewEditorDelegateImpl; +use crate::services::database_view::{DatabaseViewChanged, DatabaseViewManager}; use crate::services::filter::FilterType; -use crate::services::grid_editor_trait_impl::GridViewEditorDelegateImpl; use crate::services::persistence::block_index::BlockIndexCache; use crate::services::row::{DatabaseBlockRow, DatabaseBlockRowRevision, RowRevisionBuilder}; -use crate::services::view_editor::{DatabaseViewChanged, DatabaseViewManager}; use bytes::Bytes; +use database_model::*; use flowy_client_sync::client_database::{ DatabaseRevisionChangeset, DatabaseRevisionPad, JsonDeserializer, }; use flowy_client_sync::errors::{SyncError, SyncResult}; +use flowy_client_sync::make_operations_from_revisions; use flowy_error::{FlowyError, FlowyResult}; use flowy_revision::{ RevisionCloudService, RevisionManager, RevisionMergeable, RevisionObjectDeserializer, @@ -29,30 +31,25 @@ use flowy_revision::{ }; use flowy_sqlite::ConnectionPool; use flowy_task::TaskDispatcher; -use grid_model::*; use lib_infra::future::{to_fut, FutureResult}; use lib_ot::core::EmptyAttributes; use revision_model::Revision; use std::collections::HashMap; - -use flowy_client_sync::make_operations_from_revisions; use std::sync::Arc; use tokio::sync::{broadcast, RwLock}; pub struct DatabaseRevisionEditor { pub database_id: String, - #[allow(dead_code)] - user: Arc, database_pad: Arc>, - view_manager: Arc, rev_manager: Arc>>, - block_manager: Arc, + database_view_manager: Arc, + database_block_manager: Arc, cell_data_cache: AtomicCellDataCache, } impl Drop for DatabaseRevisionEditor { fn drop(&mut self) { - tracing::trace!("Drop GridRevisionEditor"); + tracing::trace!("Drop DatabaseRevisionEditor"); } } @@ -71,18 +68,18 @@ impl DatabaseRevisionEditor { // Block manager let (block_event_tx, block_event_rx) = broadcast::channel(100); let block_meta_revs = database_pad.read().await.get_block_meta_revs(); - let block_manager = Arc::new( + let database_block_manager = Arc::new( DatabaseBlockManager::new(&user, block_meta_revs, persistence, block_event_tx).await?, ); - let delegate = Arc::new(GridViewEditorDelegateImpl { + let delegate = Arc::new(DatabaseViewEditorDelegateImpl { pad: database_pad.clone(), - block_manager: block_manager.clone(), + block_manager: database_block_manager.clone(), task_scheduler, cell_data_cache: cell_data_cache.clone(), }); // View manager - let view_manager = Arc::new( + let database_view_manager = Arc::new( DatabaseViewManager::new( database_id.to_owned(), user.clone(), @@ -95,23 +92,22 @@ impl DatabaseRevisionEditor { let editor = Arc::new(Self { database_id: database_id.to_owned(), - user, database_pad, rev_manager, - block_manager, - view_manager, + database_block_manager, + database_view_manager, cell_data_cache, }); Ok(editor) } - #[tracing::instrument(name = "close grid editor", level = "trace", skip_all)] + #[tracing::instrument(name = "close database editor", level = "trace", skip_all)] pub async fn close(&self) { - self.block_manager.close().await; + self.database_block_manager.close().await; self.rev_manager.generate_snapshot().await; self.rev_manager.close().await; - self.view_manager.close(&self.database_id).await; + self.database_view_manager.close(&self.database_id).await; } /// Save the type-option data to disk and send a `DatabaseNotification::DidUpdateField` notification @@ -120,14 +116,12 @@ impl DatabaseRevisionEditor { /// It will do nothing if the passed-in type_option_data is empty /// # Arguments /// - /// * `grid_id`: the id of the grid /// * `field_id`: the id of the field /// * `type_option_data`: the updated type-option data. The `type-option` data might be empty /// if there is no type-option config for that field. For example, the `RichTextTypeOptionPB`. /// pub async fn update_field_type_option( &self, - _grid_id: &str, field_id: &str, type_option_data: Vec, old_field_rev: Option>, @@ -139,8 +133,8 @@ impl DatabaseRevisionEditor { } let field_rev = result.unwrap(); self - .modify(|grid| { - let changeset = grid.modify_field(field_id, |field| { + .modify(|pad| { + let changeset = pad.modify_field(field_id, |field| { let deserializer = TypeOptionJsonDeserializer(field_rev.ty.into()); match deserializer.deserialize(type_option_data) { Ok(json_str) => { @@ -158,10 +152,10 @@ impl DatabaseRevisionEditor { .await?; self - .view_manager + .database_view_manager .did_update_view_field_type_option(field_id, old_field_rev) .await?; - self.notify_did_update_grid_field(field_id).await?; + self.notify_did_update_database_field(field_id).await?; Ok(()) } @@ -179,9 +173,9 @@ impl DatabaseRevisionEditor { pub async fn create_new_field_rev(&self, field_rev: FieldRevision) -> FlowyResult<()> { let field_id = field_rev.id.clone(); self - .modify(|grid| Ok(grid.create_field_rev(field_rev, None)?)) + .modify(|pad| Ok(pad.create_field_rev(field_rev, None)?)) .await?; - self.notify_did_insert_grid_field(&field_id).await?; + self.notify_did_insert_database_field(&field_id).await?; Ok(()) } @@ -197,9 +191,9 @@ impl DatabaseRevisionEditor { field_rev.insert_type_option(type_option_builder.serializer()); } self - .modify(|grid| Ok(grid.create_field_rev(field_rev.clone(), None)?)) + .modify(|pad| Ok(pad.create_field_rev(field_rev.clone(), None)?)) .await?; - self.notify_did_insert_grid_field(&field_rev.id).await?; + self.notify_did_insert_database_field(&field_rev.id).await?; Ok(field_rev) } @@ -211,8 +205,8 @@ impl DatabaseRevisionEditor { pub async fn update_field(&self, params: FieldChangesetParams) -> FlowyResult<()> { let field_id = params.field_id.clone(); self - .modify(|grid| { - let changeset = grid.modify_field(¶ms.field_id, |field| { + .modify(|pad| { + let changeset = pad.modify_field(¶ms.field_id, |field| { if let Some(name) = params.name { field.name = name; } @@ -236,7 +230,7 @@ impl DatabaseRevisionEditor { Ok(changeset) }) .await?; - self.notify_did_update_grid_field(&field_id).await?; + self.notify_did_update_database_field(&field_id).await?; Ok(()) } @@ -247,8 +241,8 @@ impl DatabaseRevisionEditor { let mut is_changed = false; let old_field_rev = self.get_field_rev(field_id).await; self - .modify(|grid| { - let changeset = grid.modify_field(field_id, |field_rev| { + .modify(|pad| { + let changeset = pad.modify_field(field_id, |field_rev| { f(field_rev).map_err(|e| SyncError::internal().context(e)) })?; is_changed = changeset.is_some(); @@ -258,30 +252,30 @@ impl DatabaseRevisionEditor { if is_changed { match self - .view_manager + .database_view_manager .did_update_view_field_type_option(field_id, old_field_rev) .await { Ok(_) => {}, Err(e) => tracing::error!("View manager update field failed: {:?}", e), } - self.notify_did_update_grid_field(field_id).await?; + self.notify_did_update_database_field(field_id).await?; } Ok(()) } pub async fn delete_field(&self, field_id: &str) -> FlowyResult<()> { self - .modify(|grid_pad| Ok(grid_pad.delete_field_rev(field_id)?)) + .modify(|pad| Ok(pad.delete_field_rev(field_id)?)) .await?; let field_order = FieldIdPB::from(field_id); let notified_changeset = DatabaseFieldChangesetPB::delete(&self.database_id, vec![field_order]); - self.notify_did_update_grid(notified_changeset).await?; + self.notify_did_update_database(notified_changeset).await?; Ok(()) } pub async fn group_by_field(&self, field_id: &str) -> FlowyResult<()> { - self.view_manager.group_by_field(field_id).await?; + self.database_view_manager.group_by_field(field_id).await?; Ok(()) } @@ -321,8 +315,8 @@ impl DatabaseRevisionEditor { }; self - .modify(|grid| { - Ok(grid.switch_to_field( + .modify(|pad| { + Ok(pad.switch_to_field( field_id, new_field_type.clone(), make_default_type_option, @@ -331,7 +325,7 @@ impl DatabaseRevisionEditor { }) .await?; - self.notify_did_update_grid_field(field_id).await?; + self.notify_did_update_database_field(field_id).await?; Ok(()) } @@ -339,11 +333,11 @@ impl DatabaseRevisionEditor { pub async fn duplicate_field(&self, field_id: &str) -> FlowyResult<()> { let duplicated_field_id = gen_field_id(); self - .modify(|grid| Ok(grid.duplicate_field_rev(field_id, &duplicated_field_id)?)) + .modify(|pad| Ok(pad.duplicate_field_rev(field_id, &duplicated_field_id)?)) .await?; self - .notify_did_insert_grid_field(&duplicated_field_id) + .notify_did_insert_database_field(&duplicated_field_id) .await?; Ok(()) } @@ -385,16 +379,19 @@ impl DatabaseRevisionEditor { Ok(field_revs) } - pub async fn create_block(&self, block_meta_rev: GridBlockMetaRevision) -> FlowyResult<()> { + pub async fn create_block(&self, block_meta_rev: DatabaseBlockMetaRevision) -> FlowyResult<()> { self - .modify(|grid_pad| Ok(grid_pad.create_block_meta_rev(block_meta_rev)?)) + .modify(|pad| Ok(pad.create_block_meta_rev(block_meta_rev)?)) .await?; Ok(()) } - pub async fn update_block(&self, changeset: GridBlockMetaRevisionChangeset) -> FlowyResult<()> { + pub async fn update_block( + &self, + changeset: DatabaseBlockMetaRevisionChangeset, + ) -> FlowyResult<()> { self - .modify(|grid_pad| Ok(grid_pad.update_block_rev(changeset)?)) + .modify(|pad| Ok(pad.update_block_rev(changeset)?)) .await?; Ok(()) } @@ -403,7 +400,7 @@ impl DatabaseRevisionEditor { let mut row_rev = self.create_row_rev().await?; self - .view_manager + .database_view_manager .will_create_row(&mut row_rev, ¶ms) .await; @@ -411,13 +408,16 @@ impl DatabaseRevisionEditor { .create_row_pb(row_rev, params.start_row_id.clone()) .await?; - self.view_manager.did_create_row(&row_pb, ¶ms).await; + self + .database_view_manager + .did_create_row(&row_pb, ¶ms) + .await; Ok(row_pb) } #[tracing::instrument(level = "trace", skip_all, err)] pub async fn move_group(&self, params: MoveGroupParams) -> FlowyResult<()> { - self.view_manager.move_group(params).await?; + self.database_view_manager.move_group(params).await?; Ok(()) } @@ -432,7 +432,10 @@ impl DatabaseRevisionEditor { .or_insert_with(Vec::new) .push(row_rev); } - let changesets = self.block_manager.insert_row(rows_by_block_id).await?; + let changesets = self + .database_block_manager + .insert_row(rows_by_block_id) + .await?; for changeset in changesets { self.update_block(changeset).await?; } @@ -442,14 +445,20 @@ impl DatabaseRevisionEditor { pub async fn update_row(&self, changeset: RowChangeset) -> FlowyResult<()> { let row_id = changeset.row_id.clone(); let old_row = self.get_row_rev(&row_id).await?; - self.block_manager.update_row(changeset).await?; - self.view_manager.did_update_row(old_row, &row_id).await; + self.database_block_manager.update_row(changeset).await?; + self + .database_view_manager + .did_update_row(old_row, &row_id) + .await; Ok(()) } /// Returns all the rows in this block. pub async fn get_row_pbs(&self, view_id: &str, block_id: &str) -> FlowyResult> { - let rows = self.view_manager.get_row_revs(view_id, block_id).await?; + let rows = self + .database_view_manager + .get_row_revs(view_id, block_id) + .await?; let rows = rows .into_iter() .map(|row_rev| RowPB::from(&row_rev)) @@ -459,10 +468,10 @@ impl DatabaseRevisionEditor { pub async fn get_all_row_revs(&self, view_id: &str) -> FlowyResult>> { let mut all_rows = vec![]; - let blocks = self.block_manager.get_blocks(None).await?; + let blocks = self.database_block_manager.get_blocks(None).await?; for block in blocks { let rows = self - .view_manager + .database_view_manager .get_row_revs(view_id, &block.block_id) .await?; all_rows.extend(rows); @@ -471,17 +480,17 @@ impl DatabaseRevisionEditor { } pub async fn get_row_rev(&self, row_id: &str) -> FlowyResult>> { - match self.block_manager.get_row_rev(row_id).await? { + match self.database_block_manager.get_row_rev(row_id).await? { None => Ok(None), Some((_, row_rev)) => Ok(Some(row_rev)), } } pub async fn delete_row(&self, row_id: &str) -> FlowyResult<()> { - let row_rev = self.block_manager.delete_row(row_id).await?; + let row_rev = self.database_block_manager.delete_row(row_id).await?; tracing::trace!("Did delete row:{:?}", row_rev); if let Some(row_rev) = row_rev { - self.view_manager.did_delete_row(row_rev).await; + self.database_view_manager.did_delete_row(row_rev).await; } Ok(()) } @@ -490,7 +499,10 @@ impl DatabaseRevisionEditor { &self, view_id: &str, ) -> FlowyResult> { - self.view_manager.subscribe_view_changed(view_id).await + self + .database_view_manager + .subscribe_view_changed(view_id) + .await } pub async fn duplicate_row(&self, _row_id: &str) -> FlowyResult<()> { @@ -545,7 +557,7 @@ impl DatabaseRevisionEditor { ) -> Option<(FieldType, CellProtobufBlob)> { let field_rev = self.get_field_rev(¶ms.field_id).await?; let (_, row_rev) = self - .block_manager + .database_block_manager .get_row_rev(¶ms.row_id) .await .ok()??; @@ -562,7 +574,7 @@ impl DatabaseRevisionEditor { row_id: &str, field_id: &str, ) -> FlowyResult> { - match self.block_manager.get_row_rev(row_id).await? { + match self.database_block_manager.get_row_rev(row_id).await? { None => Ok(None), Some((_, row_rev)) => { let cell_rev = row_rev.cells.get(field_id).cloned(); @@ -577,7 +589,7 @@ impl DatabaseRevisionEditor { view_id: &str, field_id: &str, ) -> FlowyResult> { - let view_editor = self.view_manager.get_view_editor(view_id).await?; + let view_editor = self.database_view_manager.get_view_editor(view_id).await?; view_editor.get_cells_for_field(field_id).await } @@ -614,8 +626,14 @@ impl DatabaseRevisionEditor { field_id: field_id.to_owned(), type_cell_data, }; - self.block_manager.update_cell(cell_changeset).await?; - self.view_manager.did_update_row(old_row_rev, row_id).await; + self + .database_block_manager + .update_cell(cell_changeset) + .await?; + self + .database_view_manager + .did_update_row(old_row_rev, row_id) + .await; Ok(()) }, } @@ -633,7 +651,7 @@ impl DatabaseRevisionEditor { .await } - pub async fn get_block_meta_revs(&self) -> FlowyResult>> { + pub async fn get_block_meta_revs(&self) -> FlowyResult>> { let block_meta_revs = self.database_pad.read().await.get_block_meta_revs(); Ok(block_meta_revs) } @@ -653,12 +671,15 @@ impl DatabaseRevisionEditor { .collect::>(), Some(block_ids) => block_ids, }; - let blocks = self.block_manager.get_blocks(Some(block_ids)).await?; + let blocks = self + .database_block_manager + .get_blocks(Some(block_ids)) + .await?; Ok(blocks) } pub async fn delete_rows(&self, block_rows: Vec) -> FlowyResult<()> { - let changesets = self.block_manager.delete_rows(block_rows).await?; + let changesets = self.database_block_manager.delete_rows(block_rows).await?; for changeset in changesets { self.update_block(changeset).await?; } @@ -687,13 +708,13 @@ impl DatabaseRevisionEditor { } pub async fn get_setting(&self) -> FlowyResult { - self.view_manager.get_setting().await + self.database_view_manager.get_setting().await } pub async fn get_all_filters(&self) -> FlowyResult> { Ok( self - .view_manager + .database_view_manager .get_all_filters() .await? .into_iter() @@ -703,23 +724,26 @@ impl DatabaseRevisionEditor { } pub async fn get_filters(&self, filter_id: FilterType) -> FlowyResult>> { - self.view_manager.get_filters(&filter_id).await + self.database_view_manager.get_filters(&filter_id).await } pub async fn create_or_update_filter(&self, params: AlterFilterParams) -> FlowyResult<()> { - self.view_manager.create_or_update_filter(params).await?; + self + .database_view_manager + .create_or_update_filter(params) + .await?; Ok(()) } pub async fn delete_filter(&self, params: DeleteFilterParams) -> FlowyResult<()> { - self.view_manager.delete_filter(params).await?; + self.database_view_manager.delete_filter(params).await?; Ok(()) } pub async fn get_all_sorts(&self, view_id: &str) -> FlowyResult> { Ok( self - .view_manager + .database_view_manager .get_all_sorts(view_id) .await? .into_iter() @@ -729,25 +753,31 @@ impl DatabaseRevisionEditor { } pub async fn delete_all_sorts(&self, view_id: &str) -> FlowyResult<()> { - self.view_manager.delete_all_sorts(view_id).await + self.database_view_manager.delete_all_sorts(view_id).await } pub async fn delete_sort(&self, params: DeleteSortParams) -> FlowyResult<()> { - self.view_manager.delete_sort(params).await?; + self.database_view_manager.delete_sort(params).await?; Ok(()) } pub async fn create_or_update_sort(&self, params: AlterSortParams) -> FlowyResult { - let sort_rev = self.view_manager.create_or_update_sort(params).await?; + let sort_rev = self + .database_view_manager + .create_or_update_sort(params) + .await?; Ok(sort_rev) } pub async fn insert_group(&self, params: InsertGroupParams) -> FlowyResult<()> { - self.view_manager.insert_or_update_group(params).await + self + .database_view_manager + .insert_or_update_group(params) + .await } pub async fn delete_group(&self, params: DeleteGroupParams) -> FlowyResult<()> { - self.view_manager.delete_group(params).await + self.database_view_manager.delete_group(params).await } pub async fn move_row(&self, params: MoveRowParams) -> FlowyResult<()> { @@ -757,17 +787,21 @@ impl DatabaseRevisionEditor { to_row_id, } = params; - match self.block_manager.get_row_rev(&from_row_id).await? { + match self + .database_block_manager + .get_row_rev(&from_row_id) + .await? + { None => tracing::warn!("Move row failed, can not find the row:{}", from_row_id), Some((_, row_rev)) => { match ( - self.block_manager.index_of_row(&from_row_id).await, - self.block_manager.index_of_row(&to_row_id).await, + self.database_block_manager.index_of_row(&from_row_id).await, + self.database_block_manager.index_of_row(&to_row_id).await, ) { (Some(from_index), Some(to_index)) => { tracing::trace!("Move row from {} to {}", from_index, to_index); self - .block_manager + .database_block_manager .move_row(row_rev.clone(), from_index, to_index) .await?; }, @@ -787,12 +821,16 @@ impl DatabaseRevisionEditor { to_row_id, } = params; - match self.block_manager.get_row_rev(&from_row_id).await? { + match self + .database_block_manager + .get_row_rev(&from_row_id) + .await? + { None => tracing::warn!("Move row failed, can not find the row:{}", from_row_id), Some((_, row_rev)) => { - let block_manager = self.block_manager.clone(); + let block_manager = self.database_block_manager.clone(); self - .view_manager + .database_view_manager .move_group_row(row_rev, to_group_id, to_row_id.clone(), |row_changeset| { to_fut(async move { tracing::trace!("Row data changed: {:?}", row_changeset); @@ -830,42 +868,40 @@ impl DatabaseRevisionEditor { } = params; self - .modify(|grid_pad| { - Ok(grid_pad.move_field(&field_id, from_index as usize, to_index as usize)?) - }) + .modify(|pad| Ok(pad.move_field(&field_id, from_index as usize, to_index as usize)?)) .await?; if let Some((index, field_rev)) = self.database_pad.read().await.get_field_rev(&field_id) { let delete_field_order = FieldIdPB::from(field_id); let insert_field = IndexFieldPB::from_field_rev(field_rev, index); let notified_changeset = DatabaseFieldChangesetPB { - database_id: self.database_id.clone(), + view_id: self.database_id.clone(), inserted_fields: vec![insert_field], deleted_fields: vec![delete_field_order], updated_fields: vec![], }; - self.notify_did_update_grid(notified_changeset).await?; + self.notify_did_update_database(notified_changeset).await?; } Ok(()) } - pub async fn duplicate_grid(&self) -> FlowyResult { - let grid_pad = self.database_pad.read().await; - let grid_view_revision_data = self.view_manager.duplicate_database_view().await?; - let original_blocks = grid_pad.get_block_meta_revs(); - let (duplicated_fields, duplicated_blocks) = grid_pad.duplicate_grid_block_meta().await; + pub async fn duplicate_database(&self) -> FlowyResult { + let database_pad = self.database_pad.read().await; + let database_view_data = self.database_view_manager.duplicate_database_view().await?; + let original_blocks = database_pad.get_block_meta_revs(); + let (duplicated_fields, duplicated_blocks) = database_pad.duplicate_database_block_meta().await; let mut blocks_meta_data = vec![]; if original_blocks.len() == duplicated_blocks.len() { for (index, original_block_meta) in original_blocks.iter().enumerate() { - let grid_block_meta_editor = self - .block_manager - .get_block_editor(&original_block_meta.block_id) + let database_block_meta_editor = self + .database_block_manager + .get_or_create_block_editor(&original_block_meta.block_id) .await?; let duplicated_block_id = &duplicated_blocks[index].block_id; tracing::trace!("Duplicate block:{} meta data", duplicated_block_id); - let duplicated_block_meta_data = grid_block_meta_editor + let duplicated_block_meta_data = database_block_meta_editor .duplicate_block(duplicated_block_id) .await; blocks_meta_data.push(duplicated_block_meta_data); @@ -873,19 +909,19 @@ impl DatabaseRevisionEditor { } else { debug_assert_eq!(original_blocks.len(), duplicated_blocks.len()); } - drop(grid_pad); + drop(database_pad); Ok(BuildDatabaseContext { field_revs: duplicated_fields.into_iter().map(Arc::new).collect(), block_metas: duplicated_blocks, blocks: blocks_meta_data, - grid_view_revision_data, + database_view_data, }) } #[tracing::instrument(level = "trace", skip_all, err)] pub async fn load_groups(&self) -> FlowyResult { - self.view_manager.load_groups().await + self.database_view_manager.load_groups().await } async fn create_row_rev(&self) -> FlowyResult { @@ -906,10 +942,13 @@ impl DatabaseRevisionEditor { let block_id = row_rev.block_id.clone(); // insert the row - let row_count = self.block_manager.create_row(row_rev, start_row_id).await?; + let row_count = self + .database_block_manager + .create_row(row_rev, start_row_id) + .await?; // update block row count - let changeset = GridBlockMetaRevisionChangeset::from_row_count(block_id, row_count); + let changeset = DatabaseBlockMetaRevisionChangeset::from_row_count(block_id, row_count); self.update_block(changeset).await?; Ok(row_pb) } @@ -938,24 +977,25 @@ impl DatabaseRevisionEditor { async fn block_id(&self) -> FlowyResult { match self.database_pad.read().await.get_block_meta_revs().last() { - None => Err(FlowyError::internal().context("There is no grid block in this grid")), - Some(grid_block) => Ok(grid_block.block_id.clone()), + None => Err(FlowyError::internal().context("There is no block in this database")), + Some(database_block) => Ok(database_block.block_id.clone()), } } #[tracing::instrument(level = "trace", skip_all, err)] - async fn notify_did_insert_grid_field(&self, field_id: &str) -> FlowyResult<()> { + async fn notify_did_insert_database_field(&self, field_id: &str) -> FlowyResult<()> { if let Some((index, field_rev)) = self.database_pad.read().await.get_field_rev(field_id) { let index_field = IndexFieldPB::from_field_rev(field_rev, index); + //TODO(nathan): broadcast the changeset to views that reference to this database let notified_changeset = DatabaseFieldChangesetPB::insert(&self.database_id, vec![index_field]); - self.notify_did_update_grid(notified_changeset).await?; + self.notify_did_update_database(notified_changeset).await?; } Ok(()) } #[tracing::instrument(level = "trace", skip_all, err)] - async fn notify_did_update_grid_field(&self, field_id: &str) -> FlowyResult<()> { + async fn notify_did_update_database_field(&self, field_id: &str) -> FlowyResult<()> { if let Some((_, field_rev)) = self .database_pad .read() @@ -966,7 +1006,7 @@ impl DatabaseRevisionEditor { let updated_field = FieldPB::from(field_rev); let notified_changeset = DatabaseFieldChangesetPB::update(&self.database_id, vec![updated_field.clone()]); - self.notify_did_update_grid(notified_changeset).await?; + self.notify_did_update_database(notified_changeset).await?; send_notification(field_id, DatabaseNotification::DidUpdateField) .payload(updated_field) @@ -976,7 +1016,10 @@ impl DatabaseRevisionEditor { Ok(()) } - async fn notify_did_update_grid(&self, changeset: DatabaseFieldChangesetPB) -> FlowyResult<()> { + async fn notify_did_update_database( + &self, + changeset: DatabaseFieldChangesetPB, + ) -> FlowyResult<()> { send_notification(&self.database_id, DatabaseNotification::DidUpdateFields) .payload(changeset) .send(); @@ -990,13 +1033,13 @@ impl DatabaseRevisionEditor { self.rev_manager.clone() } - pub fn grid_pad(&self) -> Arc> { + pub fn database_pad(&self) -> Arc> { self.database_pad.clone() } } -pub struct GridRevisionSerde(); -impl RevisionObjectDeserializer for GridRevisionSerde { +pub struct DatabaseRevisionSerde(); +impl RevisionObjectDeserializer for DatabaseRevisionSerde { type Output = DatabaseRevisionPad; fn deserialize_revisions( @@ -1011,25 +1054,25 @@ impl RevisionObjectDeserializer for GridRevisionSerde { None } } -impl RevisionObjectSerializer for GridRevisionSerde { +impl RevisionObjectSerializer for DatabaseRevisionSerde { fn combine_revisions(revisions: Vec) -> FlowyResult { let operations = make_operations_from_revisions::(revisions)?; Ok(operations.json_bytes()) } } -pub struct GridRevisionCloudService { +pub struct DatabaseRevisionCloudService { #[allow(dead_code)] token: String, } -impl GridRevisionCloudService { +impl DatabaseRevisionCloudService { pub fn new(token: String) -> Self { Self { token } } } -impl RevisionCloudService for GridRevisionCloudService { +impl RevisionCloudService for DatabaseRevisionCloudService { #[tracing::instrument(level = "trace", skip(self))] fn fetch_object( &self, @@ -1040,11 +1083,11 @@ impl RevisionCloudService for GridRevisionCloudService { } } -pub struct GridRevisionMergeable(); +pub struct DatabaseRevisionMergeable(); -impl RevisionMergeable for GridRevisionMergeable { +impl RevisionMergeable for DatabaseRevisionMergeable { fn combine_revisions(&self, revisions: Vec) -> FlowyResult { - GridRevisionSerde::combine_revisions(revisions) + DatabaseRevisionSerde::combine_revisions(revisions) } } diff --git a/frontend/rust-lib/flowy-database/src/services/database/mod.rs b/frontend/rust-lib/flowy-database/src/services/database/mod.rs new file mode 100644 index 0000000000..00e2011aaf --- /dev/null +++ b/frontend/rust-lib/flowy-database/src/services/database/mod.rs @@ -0,0 +1,10 @@ +mod block_editor; +mod block_manager; +mod database_editor; +mod retry; +mod trait_impl; + +pub use block_editor::*; +pub use block_manager::*; +pub use database_editor::*; +pub use trait_impl::*; diff --git a/frontend/rust-lib/flowy-database/src/services/retry.rs b/frontend/rust-lib/flowy-database/src/services/database/retry.rs similarity index 82% rename from frontend/rust-lib/flowy-database/src/services/retry.rs rename to frontend/rust-lib/flowy-database/src/services/database/retry.rs index 9c27002eaf..521b23e188 100644 --- a/frontend/rust-lib/flowy-database/src/services/retry.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/retry.rs @@ -1,6 +1,6 @@ -use flowy_client_sync::client_database::GridBlockRevisionPad; +use database_model::RowRevision; +use flowy_client_sync::client_database::DatabaseBlockRevisionPad; use flowy_error::FlowyError; -use grid_model::RowRevision; use lib_infra::retry::Action; use std::future::Future; use std::pin::Pin; @@ -9,7 +9,7 @@ use tokio::sync::RwLock; pub struct GetRowDataRetryAction { pub row_id: String, - pub pad: Arc>, + pub pad: Arc>, } impl Action for GetRowDataRetryAction { diff --git a/frontend/rust-lib/flowy-database/src/services/grid_editor_trait_impl.rs b/frontend/rust-lib/flowy-database/src/services/database/trait_impl.rs similarity index 87% rename from frontend/rust-lib/flowy-database/src/services/grid_editor_trait_impl.rs rename to frontend/rust-lib/flowy-database/src/services/database/trait_impl.rs index f5a7151148..4c2d0d68d0 100644 --- a/frontend/rust-lib/flowy-database/src/services/grid_editor_trait_impl.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/trait_impl.rs @@ -1,25 +1,26 @@ use crate::entities::FieldType; -use crate::services::block_manager::DatabaseBlockManager; use crate::services::cell::AtomicCellDataCache; +use crate::services::database::DatabaseBlockManager; +use crate::services::database_view::DatabaseViewEditorDelegate; use crate::services::field::{TypeOptionCellDataHandler, TypeOptionCellExt}; use crate::services::row::DatabaseBlockRowRevision; -use crate::services::view_editor::DatabaseViewEditorDelegate; +use database_model::{FieldRevision, RowRevision}; use flowy_client_sync::client_database::DatabaseRevisionPad; use flowy_task::TaskDispatcher; -use grid_model::{FieldRevision, RowRevision}; use lib_infra::future::{to_fut, Fut}; +use std::any::type_name; use std::sync::Arc; use tokio::sync::RwLock; -pub(crate) struct GridViewEditorDelegateImpl { +pub struct DatabaseViewEditorDelegateImpl { pub(crate) pad: Arc>, pub(crate) block_manager: Arc, pub(crate) task_scheduler: Arc>, pub(crate) cell_data_cache: AtomicCellDataCache, } -impl DatabaseViewEditorDelegate for GridViewEditorDelegateImpl { +impl DatabaseViewEditorDelegate for DatabaseViewEditorDelegateImpl { fn get_field_revs(&self, field_ids: Option>) -> Fut>> { let pad = self.pad.clone(); to_fut(async move { @@ -27,7 +28,8 @@ impl DatabaseViewEditorDelegate for GridViewEditorDelegateImpl { Ok(field_revs) => field_revs, Err(e) => { tracing::error!( - "[GridViewRevisionDelegate] get field revisions failed: {}", + "[{}] get field revisions failed: {}", + type_name::(), e ); vec![] diff --git a/frontend/rust-lib/flowy-database/src/services/view_editor/editor.rs b/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs similarity index 95% rename from frontend/rust-lib/flowy-database/src/services/view_editor/editor.rs rename to frontend/rust-lib/flowy-database/src/services/database_view/editor.rs index 485c110747..02c388ed9a 100644 --- a/frontend/rust-lib/flowy-database/src/services/view_editor/editor.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs @@ -1,7 +1,10 @@ use crate::entities::*; use crate::notification::{send_notification, DatabaseNotification}; -use crate::services::block_manager::DatabaseBlockEvent; use crate::services::cell::{AtomicCellDataCache, TypeCellData}; +use crate::services::database::DatabaseBlockEvent; +use crate::services::database_view::notifier::DatabaseViewChangedNotifier; +use crate::services::database_view::trait_impl::*; +use crate::services::database_view::DatabaseViewChangedReceiverRunner; use crate::services::field::{RowSingleCellData, TypeOptionCellDataHandler}; use crate::services::filter::{ FilterChangeset, FilterController, FilterTaskHandler, FilterType, UpdatedFilterType, @@ -14,20 +17,17 @@ use crate::services::row::DatabaseBlockRowRevision; use crate::services::sort::{ DeletedSortType, SortChangeset, SortController, SortTaskHandler, SortType, }; -use crate::services::view_editor::changed_notifier::GridViewChangedNotifier; -use crate::services::view_editor::trait_impl::*; -use crate::services::view_editor::GridViewChangedReceiverRunner; +use database_model::{ + gen_database_filter_id, gen_database_sort_id, FieldRevision, FieldTypeRevision, FilterRevision, + LayoutRevision, RowChangeset, RowRevision, SortRevision, +}; use flowy_client_sync::client_database::{ - make_grid_view_operations, GridViewRevisionChangeset, GridViewRevisionPad, + make_grid_view_operations, DatabaseViewRevisionPad, GridViewRevisionChangeset, }; use flowy_error::FlowyResult; use flowy_revision::RevisionManager; use flowy_sqlite::ConnectionPool; use flowy_task::TaskDispatcher; -use grid_model::{ - gen_grid_filter_id, gen_grid_sort_id, FieldRevision, FieldTypeRevision, FilterRevision, - LayoutRevision, RowChangeset, RowRevision, SortRevision, -}; use lib_infra::async_trait::async_trait; use lib_infra::future::Fut; use lib_infra::ref_map::RefCountValue; @@ -76,13 +76,13 @@ pub trait DatabaseViewEditorDelegate: Send + Sync + 'static { pub struct DatabaseViewRevisionEditor { user_id: String, view_id: String, - pad: Arc>, + pad: Arc>, rev_manager: Arc>>, delegate: Arc, group_controller: Arc>>, filter_controller: Arc, sort_controller: Arc>, - pub notifier: GridViewChangedNotifier, + pub notifier: DatabaseViewChangedNotifier, } impl DatabaseViewRevisionEditor { @@ -96,7 +96,7 @@ impl DatabaseViewRevisionEditor { mut rev_manager: RevisionManager>, ) -> FlowyResult { let (notifier, _) = broadcast::channel(100); - tokio::spawn(GridViewChangedReceiverRunner(Some(notifier.subscribe())).run()); + tokio::spawn(DatabaseViewChangedReceiverRunner(Some(notifier.subscribe())).run()); let cloud = Arc::new(GridViewRevisionCloudService { token: token.to_owned(), }); @@ -109,8 +109,11 @@ impl DatabaseViewRevisionEditor { Err(err) => { // It shouldn't be here, because the snapshot should come to recue. tracing::error!("Deserialize grid view revisions failed: {}", err); - let view = - GridViewRevisionPad::new(view_id.to_owned(), view_id.to_owned(), LayoutRevision::Grid); + let view = DatabaseViewRevisionPad::new( + view_id.to_owned(), + view_id.to_owned(), + LayoutRevision::Grid, + ); let bytes = make_grid_view_operations(&view).json_bytes(); let reset_revision = Revision::initial_revision(&view_id, bytes); let _ = rev_manager.reset_object(vec![reset_revision]).await; @@ -460,7 +463,7 @@ impl DatabaseViewRevisionEditor { let sort_type = SortType::from(¶ms); let is_exist = params.sort_id.is_some(); let sort_id = match params.sort_id { - None => gen_grid_sort_id(), + None => gen_database_sort_id(), Some(sort_id) => sort_id, }; @@ -559,7 +562,7 @@ impl DatabaseViewRevisionEditor { let filter_type = FilterType::from(¶ms); let is_exist = params.filter_id.is_some(); let filter_id = match params.filter_id { - None => gen_grid_filter_id(), + None => gen_database_filter_id(), Some(filter_id) => filter_id, }; let filter_rev = FilterRevision { @@ -756,8 +759,9 @@ impl DatabaseViewRevisionEditor { async fn modify(&self, f: F) -> FlowyResult<()> where - F: - for<'a> FnOnce(&'a mut GridViewRevisionPad) -> FlowyResult>, + F: for<'a> FnOnce( + &'a mut DatabaseViewRevisionPad, + ) -> FlowyResult>, { let mut write_guard = self.pad.write().await; match f(&mut write_guard)? { @@ -839,7 +843,7 @@ impl RefCountValue for DatabaseViewRevisionEditor { async fn new_group_controller( user_id: String, view_id: String, - view_rev_pad: Arc>, + view_rev_pad: Arc>, rev_manager: Arc>>, delegate: Arc, ) -> FlowyResult> { @@ -879,7 +883,7 @@ async fn new_group_controller( async fn new_group_controller_with_field_rev( user_id: String, view_id: String, - view_rev_pad: Arc>, + view_rev_pad: Arc>, rev_manager: Arc>>, field_rev: Arc, row_revs: Vec>, @@ -903,9 +907,9 @@ async fn new_group_controller_with_field_rev( async fn make_filter_controller( view_id: &str, delegate: Arc, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, cell_data_cache: AtomicCellDataCache, - pad: Arc>, + pad: Arc>, ) -> Arc { let field_revs = delegate.get_field_revs(None).await; let filter_revs = pad.read().await.get_all_filters(&field_revs); @@ -939,9 +943,9 @@ async fn make_filter_controller( async fn make_sort_controller( view_id: &str, delegate: Arc, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, filter_controller: Arc, - pad: Arc>, + pad: Arc>, cell_data_cache: AtomicCellDataCache, ) -> Arc> { let handler_id = gen_handler_id(); diff --git a/frontend/rust-lib/flowy-database/src/services/view_editor/editor_manager.rs b/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs similarity index 95% rename from frontend/rust-lib/flowy-database/src/services/view_editor/editor_manager.rs rename to frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs index 3eab70006a..44901f901b 100644 --- a/frontend/rust-lib/flowy-database/src/services/view_editor/editor_manager.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs @@ -3,19 +3,19 @@ use crate::entities::{ DeleteGroupParams, DeleteSortParams, InsertGroupParams, MoveGroupParams, RepeatedGroupPB, RowPB, }; use crate::manager::DatabaseUser; -use crate::services::block_manager::DatabaseBlockEvent; use crate::services::cell::AtomicCellDataCache; +use crate::services::database::DatabaseBlockEvent; +use crate::services::database_view::notifier::*; +use crate::services::database_view::trait_impl::GridViewRevisionMergeable; +use crate::services::database_view::{DatabaseViewEditorDelegate, DatabaseViewRevisionEditor}; use crate::services::filter::FilterType; use crate::services::persistence::rev_sqlite::{ SQLiteDatabaseRevisionSnapshotPersistence, SQLiteGridViewRevisionPersistence, }; -use crate::services::view_editor::changed_notifier::*; -use crate::services::view_editor::trait_impl::GridViewRevisionMergeable; -use crate::services::view_editor::{DatabaseViewEditorDelegate, DatabaseViewRevisionEditor}; +use database_model::{FieldRevision, FilterRevision, RowChangeset, RowRevision, SortRevision}; use flowy_error::FlowyResult; use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration}; use flowy_sqlite::ConnectionPool; -use grid_model::{FieldRevision, FilterRevision, RowChangeset, RowRevision, SortRevision}; use lib_infra::future::Fut; use lib_infra::ref_map::RefCountHashMap; use std::borrow::Cow; @@ -23,7 +23,7 @@ use std::sync::Arc; use tokio::sync::{broadcast, RwLock}; pub struct DatabaseViewManager { - view_id: String, + database_id: String, user: Arc, delegate: Arc, view_editors: Arc>>>, @@ -32,7 +32,7 @@ pub struct DatabaseViewManager { impl DatabaseViewManager { pub async fn new( - view_id: String, + database_id: String, user: Arc, delegate: Arc, cell_data_cache: AtomicCellDataCache, @@ -41,7 +41,7 @@ impl DatabaseViewManager { let view_editors = Arc::new(RwLock::new(RefCountHashMap::default())); listen_on_database_block_event(block_event_rx, view_editors.clone()); Ok(Self { - view_id, + database_id, user, delegate, cell_data_cache, @@ -260,7 +260,7 @@ impl DatabaseViewManager { } async fn get_default_view_editor(&self) -> FlowyResult> { - self.get_view_editor(&self.view_id).await + self.get_view_editor(&self.database_id).await } async fn make_view_editor(&self, view_id: &str) -> FlowyResult { diff --git a/frontend/rust-lib/flowy-database/src/services/view_editor/mod.rs b/frontend/rust-lib/flowy-database/src/services/database_view/mod.rs similarity index 65% rename from frontend/rust-lib/flowy-database/src/services/view_editor/mod.rs rename to frontend/rust-lib/flowy-database/src/services/database_view/mod.rs index 73e20cc18c..a75a142258 100644 --- a/frontend/rust-lib/flowy-database/src/services/view_editor/mod.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/mod.rs @@ -1,8 +1,8 @@ -mod changed_notifier; mod editor; mod editor_manager; +mod notifier; mod trait_impl; -pub use changed_notifier::*; pub use editor::*; pub use editor_manager::*; +pub use notifier::*; diff --git a/frontend/rust-lib/flowy-database/src/services/view_editor/changed_notifier.rs b/frontend/rust-lib/flowy-database/src/services/database_view/notifier.rs similarity index 93% rename from frontend/rust-lib/flowy-database/src/services/view_editor/changed_notifier.rs rename to frontend/rust-lib/flowy-database/src/services/database_view/notifier.rs index 52605ec2dc..b2586bb919 100644 --- a/frontend/rust-lib/flowy-database/src/services/view_editor/changed_notifier.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/notifier.rs @@ -13,12 +13,13 @@ pub enum DatabaseViewChanged { ReorderSingleRowNotification(ReorderSingleRowResult), } -pub type GridViewChangedNotifier = broadcast::Sender; +pub type DatabaseViewChangedNotifier = broadcast::Sender; -pub(crate) struct GridViewChangedReceiverRunner( +pub(crate) struct DatabaseViewChangedReceiverRunner( pub(crate) Option>, ); -impl GridViewChangedReceiverRunner { + +impl DatabaseViewChangedReceiverRunner { pub(crate) async fn run(mut self) { let mut receiver = self.0.take().expect("Only take once"); let stream = stream! { diff --git a/frontend/rust-lib/flowy-database/src/services/view_editor/trait_impl.rs b/frontend/rust-lib/flowy-database/src/services/database_view/trait_impl.rs similarity index 90% rename from frontend/rust-lib/flowy-database/src/services/view_editor/trait_impl.rs rename to frontend/rust-lib/flowy-database/src/services/database_view/trait_impl.rs index ba734dc4aa..5608626d68 100644 --- a/frontend/rust-lib/flowy-database/src/services/view_editor/trait_impl.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/trait_impl.rs @@ -1,12 +1,16 @@ use crate::entities::{DatabaseViewSettingPB, LayoutTypePB, ViewLayoutPB}; +use crate::services::database_view::{get_cells_for_field, DatabaseViewEditorDelegate}; use crate::services::field::RowSingleCellData; use crate::services::filter::{FilterController, FilterDelegate, FilterType}; use crate::services::group::{GroupConfigurationReader, GroupConfigurationWriter}; use crate::services::row::DatabaseBlockRowRevision; use crate::services::sort::{SortDelegate, SortType}; -use crate::services::view_editor::{get_cells_for_field, DatabaseViewEditorDelegate}; use bytes::Bytes; -use flowy_client_sync::client_database::{GridViewRevisionChangeset, GridViewRevisionPad}; +use database_model::{ + FieldRevision, FieldTypeRevision, FilterRevision, GroupConfigurationRevision, RowRevision, + SortRevision, +}; +use flowy_client_sync::client_database::{DatabaseViewRevisionPad, GridViewRevisionChangeset}; use flowy_client_sync::make_operations_from_revisions; use flowy_error::{FlowyError, FlowyResult}; use flowy_revision::{ @@ -14,10 +18,6 @@ use flowy_revision::{ RevisionObjectSerializer, }; use flowy_sqlite::ConnectionPool; -use grid_model::{ - FieldRevision, FieldTypeRevision, FilterRevision, GroupConfigurationRevision, RowRevision, - SortRevision, -}; use lib_infra::future::{to_fut, Fut, FutureResult}; use lib_ot::core::EmptyAttributes; use revision_model::Revision; @@ -41,10 +41,13 @@ impl RevisionCloudService for GridViewRevisionCloudService { pub(crate) struct GridViewRevisionSerde(); impl RevisionObjectDeserializer for GridViewRevisionSerde { - type Output = GridViewRevisionPad; + type Output = DatabaseViewRevisionPad; - fn deserialize_revisions(object_id: &str, revisions: Vec) -> FlowyResult { - let pad = GridViewRevisionPad::from_revisions(object_id, revisions)?; + fn deserialize_revisions( + _object_id: &str, + revisions: Vec, + ) -> FlowyResult { + let pad = DatabaseViewRevisionPad::from_revisions(revisions)?; Ok(pad) } @@ -68,7 +71,7 @@ impl RevisionMergeable for GridViewRevisionMergeable { } pub(crate) struct GroupConfigurationReaderImpl { - pub(crate) pad: Arc>, + pub(crate) pad: Arc>, pub(crate) view_editor_delegate: Arc, } @@ -96,7 +99,7 @@ impl GroupConfigurationReader for GroupConfigurationReaderImpl { pub(crate) struct GroupConfigurationWriterImpl { pub(crate) user_id: String, pub(crate) rev_manager: Arc>>, - pub(crate) view_pad: Arc>, + pub(crate) view_pad: Arc>, } impl GroupConfigurationWriter for GroupConfigurationWriterImpl { @@ -140,7 +143,7 @@ pub(crate) async fn apply_change( } pub fn make_grid_setting( - view_pad: &GridViewRevisionPad, + view_pad: &DatabaseViewRevisionPad, field_revs: &[Arc], ) -> DatabaseViewSettingPB { let layout_type: LayoutTypePB = view_pad.layout.clone().into(); @@ -158,7 +161,7 @@ pub fn make_grid_setting( pub(crate) struct GridViewFilterDelegateImpl { pub(crate) editor_delegate: Arc, - pub(crate) view_revision_pad: Arc>, + pub(crate) view_revision_pad: Arc>, } impl FilterDelegate for GridViewFilterDelegateImpl { @@ -198,7 +201,7 @@ impl FilterDelegate for GridViewFilterDelegateImpl { pub(crate) struct GridViewSortDelegateImpl { pub(crate) editor_delegate: Arc, - pub(crate) view_revision_pad: Arc>, + pub(crate) view_revision_pad: Arc>, pub(crate) filter_controller: Arc, } diff --git a/frontend/rust-lib/flowy-database/src/services/field/field_builder.rs b/frontend/rust-lib/flowy-database/src/services/field/field_builder.rs index dfa0f57d1c..fea9e1f903 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/field_builder.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/field_builder.rs @@ -2,7 +2,7 @@ use crate::entities::{FieldPB, FieldType}; use crate::services::field::{default_type_option_builder_from_type, TypeOptionBuilder}; -use grid_model::FieldRevision; +use database_model::FieldRevision; use indexmap::IndexMap; pub struct FieldBuilder { diff --git a/frontend/rust-lib/flowy-database/src/services/field/field_operation.rs b/frontend/rust-lib/flowy-database/src/services/field/field_operation.rs index d8bc61f9fe..6ceb8c5c06 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/field_operation.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/field_operation.rs @@ -1,7 +1,7 @@ +use crate::services::database::DatabaseRevisionEditor; use crate::services::field::{MultiSelectTypeOptionPB, SingleSelectTypeOptionPB}; -use crate::services::grid_editor::DatabaseRevisionEditor; +use database_model::{TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_error::FlowyResult; -use grid_model::{TypeOptionDataDeserializer, TypeOptionDataSerializer}; use std::sync::Arc; pub async fn edit_field_type_option( @@ -23,7 +23,7 @@ where action(&mut type_option); let bytes = type_option.protobuf_bytes().to_vec(); editor - .update_field_type_option(&editor.database_id, field_id, bytes, old_field_rev) + .update_field_type_option(field_id, bytes, old_field_rev) .await?; } diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs b/frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs index 014824577f..91f927a1d2 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs @@ -1,7 +1,7 @@ use crate::entities::FieldType; use crate::services::field::type_options::*; use bytes::Bytes; -use grid_model::TypeOptionDataSerializer; +use database_model::TypeOptionDataSerializer; pub trait TypeOptionBuilder { /// Returns the type of the type-option data diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_tests.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_tests.rs index 5afa2c69b6..416b7172db 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_tests.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_tests.rs @@ -5,7 +5,7 @@ mod tests { use crate::services::field::type_options::checkbox_type_option::*; use crate::services::field::FieldBuilder; - use grid_model::FieldRevision; + use database_model::FieldRevision; #[test] fn checkout_box_description_test() { diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs index 0bc906d3a2..3b7c239a41 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs @@ -6,9 +6,9 @@ use crate::services::field::{ TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; use std::str::FromStr; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_tests.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_tests.rs index b3bea1fb69..78c4d7e08e 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_tests.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_tests.rs @@ -7,7 +7,7 @@ mod tests { // use crate::services::field::{DateCellChangeset, DateCellData, DateFormat, DateTypeOptionPB, TimeFormat}; use chrono::format::strftime::StrftimeItems; use chrono::{FixedOffset, NaiveDateTime}; - use grid_model::FieldRevision; + use database_model::FieldRevision; use strum::IntoEnumIterator; #[test] diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_type_option.rs index d1827ad8e9..d3d351c9cd 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_type_option.rs @@ -9,9 +9,9 @@ use crate::services::field::{ use bytes::Bytes; use chrono::format::strftime::StrftimeItems; use chrono::{NaiveDateTime, Timelike}; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::{ErrorCode, FlowyError, FlowyResult}; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_tests.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_tests.rs index 2b7d00fe6c..738ee9bab9 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_tests.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_tests.rs @@ -5,7 +5,7 @@ mod tests { use crate::services::field::FieldBuilder; use crate::services::field::{strip_currency_symbol, NumberFormat, NumberTypeOptionPB}; - use grid_model::FieldRevision; + use database_model::FieldRevision; use strum::IntoEnumIterator; /// Testing when the input is not a number. diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_type_option.rs index d7369cc0a5..74a6dcd6e5 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_type_option.rs @@ -7,10 +7,10 @@ use crate::services::field::{ TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use fancy_regex::Regex; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use lazy_static::lazy_static; use rust_decimal::Decimal; use serde::{Deserialize, Serialize}; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/checklist_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/checklist_type_option.rs index da2f0a1909..cb17f473c4 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/checklist_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/checklist_type_option.rs @@ -7,9 +7,9 @@ use crate::services::field::{ TypeOptionBuilder, TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/multi_select_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/multi_select_type_option.rs index 038d5ff1e5..24b887fc06 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/multi_select_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/multi_select_type_option.rs @@ -9,9 +9,9 @@ use crate::services::field::{ TypeOptionBuilder, TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use serde::{Deserialize, Serialize}; // Multiple select diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/select_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/select_type_option.rs index 48fb63b96d..b3d8c35aaa 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/select_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/select_type_option.rs @@ -11,9 +11,9 @@ use crate::services::field::{ TypeOption, TypeOptionCellData, TypeOptionTransform, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataSerializer}; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::{internal_error, ErrorCode, FlowyResult}; -use grid_model::{FieldRevision, TypeOptionDataSerializer}; use nanoid::nanoid; use serde::{Deserialize, Serialize}; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/single_select_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/single_select_type_option.rs index 766dc77d8f..48ea5de405 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/single_select_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/single_select_type_option.rs @@ -11,9 +11,9 @@ use crate::services::field::{ SelectOptionCellChangeset, SelectOptionIds, SelectOptionPB, SelectTypeOptionSharedAction, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use serde::{Deserialize, Serialize}; // Single select diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/type_option_transform.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/type_option_transform.rs index f662371770..7e9f9a7b58 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/type_option_transform.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/type_option_transform.rs @@ -5,7 +5,7 @@ use crate::services::field::{ SelectTypeOptionSharedAction, SingleSelectTypeOptionPB, TypeOption, CHECK, UNCHECK, }; -use grid_model::TypeOptionDataDeserializer; +use database_model::TypeOptionDataDeserializer; /// Handles how to transform the cell data when switching between different field types pub(crate) struct SelectOptionTypeOptionTransformHelper(); diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/text_type_option/text_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/text_type_option/text_type_option.rs index 7bb730cfaa..5f86f1fce3 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/text_type_option/text_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/text_type_option/text_type_option.rs @@ -9,9 +9,9 @@ use crate::services::field::{ TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use protobuf::ProtobufError; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option.rs index 7b28bbfbb5..95c686b9d4 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option.rs @@ -5,8 +5,8 @@ use crate::services::cell::{ use crate::services::filter::FromFilterString; use bytes::Bytes; +use database_model::FieldRevision; use flowy_error::FlowyResult; -use grid_model::FieldRevision; use protobuf::ProtobufError; use std::cmp::Ordering; use std::fmt::Debug; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option_cell.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option_cell.rs index 48c6eaad2d..36e5f99466 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option_cell.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/type_option_cell.rs @@ -10,8 +10,8 @@ use crate::services::field::{ URLTypeOptionPB, }; use crate::services::filter::FilterType; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use std::any::Any; use std::cmp::Ordering; use std::collections::hash_map::DefaultHasher; diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_tests.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_tests.rs index 9ce915299f..aae857c93a 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_tests.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_tests.rs @@ -5,7 +5,7 @@ mod tests { use crate::services::field::FieldBuilder; use crate::services::field::URLTypeOptionPB; - use grid_model::FieldRevision; + use database_model::FieldRevision; /// The expected_str will equal to the input string, but the expected_url will be empty if there's no /// http url in the input string. diff --git a/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_type_option.rs b/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_type_option.rs index ef6c92d1b5..9a5ec4318d 100644 --- a/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_type_option.rs +++ b/frontend/rust-lib/flowy-database/src/services/field/type_options/url_type_option/url_type_option.rs @@ -7,10 +7,10 @@ use crate::services::field::{ URLCellDataPB, }; use bytes::Bytes; +use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use fancy_regex::Regex; use flowy_derive::ProtoBuf; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer}; use lazy_static::lazy_static; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; diff --git a/frontend/rust-lib/flowy-database/src/services/filter/controller.rs b/frontend/rust-lib/flowy-database/src/services/filter/controller.rs index 330fb7118a..aa0394e03d 100644 --- a/frontend/rust-lib/flowy-database/src/services/filter/controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/filter/controller.rs @@ -3,16 +3,16 @@ use crate::entities::{FieldType, InsertedRowPB, RowPB}; use crate::services::cell::{ AnyTypeCache, AtomicCellDataCache, AtomicCellFilterCache, TypeCellData, }; +use crate::services::database_view::{DatabaseViewChanged, DatabaseViewChangedNotifier}; use crate::services::field::*; use crate::services::filter::{ FilterChangeset, FilterResult, FilterResultNotification, FilterType, }; use crate::services::row::DatabaseBlockRowRevision; -use crate::services::view_editor::{DatabaseViewChanged, GridViewChangedNotifier}; use dashmap::DashMap; +use database_model::{CellRevision, FieldId, FieldRevision, FilterRevision, RowRevision}; use flowy_error::FlowyResult; use flowy_task::{QualityOfService, Task, TaskContent, TaskDispatcher}; -use grid_model::{CellRevision, FieldId, FieldRevision, FilterRevision, RowRevision}; use lib_infra::future::Fut; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -43,7 +43,7 @@ pub struct FilterController { cell_data_cache: AtomicCellDataCache, cell_filter_cache: AtomicCellFilterCache, task_scheduler: Arc>, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, } impl FilterController { @@ -54,7 +54,7 @@ impl FilterController { task_scheduler: Arc>, filter_revs: Vec>, cell_data_cache: AtomicCellDataCache, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, ) -> Self where T: FilterDelegate + 'static, diff --git a/frontend/rust-lib/flowy-database/src/services/filter/entities.rs b/frontend/rust-lib/flowy-database/src/services/filter/entities.rs index edcffdbb63..846edef9d7 100644 --- a/frontend/rust-lib/flowy-database/src/services/filter/entities.rs +++ b/frontend/rust-lib/flowy-database/src/services/filter/entities.rs @@ -1,7 +1,7 @@ use crate::entities::{ AlterFilterParams, DatabaseSettingChangesetParams, DeleteFilterParams, FieldType, InsertedRowPB, }; -use grid_model::{FieldRevision, FieldTypeRevision}; +use database_model::{FieldRevision, FieldTypeRevision}; use std::sync::Arc; #[derive(Debug)] diff --git a/frontend/rust-lib/flowy-database/src/services/group/action.rs b/frontend/rust-lib/flowy-database/src/services/group/action.rs index f99171307e..c44566a29e 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/action.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/action.rs @@ -2,8 +2,8 @@ use crate::entities::{GroupChangesetPB, GroupPB, GroupRowsNotificationPB, Insert use crate::services::cell::DecodedCellData; use crate::services::group::controller::MoveGroupRowContext; use crate::services::group::Group; +use database_model::{CellRevision, FieldRevision, RowRevision}; use flowy_error::FlowyResult; -use grid_model::{CellRevision, FieldRevision, RowRevision}; use std::sync::Arc; /// Using polymorphism to provides the customs action for different group controller. diff --git a/frontend/rust-lib/flowy-database/src/services/group/configuration.rs b/frontend/rust-lib/flowy-database/src/services/group/configuration.rs index 27f78e8113..765694f21e 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/configuration.rs @@ -1,11 +1,11 @@ use crate::entities::{GroupChangesetPB, GroupPB, InsertedGroupPB}; use crate::services::field::RowSingleCellData; use crate::services::group::{default_group_configuration, GeneratedGroupContext, Group}; -use flowy_error::{FlowyError, FlowyResult}; -use grid_model::{ +use database_model::{ FieldRevision, FieldTypeRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, GroupRevision, }; +use flowy_error::{FlowyError, FlowyResult}; use indexmap::IndexMap; use lib_infra::future::Fut; use std::collections::HashMap; diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller.rs index 38b9a7f321..de00b4b865 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller.rs @@ -6,11 +6,11 @@ use crate::services::group::action::{ }; use crate::services::group::configuration::GroupContext; use crate::services::group::entities::Group; -use flowy_error::FlowyResult; -use grid_model::{ +use database_model::{ CellRevision, FieldRevision, GroupConfigurationContentSerde, GroupRevision, RowChangeset, RowRevision, TypeOptionDataDeserializer, }; +use flowy_error::FlowyResult; use std::marker::PhantomData; use std::sync::Arc; diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/checkbox_controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/checkbox_controller.rs index cc9076215a..277d7ae608 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/checkbox_controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/checkbox_controller.rs @@ -10,7 +10,7 @@ use crate::services::group::controller::{ use crate::services::cell::insert_checkbox_cell; use crate::services::group::{move_group_row, GeneratedGroupConfig, GeneratedGroupContext}; -use grid_model::{ +use database_model::{ CellRevision, CheckboxGroupConfigurationRevision, FieldRevision, GroupRevision, RowRevision, }; diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/default_controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/default_controller.rs index 7a793d67e7..21e0446c95 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/default_controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/default_controller.rs @@ -3,8 +3,8 @@ use crate::services::group::action::{ DidMoveGroupRowResult, DidUpdateGroupRowResult, GroupControllerActions, }; use crate::services::group::{Group, GroupController, MoveGroupRowContext}; +use database_model::{FieldRevision, RowRevision}; use flowy_error::FlowyResult; -use grid_model::{FieldRevision, RowRevision}; use std::sync::Arc; /// A [DefaultGroupController] is used to handle the group actions for the [FieldType] that doesn't diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs index 758e50b764..0bd8ca47db 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs @@ -11,7 +11,7 @@ use crate::services::group::controller::{ use crate::services::group::controller_impls::select_option_controller::util::*; use crate::services::group::{make_no_status_group, GeneratedGroupContext}; -use grid_model::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; +use database_model::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; // MultiSelect pub type MultiSelectGroupController = GenericGroupController< diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/single_select_controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/single_select_controller.rs index 590b98fc17..aa9d3d1f9d 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/single_select_controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/single_select_controller.rs @@ -12,7 +12,7 @@ use crate::services::group::controller_impls::select_option_controller::util::*; use crate::services::group::entities::Group; use crate::services::group::{make_no_status_group, GeneratedGroupContext}; -use grid_model::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; +use database_model::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; // SingleSelect pub type SingleSelectGroupController = GenericGroupController< diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/util.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/util.rs index 87b22f3ba7..d630df5d13 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/util.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/select_option_controller/util.rs @@ -4,7 +4,7 @@ use crate::services::field::{SelectOptionCellDataPB, SelectOptionPB, CHECK}; use crate::services::group::configuration::GroupContext; use crate::services::group::controller::MoveGroupRowContext; use crate::services::group::{GeneratedGroupConfig, Group}; -use grid_model::{ +use database_model::{ CellRevision, FieldRevision, GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision, }; diff --git a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/url_controller.rs b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/url_controller.rs index 590e2eb82a..89304ee98c 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/controller_impls/url_controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/controller_impls/url_controller.rs @@ -9,10 +9,10 @@ use crate::services::group::controller::{ use crate::services::group::{ make_no_status_group, move_group_row, GeneratedGroupConfig, GeneratedGroupContext, }; -use flowy_error::FlowyResult; -use grid_model::{ +use database_model::{ CellRevision, FieldRevision, GroupRevision, RowRevision, URLGroupConfigurationRevision, }; +use flowy_error::FlowyResult; pub type URLGroupController = GenericGroupController< URLGroupConfigurationRevision, diff --git a/frontend/rust-lib/flowy-database/src/services/group/group_util.rs b/frontend/rust-lib/flowy-database/src/services/group/group_util.rs index 27afeea0e7..fb38a700ab 100644 --- a/frontend/rust-lib/flowy-database/src/services/group/group_util.rs +++ b/frontend/rust-lib/flowy-database/src/services/group/group_util.rs @@ -6,13 +6,13 @@ use crate::services::group::{ MultiSelectGroupController, SelectOptionGroupContext, SingleSelectGroupController, URLGroupContext, URLGroupController, }; -use flowy_error::FlowyResult; -use grid_model::{ +use database_model::{ CheckboxGroupConfigurationRevision, DateGroupConfigurationRevision, FieldRevision, GroupConfigurationRevision, GroupRevision, LayoutRevision, NumberGroupConfigurationRevision, RowRevision, SelectOptionGroupConfigurationRevision, TextGroupConfigurationRevision, URLGroupConfigurationRevision, }; +use flowy_error::FlowyResult; use std::sync::Arc; /// Returns a group controller. diff --git a/frontend/rust-lib/flowy-database/src/services/mod.rs b/frontend/rust-lib/flowy-database/src/services/mod.rs index 42c4168e4b..a53e20fc06 100644 --- a/frontend/rust-lib/flowy-database/src/services/mod.rs +++ b/frontend/rust-lib/flowy-database/src/services/mod.rs @@ -1,16 +1,12 @@ mod util; -pub mod block_editor; -pub mod block_manager; pub mod cell; +pub mod database; +pub mod database_view; pub mod field; pub mod filter; -pub mod grid_editor; -mod grid_editor_trait_impl; pub mod group; pub mod persistence; -mod retry; pub mod row; pub mod setting; pub mod sort; -pub mod view_editor; diff --git a/frontend/rust-lib/flowy-database/src/services/persistence/migration.rs b/frontend/rust-lib/flowy-database/src/services/persistence/migration.rs index e9b5fc7996..4ba86ff329 100644 --- a/frontend/rust-lib/flowy-database/src/services/persistence/migration.rs +++ b/frontend/rust-lib/flowy-database/src/services/persistence/migration.rs @@ -2,13 +2,13 @@ use crate::manager::DatabaseUser; use crate::services::persistence::rev_sqlite::SQLiteDatabaseRevisionPersistence; use crate::services::persistence::GridDatabase; use bytes::Bytes; +use database_model::DatabaseRevision; use flowy_client_sync::client_database::{ make_database_rev_json_str, DatabaseOperationsBuilder, DatabaseRevisionPad, }; use flowy_error::FlowyResult; use flowy_revision::reset::{RevisionResettable, RevisionStructReset}; use flowy_sqlite::kv::KV; -use grid_model::DatabaseRevision; use lib_infra::util::md5; use revision_model::Revision; use std::sync::Arc; diff --git a/frontend/rust-lib/flowy-database/src/services/row/row_builder.rs b/frontend/rust-lib/flowy-database/src/services/row/row_builder.rs index a7f0dc42b1..2fed1c880c 100644 --- a/frontend/rust-lib/flowy-database/src/services/row/row_builder.rs +++ b/frontend/rust-lib/flowy-database/src/services/row/row_builder.rs @@ -3,7 +3,7 @@ use crate::services::cell::{ insert_text_cell, insert_url_cell, }; -use grid_model::{gen_row_id, CellRevision, FieldRevision, RowRevision, DEFAULT_ROW_HEIGHT}; +use database_model::{gen_row_id, CellRevision, FieldRevision, RowRevision, DEFAULT_ROW_HEIGHT}; use indexmap::IndexMap; use std::collections::HashMap; use std::sync::Arc; diff --git a/frontend/rust-lib/flowy-database/src/services/row/row_loader.rs b/frontend/rust-lib/flowy-database/src/services/row/row_loader.rs index de240c182e..3808c1f1ab 100644 --- a/frontend/rust-lib/flowy-database/src/services/row/row_loader.rs +++ b/frontend/rust-lib/flowy-database/src/services/row/row_loader.rs @@ -1,5 +1,5 @@ use crate::entities::RowPB; -use grid_model::RowRevision; +use database_model::RowRevision; use std::sync::Arc; diff --git a/frontend/rust-lib/flowy-database/src/services/setting/setting_builder.rs b/frontend/rust-lib/flowy-database/src/services/setting/setting_builder.rs index 07c0d1cfbd..bec5e44fc9 100644 --- a/frontend/rust-lib/flowy-database/src/services/setting/setting_builder.rs +++ b/frontend/rust-lib/flowy-database/src/services/setting/setting_builder.rs @@ -9,7 +9,7 @@ pub struct GridSettingChangesetBuilder { impl GridSettingChangesetBuilder { pub fn new(grid_id: &str, layout_type: &LayoutTypePB) -> Self { let params = DatabaseSettingChangesetParams { - database_id: grid_id.to_string(), + view_id: grid_id.to_string(), layout_type: layout_type.clone().into(), insert_filter: None, delete_filter: None, diff --git a/frontend/rust-lib/flowy-database/src/services/sort/controller.rs b/frontend/rust-lib/flowy-database/src/services/sort/controller.rs index 9adcfc3d8b..49e048754a 100644 --- a/frontend/rust-lib/flowy-database/src/services/sort/controller.rs +++ b/frontend/rust-lib/flowy-database/src/services/sort/controller.rs @@ -1,14 +1,14 @@ use crate::entities::FieldType; use crate::entities::SortChangesetNotificationPB; use crate::services::cell::{AtomicCellDataCache, TypeCellData}; +use crate::services::database_view::{DatabaseViewChanged, DatabaseViewChangedNotifier}; use crate::services::field::{default_order, TypeOptionCellExt}; use crate::services::sort::{ ReorderAllRowsResult, ReorderSingleRowResult, SortChangeset, SortType, }; -use crate::services::view_editor::{DatabaseViewChanged, GridViewChangedNotifier}; +use database_model::{CellRevision, FieldRevision, RowRevision, SortCondition, SortRevision}; use flowy_error::FlowyResult; use flowy_task::{QualityOfService, Task, TaskContent, TaskDispatcher}; -use grid_model::{CellRevision, FieldRevision, RowRevision, SortCondition, SortRevision}; use lib_infra::future::Fut; use rayon::prelude::ParallelSliceMut; use serde::{Deserialize, Serialize}; @@ -34,7 +34,7 @@ pub struct SortController { sorts: Vec>, cell_data_cache: AtomicCellDataCache, row_index_cache: HashMap, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, } impl SortController { @@ -45,7 +45,7 @@ impl SortController { delegate: T, task_scheduler: Arc>, cell_data_cache: AtomicCellDataCache, - notifier: GridViewChangedNotifier, + notifier: DatabaseViewChangedNotifier, ) -> Self where T: SortDelegate + 'static, diff --git a/frontend/rust-lib/flowy-database/src/services/sort/entities.rs b/frontend/rust-lib/flowy-database/src/services/sort/entities.rs index 3386e33110..911b4794bc 100644 --- a/frontend/rust-lib/flowy-database/src/services/sort/entities.rs +++ b/frontend/rust-lib/flowy-database/src/services/sort/entities.rs @@ -1,5 +1,5 @@ use crate::entities::{AlterSortParams, DeleteSortParams, FieldType}; -use grid_model::{FieldRevision, FieldTypeRevision}; +use database_model::{FieldRevision, FieldTypeRevision}; use std::sync::Arc; #[derive(Hash, Eq, PartialEq, Debug, Clone)] diff --git a/frontend/rust-lib/flowy-database/src/util.rs b/frontend/rust-lib/flowy-database/src/util.rs index 0d29952da5..36d18b1348 100644 --- a/frontend/rust-lib/flowy-database/src/util.rs +++ b/frontend/rust-lib/flowy-database/src/util.rs @@ -1,8 +1,8 @@ use crate::entities::FieldType; use crate::services::field::*; use crate::services::row::RowRevisionBuilder; +use database_model::BuildDatabaseContext; use flowy_client_sync::client_database::DatabaseBuilder; -use grid_model::BuildDatabaseContext; pub fn make_default_grid() -> BuildDatabaseContext { let mut database_builder = DatabaseBuilder::new(); diff --git a/frontend/rust-lib/flowy-database/tests/grid/block_test/block_test.rs b/frontend/rust-lib/flowy-database/tests/grid/block_test/block_test.rs index 5202f76dcc..fb2cb22367 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/block_test/block_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/block_test/block_test.rs @@ -1,11 +1,11 @@ use crate::grid::block_test::script::DatabaseRowTest; use crate::grid::block_test::script::RowScript::*; -use grid_model::{GridBlockMetaRevision, GridBlockMetaRevisionChangeset}; +use database_model::{DatabaseBlockMetaRevision, DatabaseBlockMetaRevisionChangeset}; #[tokio::test] async fn grid_create_block() { - let block_meta_rev = GridBlockMetaRevision::new(); + let block_meta_rev = DatabaseBlockMetaRevision::new(); let scripts = vec![ AssertBlockCount(1), CreateBlock { @@ -18,9 +18,9 @@ async fn grid_create_block() { #[tokio::test] async fn grid_update_block() { - let block_meta_rev = GridBlockMetaRevision::new(); + let block_meta_rev = DatabaseBlockMetaRevision::new(); let mut cloned_grid_block = block_meta_rev.clone(); - let changeset = GridBlockMetaRevisionChangeset { + let changeset = DatabaseBlockMetaRevisionChangeset { block_id: block_meta_rev.block_id.clone(), start_row_index: Some(2), row_count: Some(10), diff --git a/frontend/rust-lib/flowy-database/tests/grid/block_test/row_test.rs b/frontend/rust-lib/flowy-database/tests/grid/block_test/row_test.rs index 822e9942ad..ade6439733 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/block_test/row_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/block_test/row_test.rs @@ -1,9 +1,9 @@ use crate::grid::block_test::script::RowScript::*; use crate::grid::block_test::script::{CreateRowScriptBuilder, DatabaseRowTest}; use crate::grid::mock_data::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, TWITTER}; +use database_model::RowChangeset; use flowy_database::entities::FieldType; use flowy_database::services::field::{SELECTION_IDS_SEPARATOR, UNCHECK}; -use grid_model::RowChangeset; #[tokio::test] async fn grid_create_row_count_test() { diff --git a/frontend/rust-lib/flowy-database/tests/grid/block_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/block_test/script.rs index a811da0f88..a54a3424c5 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/block_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/block_test/script.rs @@ -1,12 +1,12 @@ use crate::grid::block_test::script::RowScript::{AssertCell, CreateRow}; use crate::grid::block_test::util::GridRowTestBuilder; use crate::grid::database_editor::DatabaseEditorTest; +use database_model::{ + DatabaseBlockMetaRevision, DatabaseBlockMetaRevisionChangeset, RowChangeset, RowRevision, +}; use flowy_database::entities::{CellIdParams, CreateRowParams, FieldType, LayoutTypePB, RowPB}; use flowy_database::services::field::*; use flowy_database::services::row::DatabaseBlockRow; -use grid_model::{ - GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowChangeset, RowRevision, -}; use std::collections::HashMap; use std::sync::Arc; use strum::IntoEnumIterator; @@ -33,10 +33,10 @@ pub enum RowScript { }, AssertRowCount(usize), CreateBlock { - block: GridBlockMetaRevision, + block: DatabaseBlockMetaRevision, }, UpdateBlock { - changeset: GridBlockMetaRevisionChangeset, + changeset: DatabaseBlockMetaRevisionChangeset, }, AssertBlockCount(usize), AssertBlock { @@ -46,7 +46,7 @@ pub enum RowScript { }, AssertBlockEqual { block_index: usize, - block: GridBlockMetaRevision, + block: DatabaseBlockMetaRevision, }, } @@ -78,7 +78,7 @@ impl DatabaseRowTest { match script { RowScript::CreateEmptyRow => { let params = CreateRowParams { - database_id: self.editor.database_id.clone(), + view_id: self.editor.database_id.clone(), start_row_id: None, group_id: None, layout: LayoutTypePB::Grid, diff --git a/frontend/rust-lib/flowy-database/tests/grid/block_test/util.rs b/frontend/rust-lib/flowy-database/tests/grid/block_test/util.rs index 638ef06347..c2d377fcdd 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/block_test/util.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/block_test/util.rs @@ -1,10 +1,10 @@ +use database_model::{FieldRevision, RowRevision}; use flowy_database::entities::FieldType; use flowy_database::services::field::{ ChecklistTypeOptionPB, DateCellChangeset, MultiSelectTypeOptionPB, SelectOptionPB, SingleSelectTypeOptionPB, }; use flowy_database::services::row::RowRevisionBuilder; -use grid_model::{FieldRevision, RowRevision}; use std::sync::Arc; use strum::EnumCount; diff --git a/frontend/rust-lib/flowy-database/tests/grid/database_editor.rs b/frontend/rust-lib/flowy-database/tests/grid/database_editor.rs index 0f90961018..a49ca7672a 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/database_editor.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/database_editor.rs @@ -1,13 +1,13 @@ use crate::grid::mock_data::*; use bytes::Bytes; +use database_model::*; use flowy_database::entities::*; use flowy_database::services::cell::ToCellChangesetString; +use flowy_database::services::database::DatabaseRevisionEditor; use flowy_database::services::field::SelectOptionPB; use flowy_database::services::field::*; -use flowy_database::services::grid_editor::DatabaseRevisionEditor; use flowy_test::helper::ViewTest; use flowy_test::FlowySDKTest; -use grid_model::*; use std::collections::HashMap; use std::sync::Arc; use strum::EnumCount; @@ -17,7 +17,7 @@ pub struct DatabaseEditorTest { pub view_id: String, pub editor: Arc, pub field_revs: Vec>, - pub block_meta_revs: Vec>, + pub block_meta_revs: Vec>, pub row_revs: Vec>, pub field_count: usize, pub row_by_row_id: HashMap, diff --git a/frontend/rust-lib/flowy-database/tests/grid/field_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/field_test/script.rs index 2a2e851528..fdc2437c96 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/field_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/field_test/script.rs @@ -1,7 +1,7 @@ use crate::grid::database_editor::DatabaseEditorTest; +use database_model::FieldRevision; use flowy_database::entities::{CreateFieldParams, FieldChangesetParams, FieldType}; use flowy_database::services::cell::{stringify_cell_data, TypeCellData}; -use grid_model::FieldRevision; pub enum FieldScript { CreateField { @@ -106,7 +106,7 @@ impl DatabaseFieldTest { // self .editor - .update_field_type_option(&self.view_id, &field_id, type_option, None) + .update_field_type_option(&field_id, type_option, None) .await .unwrap(); self.field_revs = self.editor.get_field_revs(None).await.unwrap(); diff --git a/frontend/rust-lib/flowy-database/tests/grid/field_test/util.rs b/frontend/rust-lib/flowy-database/tests/grid/field_test/util.rs index c851269420..6fa0a93036 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/field_test/util.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/field_test/util.rs @@ -1,7 +1,7 @@ +use database_model::*; use flowy_database::entities::*; use flowy_database::services::field::selection_type_option::SelectOptionPB; use flowy_database::services::field::*; -use grid_model::*; pub fn create_text_field(grid_id: &str) -> (CreateFieldParams, FieldRevision) { let mut field_rev = FieldBuilder::new(RichTextTypeOptionBuilder::default()) @@ -22,7 +22,7 @@ pub fn create_text_field(grid_id: &str) -> (CreateFieldParams, FieldRevision) { field_rev.insert_type_option(type_option_builder.serializer()); let params = CreateFieldParams { - database_id: grid_id.to_owned(), + view_id: grid_id.to_owned(), field_type: field_rev.ty.into(), type_option_data: Some(type_option_data), }; @@ -50,7 +50,7 @@ pub fn create_single_select_field(grid_id: &str) -> (CreateFieldParams, FieldRev field_rev.insert_type_option(type_option_builder.serializer()); let params = CreateFieldParams { - database_id: grid_id.to_owned(), + view_id: grid_id.to_owned(), field_type: field_rev.ty.into(), type_option_data: Some(type_option_data), }; diff --git a/frontend/rust-lib/flowy-database/tests/grid/filter_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/filter_test/script.rs index 0363b97dea..3c6b4bc224 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/filter_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/filter_test/script.rs @@ -10,11 +10,11 @@ use tokio::sync::broadcast::Receiver; use flowy_database::entities::{AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, LayoutTypePB, DatabaseSettingChangesetParams, DatabaseViewSettingPB, RowPB, TextFilterConditionPB, FieldType, NumberFilterConditionPB, CheckboxFilterConditionPB, DateFilterConditionPB, DateFilterContentPB, SelectOptionConditionPB, TextFilterPB, NumberFilterPB, CheckboxFilterPB, DateFilterPB, SelectOptionFilterPB, CellChangesetPB, FilterPB, ChecklistFilterConditionPB, ChecklistFilterPB}; use flowy_database::services::field::{SelectOptionCellChangeset, SelectOptionIds}; use flowy_database::services::setting::GridSettingChangesetBuilder; -use grid_model::{FieldRevision, FieldTypeRevision}; +use database_model::{FieldRevision, FieldTypeRevision}; use flowy_sqlite::schema::view_table::dsl::view_table; use flowy_database::services::cell::insert_select_option_cell; use flowy_database::services::filter::FilterType; -use flowy_database::services::view_editor::DatabaseViewChanged; +use flowy_database::services::database_view::DatabaseViewChanged; use crate::grid::database_editor::DatabaseEditorTest; pub struct FilterRowChanged { diff --git a/frontend/rust-lib/flowy-database/tests/grid/grid_editor.rs b/frontend/rust-lib/flowy-database/tests/grid/grid_editor.rs index cf833bcbb2..d503a20b0b 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/grid_editor.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/grid_editor.rs @@ -3,6 +3,7 @@ #![allow(unused_imports)] use crate::grid::block_test::util::GridRowTestBuilder; use bytes::Bytes; +use database_model::*; use flowy_client_sync::client_database::DatabaseBuilder; use flowy_database::entities::*; use flowy_database::services::cell::ToCellChangesetString; @@ -15,7 +16,6 @@ use flowy_error::FlowyResult; use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS; use flowy_test::helper::ViewTest; use flowy_test::FlowySDKTest; -use grid_model::*; use std::collections::HashMap; use std::sync::Arc; use std::time::Duration; @@ -24,183 +24,195 @@ use strum::IntoEnumIterator; use tokio::time::sleep; pub struct GridEditorTest { - pub sdk: FlowySDKTest, - pub view_id: String, - pub editor: Arc, - pub field_revs: Vec>, - pub block_meta_revs: Vec>, - pub row_revs: Vec>, - pub field_count: usize, - pub row_by_row_id: HashMap, + pub sdk: FlowySDKTest, + pub view_id: String, + pub editor: Arc, + pub field_revs: Vec>, + pub block_meta_revs: Vec>, + pub row_revs: Vec>, + pub field_count: usize, + pub row_by_row_id: HashMap, } impl GridEditorTest { - pub async fn new_table() -> Self { - Self::new(DatabaseViewLayout::Grid).await + pub async fn new_table() -> Self { + Self::new(DatabaseViewLayout::Grid).await + } + + pub async fn new_board() -> Self { + Self::new(DatabaseViewLayout::Board).await + } + + pub async fn new(layout: DatabaseViewLayout) -> Self { + let sdk = FlowySDKTest::default(); + let _ = sdk.init_user().await; + let test = match layout { + DatabaseViewLayout::Grid => { + let build_context = make_test_grid(); + let view_data: Bytes = build_context.into(); + ViewTest::new_grid_view(&sdk, view_data.to_vec()).await + }, + DatabaseViewLayout::Board => { + let build_context = make_test_board(); + let view_data: Bytes = build_context.into(); + ViewTest::new_board_view(&sdk, view_data.to_vec()).await + }, + DatabaseViewLayout::Calendar => { + let build_context = make_test_calendar(); + let view_data: Bytes = build_context.into(); + ViewTest::new_calendar_view(&sdk, view_data.to_vec()).await + }, + }; + + let editor = sdk.grid_manager.open_database(&test.view.id).await.unwrap(); + let field_revs = editor.get_field_revs(None).await.unwrap(); + let block_meta_revs = editor.get_block_meta_revs().await.unwrap(); + let row_pbs = editor.get_all_row_revs(&test.view.id).await.unwrap(); + assert_eq!(block_meta_revs.len(), 1); + + // It seems like you should add the field in the make_test_grid() function. + // Because we assert the initialize count of the fields is equal to FieldType::COUNT. + assert_eq!(field_revs.len(), FieldType::COUNT); + + let grid_id = test.view.id; + Self { + sdk, + view_id: grid_id, + editor, + field_revs, + block_meta_revs, + row_revs: row_pbs, + field_count: FieldType::COUNT, + row_by_row_id: HashMap::default(), } + } - pub async fn new_board() -> Self { - Self::new(DatabaseViewLayout::Board).await - } + pub async fn get_row_revs(&self) -> Vec> { + self.editor.get_all_row_revs(&self.view_id).await.unwrap() + } - pub async fn new(layout: DatabaseViewLayout) -> Self { - let sdk = FlowySDKTest::default(); - let _ = sdk.init_user().await; - let test = match layout { - DatabaseViewLayout::Grid => { - let build_context = make_test_grid(); - let view_data: Bytes = build_context.into(); - ViewTest::new_grid_view(&sdk, view_data.to_vec()).await - } - DatabaseViewLayout::Board => { - let build_context = make_test_board(); - let view_data: Bytes = build_context.into(); - ViewTest::new_board_view(&sdk, view_data.to_vec()).await - } - DatabaseViewLayout::Calendar => { - let build_context = make_test_calendar(); - let view_data: Bytes = build_context.into(); - ViewTest::new_calendar_view(&sdk, view_data.to_vec()).await - } - }; + pub async fn grid_filters(&self) -> Vec { + self.editor.get_all_filters().await.unwrap() + } - let editor = sdk.grid_manager.open_database(&test.view.id).await.unwrap(); - let field_revs = editor.get_field_revs(None).await.unwrap(); - let block_meta_revs = editor.get_block_meta_revs().await.unwrap(); - let row_pbs = editor.get_all_row_revs(&test.view.id).await.unwrap(); - assert_eq!(block_meta_revs.len(), 1); + pub fn get_field_rev(&self, field_id: &str, field_type: FieldType) -> &Arc { + self + .field_revs + .iter() + .filter(|field_rev| { + let t_field_type: FieldType = field_rev.ty.into(); + field_rev.id == field_id && t_field_type == field_type + }) + .collect::>() + .pop() + .unwrap() + } - // It seems like you should add the field in the make_test_grid() function. - // Because we assert the initialize count of the fields is equal to FieldType::COUNT. - assert_eq!(field_revs.len(), FieldType::COUNT); + /// returns the first `FieldRevision` in the build-in test grid. + /// Not support duplicate `FieldType` in test grid yet. + pub fn get_first_field_rev(&self, field_type: FieldType) -> &Arc { + self + .field_revs + .iter() + .filter(|field_rev| { + let t_field_type: FieldType = field_rev.ty.into(); + t_field_type == field_type + }) + .collect::>() + .pop() + .unwrap() + } - let grid_id = test.view.id; - Self { - sdk, - view_id: grid_id, - editor, - field_revs, - block_meta_revs, - row_revs: row_pbs, - field_count: FieldType::COUNT, - row_by_row_id: HashMap::default(), - } - } + pub fn get_multi_select_type_option(&self, field_id: &str) -> Vec { + let field_type = FieldType::MultiSelect; + let field_rev = self.get_field_rev(field_id, field_type.clone()); + let type_option = field_rev + .get_type_option::(field_type.into()) + .unwrap(); + type_option.options + } - pub async fn get_row_revs(&self) -> Vec> { - self.editor.get_all_row_revs(&self.view_id).await.unwrap() - } + pub fn get_single_select_type_option(&self, field_id: &str) -> SingleSelectTypeOptionPB { + let field_type = FieldType::SingleSelect; + let field_rev = self.get_field_rev(field_id, field_type.clone()); + let type_option = field_rev + .get_type_option::(field_type.into()) + .unwrap(); + type_option + } - pub async fn grid_filters(&self) -> Vec { - self.editor.get_all_filters().await.unwrap() - } + pub fn get_checklist_type_option(&self, field_id: &str) -> ChecklistTypeOptionPB { + let field_type = FieldType::Checklist; + let field_rev = self.get_field_rev(field_id, field_type.clone()); + let type_option = field_rev + .get_type_option::(field_type.into()) + .unwrap(); + type_option + } + pub fn get_checkbox_type_option(&self, field_id: &str) -> CheckboxTypeOptionPB { + let field_type = FieldType::Checkbox; + let field_rev = self.get_field_rev(field_id, field_type.clone()); + let type_option = field_rev + .get_type_option::(field_type.into()) + .unwrap(); + type_option + } - pub fn get_field_rev(&self, field_id: &str, field_type: FieldType) -> &Arc { - self.field_revs - .iter() - .filter(|field_rev| { - let t_field_type: FieldType = field_rev.ty.into(); - field_rev.id == field_id && t_field_type == field_type - }) - .collect::>() - .pop() - .unwrap() - } + pub fn block_id(&self) -> &str { + &self.block_meta_revs.last().unwrap().block_id + } - /// returns the first `FieldRevision` in the build-in test grid. - /// Not support duplicate `FieldType` in test grid yet. - pub fn get_first_field_rev(&self, field_type: FieldType) -> &Arc { - self.field_revs - .iter() - .filter(|field_rev| { - let t_field_type: FieldType = field_rev.ty.into(); - t_field_type == field_type - }) - .collect::>() - .pop() - .unwrap() - } + pub async fn update_cell( + &mut self, + field_id: &str, + row_id: String, + cell_changeset: T, + ) { + let field_rev = self + .field_revs + .iter() + .find(|field_rev| field_rev.id == field_id) + .unwrap(); - pub fn get_multi_select_type_option(&self, field_id: &str) -> Vec { - let field_type = FieldType::MultiSelect; - let field_rev = self.get_field_rev(field_id, field_type.clone()); - let type_option = field_rev - .get_type_option::(field_type.into()) - .unwrap(); - type_option.options - } + self + .editor + .update_cell_with_changeset(&row_id, &field_rev.id, cell_changeset) + .await + .unwrap(); + } - pub fn get_single_select_type_option(&self, field_id: &str) -> SingleSelectTypeOptionPB { - let field_type = FieldType::SingleSelect; - let field_rev = self.get_field_rev(field_id, field_type.clone()); - let type_option = field_rev - .get_type_option::(field_type.into()) - .unwrap(); - type_option - } + pub(crate) async fn update_text_cell(&mut self, row_id: String, content: &str) { + let field_rev = self + .field_revs + .iter() + .find(|field_rev| { + let field_type: FieldType = field_rev.ty.into(); + field_type == FieldType::RichText + }) + .unwrap() + .clone(); - pub fn get_checklist_type_option(&self, field_id: &str) -> ChecklistTypeOptionPB { - let field_type = FieldType::Checklist; - let field_rev = self.get_field_rev(field_id, field_type.clone()); - let type_option = field_rev - .get_type_option::(field_type.into()) - .unwrap(); - type_option - } - pub fn get_checkbox_type_option(&self, field_id: &str) -> CheckboxTypeOptionPB { - let field_type = FieldType::Checkbox; - let field_rev = self.get_field_rev(field_id, field_type.clone()); - let type_option = field_rev - .get_type_option::(field_type.into()) - .unwrap(); - type_option - } + self + .update_cell(&field_rev.id, row_id, content.to_string()) + .await; + } - pub fn block_id(&self) -> &str { - &self.block_meta_revs.last().unwrap().block_id - } + pub(crate) async fn update_single_select_cell(&mut self, row_id: String, option_id: &str) { + let field_rev = self + .field_revs + .iter() + .find(|field_rev| { + let field_type: FieldType = field_rev.ty.into(); + field_type == FieldType::SingleSelect + }) + .unwrap() + .clone(); - pub async fn update_cell(&mut self, field_id: &str, row_id: String, cell_changeset: T) { - let field_rev = self - .field_revs - .iter() - .find(|field_rev| field_rev.id == field_id) - .unwrap(); - - self.editor - .update_cell_with_changeset(&row_id, &field_rev.id, cell_changeset) - .await - .unwrap(); - } - - pub(crate) async fn update_text_cell(&mut self, row_id: String, content: &str) { - let field_rev = self - .field_revs - .iter() - .find(|field_rev| { - let field_type: FieldType = field_rev.ty.into(); - field_type == FieldType::RichText - }) - .unwrap() - .clone(); - - self.update_cell(&field_rev.id, row_id, content.to_string()).await; - } - - pub(crate) async fn update_single_select_cell(&mut self, row_id: String, option_id: &str) { - let field_rev = self - .field_revs - .iter() - .find(|field_rev| { - let field_type: FieldType = field_rev.ty.into(); - field_type == FieldType::SingleSelect - }) - .unwrap() - .clone(); - - let cell_changeset = SelectOptionCellChangeset::from_insert_option_id(&option_id); - self.update_cell(&field_rev.id, row_id, cell_changeset).await; - } + let cell_changeset = SelectOptionCellChangeset::from_insert_option_id(&option_id); + self + .update_cell(&field_rev.id, row_id, cell_changeset) + .await; + } } pub const GOOGLE: &str = "Google"; @@ -218,356 +230,390 @@ pub const THIRD_THING: &str = "Start working"; /// The build-in test data for grid. Currently, there are five rows in this grid, if you want to add /// more rows or alter the data in this grid. Some tests may fail. So you need to fix the failed tests. fn make_test_grid() -> BuildDatabaseContext { - let mut grid_builder = DatabaseBuilder::new(); - // Iterate through the FieldType to create the corresponding Field. - for field_type in FieldType::iter() { - let field_type: FieldType = field_type; + let mut grid_builder = DatabaseBuilder::new(); + // Iterate through the FieldType to create the corresponding Field. + for field_type in FieldType::iter() { + let field_type: FieldType = field_type; - // The - match field_type { - FieldType::RichText => { - let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) - .name("Name") - .visibility(true) - .primary(true) - .build(); - grid_builder.add_field(text_field); - } - FieldType::Number => { - // Number - let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); - let number_field = FieldBuilder::new(number).name("Price").visibility(true).build(); - grid_builder.add_field(number_field); - } - FieldType::DateTime => { - // Date - let date = DateTypeOptionBuilder::default() - .date_format(DateFormat::US) - .time_format(TimeFormat::TwentyFourHour); - let date_field = FieldBuilder::new(date).name("Time").visibility(true).build(); - grid_builder.add_field(date_field); - } - FieldType::SingleSelect => { - // Single Select - let single_select = SingleSelectTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(COMPLETED)) - .add_option(SelectOptionPB::new(PLANNED)) - .add_option(SelectOptionPB::new(PAUSED)); - let single_select_field = FieldBuilder::new(single_select).name("Status").visibility(true).build(); - grid_builder.add_field(single_select_field); - } - FieldType::MultiSelect => { - // MultiSelect - let multi_select = MultiSelectTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(GOOGLE)) - .add_option(SelectOptionPB::new(FACEBOOK)) - .add_option(SelectOptionPB::new(TWITTER)); - let multi_select_field = FieldBuilder::new(multi_select) - .name("Platform") - .visibility(true) - .build(); - grid_builder.add_field(multi_select_field); - } - FieldType::Checkbox => { - // Checkbox - let checkbox = CheckboxTypeOptionBuilder::default(); - let checkbox_field = FieldBuilder::new(checkbox).name("is urgent").visibility(true).build(); - grid_builder.add_field(checkbox_field); - } + // The + match field_type { + FieldType::RichText => { + let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) + .name("Name") + .visibility(true) + .primary(true) + .build(); + grid_builder.add_field(text_field); + }, + FieldType::Number => { + // Number + let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); + let number_field = FieldBuilder::new(number) + .name("Price") + .visibility(true) + .build(); + grid_builder.add_field(number_field); + }, + FieldType::DateTime => { + // Date + let date = DateTypeOptionBuilder::default() + .date_format(DateFormat::US) + .time_format(TimeFormat::TwentyFourHour); + let date_field = FieldBuilder::new(date) + .name("Time") + .visibility(true) + .build(); + grid_builder.add_field(date_field); + }, + FieldType::SingleSelect => { + // Single Select + let single_select = SingleSelectTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(COMPLETED)) + .add_option(SelectOptionPB::new(PLANNED)) + .add_option(SelectOptionPB::new(PAUSED)); + let single_select_field = FieldBuilder::new(single_select) + .name("Status") + .visibility(true) + .build(); + grid_builder.add_field(single_select_field); + }, + FieldType::MultiSelect => { + // MultiSelect + let multi_select = MultiSelectTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(GOOGLE)) + .add_option(SelectOptionPB::new(FACEBOOK)) + .add_option(SelectOptionPB::new(TWITTER)); + let multi_select_field = FieldBuilder::new(multi_select) + .name("Platform") + .visibility(true) + .build(); + grid_builder.add_field(multi_select_field); + }, + FieldType::Checkbox => { + // Checkbox + let checkbox = CheckboxTypeOptionBuilder::default(); + let checkbox_field = FieldBuilder::new(checkbox) + .name("is urgent") + .visibility(true) + .build(); + grid_builder.add_field(checkbox_field); + }, + FieldType::URL => { + // URL + let url = URLTypeOptionBuilder::default(); + let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); + grid_builder.add_field(url_field); + }, + FieldType::Checklist => { + let checklist = ChecklistTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(FIRST_THING)) + .add_option(SelectOptionPB::new(SECOND_THING)) + .add_option(SelectOptionPB::new(THIRD_THING)); + let checklist_field = FieldBuilder::new(checklist) + .name("TODO") + .visibility(true) + .build(); + grid_builder.add_field(checklist_field); + }, + } + } + + for i in 0..6 { + let block_id = grid_builder.block_id().to_owned(); + let field_revs = grid_builder.field_revs(); + let mut row_builder = GridRowTestBuilder::new(&block_id, field_revs); + match i { + 0 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("A"), + FieldType::Number => row_builder.insert_number_cell("1"), + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), + FieldType::Checklist => row_builder.insert_checklist_cell(|options| options), + FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), FieldType::URL => { - // URL - let url = URLTypeOptionBuilder::default(); - let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); - grid_builder.add_field(url_field); - } - FieldType::Checklist => { - let checklist = ChecklistTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(FIRST_THING)) - .add_option(SelectOptionPB::new(SECOND_THING)) - .add_option(SelectOptionPB::new(THIRD_THING)); - let checklist_field = FieldBuilder::new(checklist).name("TODO").visibility(true).build(); - grid_builder.add_field(checklist_field); - } + row_builder.insert_url_cell("AppFlowy website - https://www.appflowy.io") + }, + _ => "".to_owned(), + }; } + }, + 1 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell(""), + FieldType::Number => row_builder.insert_number_cell("2"), + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(1)]), + FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), + _ => "".to_owned(), + }; + } + }, + 2 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("C"), + FieldType::Number => row_builder.insert_number_cell("3"), + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(0)) + }, + FieldType::MultiSelect => { + row_builder.insert_multi_select_cell(|mut options| vec![options.remove(1)]) + }, + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), + _ => "".to_owned(), + }; + } + }, + 3 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("DA"), + FieldType::Number => row_builder.insert_number_cell("4"), + FieldType::DateTime => row_builder.insert_date_cell("1668704685"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(0)) + }, + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), + _ => "".to_owned(), + }; + } + }, + 4 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("AE"), + FieldType::Number => row_builder.insert_number_cell(""), + FieldType::DateTime => row_builder.insert_date_cell("1668359085"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(1)) + }, + + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), + _ => "".to_owned(), + }; + } + }, + 5 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("AE"), + FieldType::Number => row_builder.insert_number_cell("5"), + FieldType::DateTime => row_builder.insert_date_cell("1671938394"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(1)) + }, + FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), + _ => "".to_owned(), + }; + } + }, + _ => {}, } - for i in 0..6 { - let block_id = grid_builder.block_id().to_owned(); - let field_revs = grid_builder.field_revs(); - let mut row_builder = GridRowTestBuilder::new(&block_id, field_revs); - match i { - 0 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("A"), - FieldType::Number => row_builder.insert_number_cell("1"), - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::MultiSelect => row_builder - .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), - FieldType::Checklist => row_builder.insert_checklist_cell(|options| options), - FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), - FieldType::URL => row_builder.insert_url_cell("AppFlowy website - https://www.appflowy.io"), - _ => "".to_owned(), - }; - } - } - 1 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell(""), - FieldType::Number => row_builder.insert_number_cell("2"), - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::MultiSelect => row_builder - .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(1)]), - FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), - _ => "".to_owned(), - }; - } - } - 2 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("C"), - FieldType::Number => row_builder.insert_number_cell("3"), - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(0)) - } - FieldType::MultiSelect => { - row_builder.insert_multi_select_cell(|mut options| vec![options.remove(1)]) - } - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - _ => "".to_owned(), - }; - } - } - 3 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("DA"), - FieldType::Number => row_builder.insert_number_cell("4"), - FieldType::DateTime => row_builder.insert_date_cell("1668704685"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(0)) - } - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - _ => "".to_owned(), - }; - } - } - 4 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("AE"), - FieldType::Number => row_builder.insert_number_cell(""), - FieldType::DateTime => row_builder.insert_date_cell("1668359085"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(1)) - } - - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - _ => "".to_owned(), - }; - } - } - 5 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("AE"), - FieldType::Number => row_builder.insert_number_cell("5"), - FieldType::DateTime => row_builder.insert_date_cell("1671938394"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(1)) - } - FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), - _ => "".to_owned(), - }; - } - } - _ => {} - } - - let row_rev = row_builder.build(); - grid_builder.add_row(row_rev); - } - grid_builder.build() + let row_rev = row_builder.build(); + grid_builder.add_row(row_rev); + } + grid_builder.build() } // Kanban board unit test mock data fn make_test_board() -> BuildDatabaseContext { - let mut grid_builder = DatabaseBuilder::new(); - // Iterate through the FieldType to create the corresponding Field. - for field_type in FieldType::iter() { - let field_type: FieldType = field_type; + let mut grid_builder = DatabaseBuilder::new(); + // Iterate through the FieldType to create the corresponding Field. + for field_type in FieldType::iter() { + let field_type: FieldType = field_type; - // The - match field_type { - FieldType::RichText => { - let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) - .name("Name") - .visibility(true) - .primary(true) - .build(); - grid_builder.add_field(text_field); - } - FieldType::Number => { - // Number - let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); - let number_field = FieldBuilder::new(number).name("Price").visibility(true).build(); - grid_builder.add_field(number_field); - } - FieldType::DateTime => { - // Date - let date = DateTypeOptionBuilder::default() - .date_format(DateFormat::US) - .time_format(TimeFormat::TwentyFourHour); - let date_field = FieldBuilder::new(date).name("Time").visibility(true).build(); - grid_builder.add_field(date_field); - } + // The + match field_type { + FieldType::RichText => { + let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) + .name("Name") + .visibility(true) + .primary(true) + .build(); + grid_builder.add_field(text_field); + }, + FieldType::Number => { + // Number + let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); + let number_field = FieldBuilder::new(number) + .name("Price") + .visibility(true) + .build(); + grid_builder.add_field(number_field); + }, + FieldType::DateTime => { + // Date + let date = DateTypeOptionBuilder::default() + .date_format(DateFormat::US) + .time_format(TimeFormat::TwentyFourHour); + let date_field = FieldBuilder::new(date) + .name("Time") + .visibility(true) + .build(); + grid_builder.add_field(date_field); + }, + FieldType::SingleSelect => { + // Single Select + let single_select = SingleSelectTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(COMPLETED)) + .add_option(SelectOptionPB::new(PLANNED)) + .add_option(SelectOptionPB::new(PAUSED)); + let single_select_field = FieldBuilder::new(single_select) + .name("Status") + .visibility(true) + .build(); + grid_builder.add_field(single_select_field); + }, + FieldType::MultiSelect => { + // MultiSelect + let multi_select = MultiSelectTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(GOOGLE)) + .add_option(SelectOptionPB::new(FACEBOOK)) + .add_option(SelectOptionPB::new(TWITTER)); + let multi_select_field = FieldBuilder::new(multi_select) + .name("Platform") + .visibility(true) + .build(); + grid_builder.add_field(multi_select_field); + }, + FieldType::Checkbox => { + // Checkbox + let checkbox = CheckboxTypeOptionBuilder::default(); + let checkbox_field = FieldBuilder::new(checkbox) + .name("is urgent") + .visibility(true) + .build(); + grid_builder.add_field(checkbox_field); + }, + FieldType::URL => { + // URL + let url = URLTypeOptionBuilder::default(); + let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); + grid_builder.add_field(url_field); + }, + FieldType::Checklist => { + let checklist = ChecklistTypeOptionBuilder::default() + .add_option(SelectOptionPB::new(FIRST_THING)) + .add_option(SelectOptionPB::new(SECOND_THING)) + .add_option(SelectOptionPB::new(THIRD_THING)); + let checklist_field = FieldBuilder::new(checklist) + .name("TODO") + .visibility(true) + .build(); + grid_builder.add_field(checklist_field); + }, + } + } + + // We have many assumptions base on the number of the rows, so do not change the number of the loop. + for i in 0..5 { + let block_id = grid_builder.block_id().to_owned(); + let field_revs = grid_builder.field_revs(); + let mut row_builder = GridRowTestBuilder::new(&block_id, field_revs); + match i { + 0 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("A"), + FieldType::Number => row_builder.insert_number_cell("1"), + // 1647251762 => Mar 14,2022 + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), FieldType::SingleSelect => { - // Single Select - let single_select = SingleSelectTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(COMPLETED)) - .add_option(SelectOptionPB::new(PLANNED)) - .add_option(SelectOptionPB::new(PAUSED)); - let single_select_field = FieldBuilder::new(single_select).name("Status").visibility(true).build(); - grid_builder.add_field(single_select_field); - } + row_builder.insert_single_select_cell(|mut options| options.remove(0)) + }, + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), + FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), + FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"), + _ => "".to_owned(), + }; + } + }, + 1 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("B"), + FieldType::Number => row_builder.insert_number_cell("2"), + // 1647251762 => Mar 14,2022 + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(0)) + }, + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), + FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), + _ => "".to_owned(), + }; + } + }, + 2 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("C"), + FieldType::Number => row_builder.insert_number_cell("3"), + // 1647251762 => Mar 14,2022 + FieldType::DateTime => row_builder.insert_date_cell("1647251762"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(1)) + }, FieldType::MultiSelect => { - // MultiSelect - let multi_select = MultiSelectTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(GOOGLE)) - .add_option(SelectOptionPB::new(FACEBOOK)) - .add_option(SelectOptionPB::new(TWITTER)); - let multi_select_field = FieldBuilder::new(multi_select) - .name("Platform") - .visibility(true) - .build(); - grid_builder.add_field(multi_select_field); - } - FieldType::Checkbox => { - // Checkbox - let checkbox = CheckboxTypeOptionBuilder::default(); - let checkbox_field = FieldBuilder::new(checkbox).name("is urgent").visibility(true).build(); - grid_builder.add_field(checkbox_field); - } + row_builder.insert_multi_select_cell(|mut options| vec![options.remove(0)]) + }, + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), FieldType::URL => { - // URL - let url = URLTypeOptionBuilder::default(); - let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); - grid_builder.add_field(url_field); - } - FieldType::Checklist => { - let checklist = ChecklistTypeOptionBuilder::default() - .add_option(SelectOptionPB::new(FIRST_THING)) - .add_option(SelectOptionPB::new(SECOND_THING)) - .add_option(SelectOptionPB::new(THIRD_THING)); - let checklist_field = FieldBuilder::new(checklist).name("TODO").visibility(true).build(); - grid_builder.add_field(checklist_field); - } + row_builder.insert_url_cell("https://github.com/AppFlowy-IO/AppFlowy") + }, + _ => "".to_owned(), + }; } + }, + 3 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("DA"), + FieldType::Number => row_builder.insert_number_cell("4"), + FieldType::DateTime => row_builder.insert_date_cell("1668704685"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(1)) + }, + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), + FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"), + _ => "".to_owned(), + }; + } + }, + 4 => { + for field_type in FieldType::iter() { + match field_type { + FieldType::RichText => row_builder.insert_text_cell("AE"), + FieldType::Number => row_builder.insert_number_cell(""), + FieldType::DateTime => row_builder.insert_date_cell("1668359085"), + FieldType::SingleSelect => { + row_builder.insert_single_select_cell(|mut options| options.remove(2)) + }, + + FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), + _ => "".to_owned(), + }; + } + }, + _ => {}, } - // We have many assumptions base on the number of the rows, so do not change the number of the loop. - for i in 0..5 { - let block_id = grid_builder.block_id().to_owned(); - let field_revs = grid_builder.field_revs(); - let mut row_builder = GridRowTestBuilder::new(&block_id, field_revs); - match i { - 0 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("A"), - FieldType::Number => row_builder.insert_number_cell("1"), - // 1647251762 => Mar 14,2022 - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(0)) - } - FieldType::MultiSelect => row_builder - .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), - FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), - FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"), - _ => "".to_owned(), - }; - } - } - 1 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("B"), - FieldType::Number => row_builder.insert_number_cell("2"), - // 1647251762 => Mar 14,2022 - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(0)) - } - FieldType::MultiSelect => row_builder - .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), - FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), - _ => "".to_owned(), - }; - } - } - 2 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("C"), - FieldType::Number => row_builder.insert_number_cell("3"), - // 1647251762 => Mar 14,2022 - FieldType::DateTime => row_builder.insert_date_cell("1647251762"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(1)) - } - FieldType::MultiSelect => { - row_builder.insert_multi_select_cell(|mut options| vec![options.remove(0)]) - } - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - FieldType::URL => row_builder.insert_url_cell("https://github.com/AppFlowy-IO/AppFlowy"), - _ => "".to_owned(), - }; - } - } - 3 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("DA"), - FieldType::Number => row_builder.insert_number_cell("4"), - FieldType::DateTime => row_builder.insert_date_cell("1668704685"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(1)) - } - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"), - _ => "".to_owned(), - }; - } - } - 4 => { - for field_type in FieldType::iter() { - match field_type { - FieldType::RichText => row_builder.insert_text_cell("AE"), - FieldType::Number => row_builder.insert_number_cell(""), - FieldType::DateTime => row_builder.insert_date_cell("1668359085"), - FieldType::SingleSelect => { - row_builder.insert_single_select_cell(|mut options| options.remove(2)) - } - - FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), - _ => "".to_owned(), - }; - } - } - _ => {} - } - - let row_rev = row_builder.build(); - grid_builder.add_row(row_rev); - } - grid_builder.build() + let row_rev = row_builder.build(); + grid_builder.add_row(row_rev); + } + grid_builder.build() } // Calendar unit test mock data fn make_test_calendar() -> BuildDatabaseContext { - todo!() + todo!() } diff --git a/frontend/rust-lib/flowy-database/tests/grid/grid_test.rs b/frontend/rust-lib/flowy-database/tests/grid/grid_test.rs index 0624c03b39..5ece56b54c 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/grid_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/grid_test.rs @@ -1,381 +1,418 @@ use crate::grid::script::EditorScript::*; use crate::grid::script::*; use chrono::NaiveDateTime; -use flowy_database::services::field::{ - DateCellContentChangeset, DateCellData, MultiSelectTypeOptionPB, SelectOption, SelectOptionCellContentChangeset, - SingleSelectTypeOption, SELECTION_IDS_SEPARATOR, +use database_model::entities::{ + CellChangeset, FieldChangesetParams, FieldType, GridBlockInfoChangeset, GridBlockMetaSnapshot, + RowMetaChangeset, TypeOptionDataFormat, }; -use flowy_database::services::row::{decode_cell_data_from_type_option_cell_data, CreateRowMetaBuilder}; -use grid_model::entities::{ - CellChangeset, FieldChangesetParams, FieldType, GridBlockInfoChangeset, GridBlockMetaSnapshot, RowMetaChangeset, - TypeOptionDataFormat, +use flowy_database::services::field::{ + DateCellContentChangeset, DateCellData, MultiSelectTypeOptionPB, SelectOption, + SelectOptionCellContentChangeset, SingleSelectTypeOption, SELECTION_IDS_SEPARATOR, +}; +use flowy_database::services::row::{ + decode_cell_data_from_type_option_cell_data, CreateRowMetaBuilder, }; #[tokio::test] async fn grid_create_field() { - let mut test = GridEditorTest::new().await; - let (text_field_params, text_field_meta) = create_text_field(&test.grid_id); - let (single_select_params, single_select_field) = create_single_select_field(&test.grid_id); - let scripts = vec![ - CreateField { - params: text_field_params, - }, - AssertFieldEqual { - field_index: test.field_count, - field_meta: text_field_meta, - }, - ]; - test.run_scripts(scripts).await; + let mut test = GridEditorTest::new().await; + let (text_field_params, text_field_meta) = create_text_field(&test.grid_id); + let (single_select_params, single_select_field) = create_single_select_field(&test.grid_id); + let scripts = vec![ + CreateField { + params: text_field_params, + }, + AssertFieldEqual { + field_index: test.field_count, + field_meta: text_field_meta, + }, + ]; + test.run_scripts(scripts).await; - let scripts = vec![ - CreateField { - params: single_select_params, - }, - AssertFieldEqual { - field_index: test.field_count, - field_meta: single_select_field, - }, - ]; - test.run_scripts(scripts).await; + let scripts = vec![ + CreateField { + params: single_select_params, + }, + AssertFieldEqual { + field_index: test.field_count, + field_meta: single_select_field, + }, + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_create_duplicate_field() { - let mut test = GridEditorTest::new().await; - let (params, _) = create_text_field(&test.grid_id); - let field_count = test.field_count; - let expected_field_count = field_count + 1; - let scripts = vec![ - CreateField { params: params.clone() }, - CreateField { params }, - AssertFieldCount(expected_field_count), - ]; - test.run_scripts(scripts).await; + let mut test = GridEditorTest::new().await; + let (params, _) = create_text_field(&test.grid_id); + let field_count = test.field_count; + let expected_field_count = field_count + 1; + let scripts = vec![ + CreateField { + params: params.clone(), + }, + CreateField { params }, + AssertFieldCount(expected_field_count), + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_update_field_with_empty_change() { - let mut test = GridEditorTest::new().await; - let (params, field_meta) = create_single_select_field(&test.grid_id); - let changeset = FieldChangesetParams { - field_id: field_meta.id.clone(), - grid_id: test.grid_id.clone(), - ..Default::default() - }; + let mut test = GridEditorTest::new().await; + let (params, field_meta) = create_single_select_field(&test.grid_id); + let changeset = FieldChangesetParams { + field_id: field_meta.id.clone(), + grid_id: test.grid_id.clone(), + ..Default::default() + }; - let scripts = vec![ - CreateField { params }, - UpdateField { changeset }, - AssertFieldEqual { - field_index: test.field_count, - field_meta, - }, - ]; - test.run_scripts(scripts).await; + let scripts = vec![ + CreateField { params }, + UpdateField { changeset }, + AssertFieldEqual { + field_index: test.field_count, + field_meta, + }, + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_update_field() { - let mut test = GridEditorTest::new().await; - let (single_select_params, single_select_field) = create_single_select_field(&test.grid_id); - let mut cloned_field = single_select_field.clone(); + let mut test = GridEditorTest::new().await; + let (single_select_params, single_select_field) = create_single_select_field(&test.grid_id); + let mut cloned_field = single_select_field.clone(); - let mut single_select_type_option = SingleSelectTypeOption::from(&single_select_field); - single_select_type_option.options.push(SelectOption::new("Unknown")); - let changeset = FieldChangesetParams { - field_id: single_select_field.id.clone(), - grid_id: test.grid_id.clone(), - frozen: Some(true), - width: Some(1000), - type_option_data: Some(single_select_type_option.protobuf_bytes().to_vec()), - ..Default::default() - }; + let mut single_select_type_option = SingleSelectTypeOption::from(&single_select_field); + single_select_type_option + .options + .push(SelectOption::new("Unknown")); + let changeset = FieldChangesetParams { + field_id: single_select_field.id.clone(), + grid_id: test.grid_id.clone(), + frozen: Some(true), + width: Some(1000), + type_option_data: Some(single_select_type_option.protobuf_bytes().to_vec()), + ..Default::default() + }; - cloned_field.frozen = true; - cloned_field.width = 1000; - cloned_field.insert_type_option_entry(&single_select_type_option); + cloned_field.frozen = true; + cloned_field.width = 1000; + cloned_field.insert_type_option_entry(&single_select_type_option); - let scripts = vec![ - CreateField { - params: single_select_params, - }, - UpdateField { changeset }, - AssertFieldEqual { - field_index: test.field_count, - field_meta: cloned_field, - }, - ]; - test.run_scripts(scripts).await; + let scripts = vec![ + CreateField { + params: single_select_params, + }, + UpdateField { changeset }, + AssertFieldEqual { + field_index: test.field_count, + field_meta: cloned_field, + }, + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_delete_field() { - let mut test = GridEditorTest::new().await; - let expected_field_count = test.field_count; - let (text_params, text_field) = create_text_field(&test.grid_id); - let scripts = vec![ - CreateField { params: text_params }, - DeleteField { field_meta: text_field }, - AssertFieldCount(expected_field_count), - ]; - test.run_scripts(scripts).await; + let mut test = GridEditorTest::new().await; + let expected_field_count = test.field_count; + let (text_params, text_field) = create_text_field(&test.grid_id); + let scripts = vec![ + CreateField { + params: text_params, + }, + DeleteField { + field_meta: text_field, + }, + AssertFieldCount(expected_field_count), + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_create_block() { - let grid_block = GridBlockMetaSnapshot::new(); - let scripts = vec![ - AssertBlockCount(1), - CreateBlock { block: grid_block }, - AssertBlockCount(2), - ]; - GridEditorTest::new().await.run_scripts(scripts).await; + let grid_block = GridBlockMetaSnapshot::new(); + let scripts = vec![ + AssertBlockCount(1), + CreateBlock { block: grid_block }, + AssertBlockCount(2), + ]; + GridEditorTest::new().await.run_scripts(scripts).await; } #[tokio::test] async fn grid_update_block() { - let grid_block = GridBlockMetaSnapshot::new(); - let mut cloned_grid_block = grid_block.clone(); - let changeset = GridBlockInfoChangeset { - block_id: grid_block.block_id.clone(), - start_row_index: Some(2), - row_count: Some(10), - }; + let grid_block = GridBlockMetaSnapshot::new(); + let mut cloned_grid_block = grid_block.clone(); + let changeset = GridBlockInfoChangeset { + block_id: grid_block.block_id.clone(), + start_row_index: Some(2), + row_count: Some(10), + }; - cloned_grid_block.start_row_index = 2; - cloned_grid_block.row_count = 10; + cloned_grid_block.start_row_index = 2; + cloned_grid_block.row_count = 10; - let scripts = vec![ - AssertBlockCount(1), - CreateBlock { block: grid_block }, - UpdateBlock { changeset }, - AssertBlockCount(2), - AssertBlockEqual { - block_index: 1, - block: cloned_grid_block, - }, - ]; - GridEditorTest::new().await.run_scripts(scripts).await; + let scripts = vec![ + AssertBlockCount(1), + CreateBlock { block: grid_block }, + UpdateBlock { changeset }, + AssertBlockCount(2), + AssertBlockEqual { + block_index: 1, + block: cloned_grid_block, + }, + ]; + GridEditorTest::new().await.run_scripts(scripts).await; } #[tokio::test] async fn grid_create_row() { - let scripts = vec![AssertRowCount(3), CreateEmptyRow, CreateEmptyRow, AssertRowCount(5)]; - GridEditorTest::new().await.run_scripts(scripts).await; + let scripts = vec![ + AssertRowCount(3), + CreateEmptyRow, + CreateEmptyRow, + AssertRowCount(5), + ]; + GridEditorTest::new().await.run_scripts(scripts).await; } #[tokio::test] async fn grid_create_row2() { - let mut test = GridEditorTest::new().await; - let create_row_context = CreateRowMetaBuilder::new(&test.field_metas).build(); - let scripts = vec![ - AssertRowCount(3), - CreateRow { - context: create_row_context, - }, - AssertRowCount(4), - ]; - test.run_scripts(scripts).await; + let mut test = GridEditorTest::new().await; + let create_row_context = CreateRowMetaBuilder::new(&test.field_metas).build(); + let scripts = vec![ + AssertRowCount(3), + CreateRow { + context: create_row_context, + }, + AssertRowCount(4), + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_update_row() { - let mut test = GridEditorTest::new().await; - let context = CreateRowMetaBuilder::new(&test.field_metas).build(); - let changeset = RowMetaChangeset { - row_id: context.row_id.clone(), - height: None, - visibility: None, - cell_by_field_id: Default::default(), - }; + let mut test = GridEditorTest::new().await; + let context = CreateRowMetaBuilder::new(&test.field_metas).build(); + let changeset = RowMetaChangeset { + row_id: context.row_id.clone(), + height: None, + visibility: None, + cell_by_field_id: Default::default(), + }; - let scripts = vec![ - AssertRowCount(3), - CreateRow { context }, - UpdateRow { - changeset: changeset.clone(), - }, - AssertRow { changeset }, - AssertRowCount(4), - ]; - test.run_scripts(scripts).await; + let scripts = vec![ + AssertRowCount(3), + CreateRow { context }, + UpdateRow { + changeset: changeset.clone(), + }, + AssertRow { changeset }, + AssertRowCount(4), + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_delete_row() { - let mut test = GridEditorTest::new().await; - let context_1 = CreateRowMetaBuilder::new(&test.field_metas).build(); - let context_2 = CreateRowMetaBuilder::new(&test.field_metas).build(); - let row_ids = vec![context_1.row_id.clone(), context_2.row_id.clone()]; - let scripts = vec![ - AssertRowCount(3), - CreateRow { context: context_1 }, - CreateRow { context: context_2 }, - AssertBlockCount(1), - AssertBlock { - block_index: 0, - row_count: 5, - start_row_index: 0, - }, - DeleteRow { row_ids }, - AssertBlock { - block_index: 0, - row_count: 3, - start_row_index: 0, - }, - ]; - test.run_scripts(scripts).await; + let mut test = GridEditorTest::new().await; + let context_1 = CreateRowMetaBuilder::new(&test.field_metas).build(); + let context_2 = CreateRowMetaBuilder::new(&test.field_metas).build(); + let row_ids = vec![context_1.row_id.clone(), context_2.row_id.clone()]; + let scripts = vec![ + AssertRowCount(3), + CreateRow { context: context_1 }, + CreateRow { context: context_2 }, + AssertBlockCount(1), + AssertBlock { + block_index: 0, + row_count: 5, + start_row_index: 0, + }, + DeleteRow { row_ids }, + AssertBlock { + block_index: 0, + row_count: 3, + start_row_index: 0, + }, + ]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_row_add_cells_test() { - let mut test = GridEditorTest::new().await; - let mut builder = CreateRowMetaBuilder::new(&test.field_metas); - for field in &test.field_metas { - match field.field_type { - FieldType::RichText => { - builder.add_cell(&field.id, "hello world".to_owned()).unwrap(); - } - FieldType::Number => { - builder.add_cell(&field.id, "18,443".to_owned()).unwrap(); - } - FieldType::DateTime => { - builder - .add_cell(&field.id, make_date_cell_string("1647251762")) - .unwrap(); - } - FieldType::SingleSelect => { - let type_option = SingleSelectTypeOption::from(field); - let option = type_option.options.first().unwrap(); - builder.add_select_option_cell(&field.id, option.id.clone()).unwrap(); - } - FieldType::MultiSelect => { - let type_option = MultiSelectTypeOptionPB::from(field); - let ops_ids = type_option - .options - .iter() - .map(|option| option.id.clone()) - .collect::>() - .join(SELECTION_IDS_SEPARATOR); - builder.add_select_option_cell(&field.id, ops_ids).unwrap(); - } - FieldType::Checkbox => { - builder.add_cell(&field.id, "false".to_string()).unwrap(); - } - FieldType::URL => { - builder.add_cell(&field.id, "1".to_string()).unwrap(); - } - } + let mut test = GridEditorTest::new().await; + let mut builder = CreateRowMetaBuilder::new(&test.field_metas); + for field in &test.field_metas { + match field.field_type { + FieldType::RichText => { + builder + .add_cell(&field.id, "hello world".to_owned()) + .unwrap(); + }, + FieldType::Number => { + builder.add_cell(&field.id, "18,443".to_owned()).unwrap(); + }, + FieldType::DateTime => { + builder + .add_cell(&field.id, make_date_cell_string("1647251762")) + .unwrap(); + }, + FieldType::SingleSelect => { + let type_option = SingleSelectTypeOption::from(field); + let option = type_option.options.first().unwrap(); + builder + .add_select_option_cell(&field.id, option.id.clone()) + .unwrap(); + }, + FieldType::MultiSelect => { + let type_option = MultiSelectTypeOptionPB::from(field); + let ops_ids = type_option + .options + .iter() + .map(|option| option.id.clone()) + .collect::>() + .join(SELECTION_IDS_SEPARATOR); + builder.add_select_option_cell(&field.id, ops_ids).unwrap(); + }, + FieldType::Checkbox => { + builder.add_cell(&field.id, "false".to_string()).unwrap(); + }, + FieldType::URL => { + builder.add_cell(&field.id, "1".to_string()).unwrap(); + }, } - let context = builder.build(); - let scripts = vec![CreateRow { context }, AssertGridMetaPad]; - test.run_scripts(scripts).await; + } + let context = builder.build(); + let scripts = vec![CreateRow { context }, AssertGridMetaPad]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_row_add_date_cell_test() { - let mut test = GridEditorTest::new().await; - let mut builder = CreateRowMetaBuilder::new(&test.field_metas); - let mut date_field = None; - let timestamp = 1647390674; - for field in &test.field_metas { - if field.field_type == FieldType::DateTime { - date_field = Some(field.clone()); - NaiveDateTime::from_timestamp(123, 0); - // The data should not be empty - assert!(builder.add_cell(&field.id, "".to_string()).is_err()); - assert!(builder.add_cell(&field.id, make_date_cell_string("123")).is_ok()); - assert!(builder - .add_cell(&field.id, make_date_cell_string(×tamp.to_string())) - .is_ok()); - } + let mut test = GridEditorTest::new().await; + let mut builder = CreateRowMetaBuilder::new(&test.field_metas); + let mut date_field = None; + let timestamp = 1647390674; + for field in &test.field_metas { + if field.field_type == FieldType::DateTime { + date_field = Some(field.clone()); + NaiveDateTime::from_timestamp(123, 0); + // The data should not be empty + assert!(builder.add_cell(&field.id, "".to_string()).is_err()); + assert!(builder + .add_cell(&field.id, make_date_cell_string("123")) + .is_ok()); + assert!(builder + .add_cell(&field.id, make_date_cell_string(×tamp.to_string())) + .is_ok()); } - let context = builder.build(); - let date_field = date_field.unwrap(); - let cell_data = context.cell_by_field_id.get(&date_field.id).unwrap().clone(); - assert_eq!( - decode_cell_data_from_type_option_cell_data(cell_data.data.clone(), &date_field, &date_field.field_type) - .parse::() - .unwrap() - .date, - "2022/03/16", - ); - let scripts = vec![CreateRow { context }]; - test.run_scripts(scripts).await; + } + let context = builder.build(); + let date_field = date_field.unwrap(); + let cell_data = context + .cell_by_field_id + .get(&date_field.id) + .unwrap() + .clone(); + assert_eq!( + decode_cell_data_from_type_option_cell_data( + cell_data.data.clone(), + &date_field, + &date_field.field_type + ) + .parse::() + .unwrap() + .date, + "2022/03/16", + ); + let scripts = vec![CreateRow { context }]; + test.run_scripts(scripts).await; } #[tokio::test] async fn grid_cell_update() { - let mut test = GridEditorTest::new().await; - let field_metas = &test.field_metas; - let row_metas = &test.row_metas; - let grid_blocks = &test.grid_blocks; - assert_eq!(row_metas.len(), 3); - assert_eq!(grid_blocks.len(), 1); + let mut test = GridEditorTest::new().await; + let field_metas = &test.field_metas; + let row_metas = &test.row_metas; + let grid_blocks = &test.grid_blocks; + assert_eq!(row_metas.len(), 3); + assert_eq!(grid_blocks.len(), 1); - let block_id = &grid_blocks.first().unwrap().block_id; - let mut scripts = vec![]; - for (index, row_meta) in row_metas.iter().enumerate() { - for field_meta in field_metas { - if index == 0 { - let data = match field_meta.field_type { - FieldType::RichText => "".to_string(), - FieldType::Number => "123".to_string(), - FieldType::DateTime => make_date_cell_string("123"), - FieldType::SingleSelect => { - let type_option = SingleSelectTypeOption::from(field_meta); - SelectOptionCellContentChangeset::from_insert(&type_option.options.first().unwrap().id).to_str() - } - FieldType::MultiSelect => { - let type_option = MultiSelectTypeOptionPB::from(field_meta); - SelectOptionCellContentChangeset::from_insert(&type_option.options.first().unwrap().id).to_str() - } - FieldType::Checkbox => "1".to_string(), - FieldType::URL => "1".to_string(), - }; + let block_id = &grid_blocks.first().unwrap().block_id; + let mut scripts = vec![]; + for (index, row_meta) in row_metas.iter().enumerate() { + for field_meta in field_metas { + if index == 0 { + let data = match field_meta.field_type { + FieldType::RichText => "".to_string(), + FieldType::Number => "123".to_string(), + FieldType::DateTime => make_date_cell_string("123"), + FieldType::SingleSelect => { + let type_option = SingleSelectTypeOption::from(field_meta); + SelectOptionCellContentChangeset::from_insert(&type_option.options.first().unwrap().id) + .to_str() + }, + FieldType::MultiSelect => { + let type_option = MultiSelectTypeOptionPB::from(field_meta); + SelectOptionCellContentChangeset::from_insert(&type_option.options.first().unwrap().id) + .to_str() + }, + FieldType::Checkbox => "1".to_string(), + FieldType::URL => "1".to_string(), + }; - scripts.push(UpdateCell { - changeset: CellChangeset { - database_id: block_id.to_string(), - row_id: row_meta.id.clone(), - field_id: field_meta.id.clone(), - cell_content_changeset: Some(data), - }, - is_err: false, - }); - } + scripts.push(UpdateCell { + changeset: CellChangeset { + database_id: block_id.to_string(), + row_id: row_meta.id.clone(), + field_id: field_meta.id.clone(), + cell_content_changeset: Some(data), + }, + is_err: false, + }); + } - if index == 1 { - let (data, is_err) = match field_meta.field_type { - FieldType::RichText => ("1".to_string().repeat(10001), true), - FieldType::Number => ("abc".to_string(), true), - FieldType::DateTime => ("abc".to_string(), true), - FieldType::SingleSelect => (SelectOptionCellContentChangeset::from_insert("abc").to_str(), false), - FieldType::MultiSelect => (SelectOptionCellContentChangeset::from_insert("abc").to_str(), false), - FieldType::Checkbox => ("2".to_string(), false), - FieldType::URL => ("2".to_string(), false), - }; + if index == 1 { + let (data, is_err) = match field_meta.field_type { + FieldType::RichText => ("1".to_string().repeat(10001), true), + FieldType::Number => ("abc".to_string(), true), + FieldType::DateTime => ("abc".to_string(), true), + FieldType::SingleSelect => ( + SelectOptionCellContentChangeset::from_insert("abc").to_str(), + false, + ), + FieldType::MultiSelect => ( + SelectOptionCellContentChangeset::from_insert("abc").to_str(), + false, + ), + FieldType::Checkbox => ("2".to_string(), false), + FieldType::URL => ("2".to_string(), false), + }; - scripts.push(UpdateCell { - changeset: CellChangeset { - database_id: block_id.to_string(), - row_id: row_meta.id.clone(), - field_id: field_meta.id.clone(), - cell_content_changeset: Some(data), - }, - is_err, - }); - } - } + scripts.push(UpdateCell { + changeset: CellChangeset { + database_id: block_id.to_string(), + row_id: row_meta.id.clone(), + field_id: field_meta.id.clone(), + cell_content_changeset: Some(data), + }, + is_err, + }); + } } + } - test.run_scripts(scripts).await; + test.run_scripts(scripts).await; } fn make_date_cell_string(s: &str) -> String { - serde_json::to_string(&DateCellContentChangeset { - date: Some(s.to_string()), - time: None, - }) - .unwrap() + serde_json::to_string(&DateCellContentChangeset { + date: Some(s.to_string()), + time: None, + }) + .unwrap() } diff --git a/frontend/rust-lib/flowy-database/tests/grid/group_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/group_test/script.rs index 72e8899f47..cf9bb7d3ef 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/group_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/group_test/script.rs @@ -1,4 +1,5 @@ use crate::grid::database_editor::DatabaseEditorTest; +use database_model::{FieldRevision, RowChangeset}; use flowy_database::entities::{ CreateRowParams, FieldType, GroupPB, LayoutTypePB, MoveGroupParams, MoveGroupRowParams, RowPB, }; @@ -9,7 +10,6 @@ use flowy_database::services::field::{ edit_single_select_type_option, SelectOptionPB, SelectTypeOptionSharedAction, SingleSelectTypeOptionPB, }; -use grid_model::{FieldRevision, RowChangeset}; use std::sync::Arc; pub enum GroupScript { @@ -127,7 +127,7 @@ impl DatabaseGroupTest { GroupScript::CreateRow { group_index } => { let group = self.group_at_index(group_index).await; let params = CreateRowParams { - database_id: self.editor.database_id.clone(), + view_id: self.editor.database_id.clone(), start_row_id: None, group_id: Some(group.group_id.clone()), layout: LayoutTypePB::Board, diff --git a/frontend/rust-lib/flowy-database/tests/grid/mock_data/board_mock_data.rs b/frontend/rust-lib/flowy-database/tests/grid/mock_data/board_mock_data.rs index cceca19fa2..b6beb26ba3 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/mock_data/board_mock_data.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/mock_data/board_mock_data.rs @@ -12,7 +12,7 @@ use flowy_database::entities::*; use flowy_database::services::field::SelectOptionPB; use flowy_database::services::field::*; -use grid_model::*; +use database_model::*; use strum::IntoEnumIterator; diff --git a/frontend/rust-lib/flowy-database/tests/grid/mock_data/calendar_mock_data.rs b/frontend/rust-lib/flowy-database/tests/grid/mock_data/calendar_mock_data.rs index a354dc582b..3aa7c1b984 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/mock_data/calendar_mock_data.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/mock_data/calendar_mock_data.rs @@ -1,4 +1,4 @@ -use grid_model::BuildDatabaseContext; +use database_model::BuildDatabaseContext; // Calendar unit test mock data pub fn make_test_calendar() -> BuildDatabaseContext { diff --git a/frontend/rust-lib/flowy-database/tests/grid/mock_data/grid_mock_data.rs b/frontend/rust-lib/flowy-database/tests/grid/mock_data/grid_mock_data.rs index 44d4af52ef..55a163211b 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/mock_data/grid_mock_data.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/mock_data/grid_mock_data.rs @@ -12,7 +12,7 @@ use flowy_database::entities::*; use flowy_database::services::field::SelectOptionPB; use flowy_database::services::field::*; -use grid_model::*; +use database_model::*; use strum::IntoEnumIterator; diff --git a/frontend/rust-lib/flowy-database/tests/grid/script.rs b/frontend/rust-lib/flowy-database/tests/grid/script.rs index 87107881ce..69511759c0 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/script.rs @@ -1,4 +1,9 @@ use bytes::Bytes; +use database_model::entities::{ + BuildGridContext, CellChangeset, Field, FieldChangesetParams, FieldMeta, FieldOrder, FieldType, + GridBlockInfoChangeset, GridBlockMetaSnapshot, InsertFieldParams, RowMeta, RowMetaChangeset, + RowOrder, TypeOptionDataFormat, +}; use flowy_client_sync::client_grid::GridBuilder; use flowy_database::services::field::*; use flowy_database::services::grid_meta_editor::{GridMetaEditor, GridPadBuilder}; @@ -6,11 +11,6 @@ use flowy_database::services::row::CreateRowMetaPayload; use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS; use flowy_test::helper::ViewTest; use flowy_test::FlowySDKTest; -use grid_model::entities::{ - BuildGridContext, CellChangeset, Field, FieldChangesetParams, FieldMeta, FieldOrder, FieldType, - GridBlockInfoChangeset, GridBlockMetaSnapshot, InsertFieldParams, RowMeta, RowMetaChangeset, RowOrder, - TypeOptionDataFormat, -}; use std::collections::HashMap; use std::sync::Arc; use std::time::Duration; @@ -18,357 +18,408 @@ use strum::EnumCount; use tokio::time::sleep; pub enum EditorScript { - CreateField { - params: InsertFieldParams, - }, - UpdateField { - changeset: FieldChangesetParams, - }, - DeleteField { - field_meta: FieldMeta, - }, - AssertFieldCount(usize), - AssertFieldEqual { - field_index: usize, - field_meta: FieldMeta, - }, - CreateBlock { - block: GridBlockMetaSnapshot, - }, - UpdateBlock { - changeset: GridBlockInfoChangeset, - }, - AssertBlockCount(usize), - AssertBlock { - block_index: usize, - row_count: i32, - start_row_index: i32, - }, - AssertBlockEqual { - block_index: usize, - block: GridBlockMetaSnapshot, - }, - CreateEmptyRow, - CreateRow { - context: CreateRowMetaPayload, - }, - UpdateRow { - changeset: RowMetaChangeset, - }, - AssertRow { - changeset: RowMetaChangeset, - }, - DeleteRow { - row_ids: Vec, - }, - UpdateCell { - changeset: CellChangeset, - is_err: bool, - }, - AssertRowCount(usize), - // AssertRowEqual{ row_index: usize, row: RowMeta}, - AssertGridMetaPad, + CreateField { + params: InsertFieldParams, + }, + UpdateField { + changeset: FieldChangesetParams, + }, + DeleteField { + field_meta: FieldMeta, + }, + AssertFieldCount(usize), + AssertFieldEqual { + field_index: usize, + field_meta: FieldMeta, + }, + CreateBlock { + block: GridBlockMetaSnapshot, + }, + UpdateBlock { + changeset: GridBlockInfoChangeset, + }, + AssertBlockCount(usize), + AssertBlock { + block_index: usize, + row_count: i32, + start_row_index: i32, + }, + AssertBlockEqual { + block_index: usize, + block: GridBlockMetaSnapshot, + }, + CreateEmptyRow, + CreateRow { + context: CreateRowMetaPayload, + }, + UpdateRow { + changeset: RowMetaChangeset, + }, + AssertRow { + changeset: RowMetaChangeset, + }, + DeleteRow { + row_ids: Vec, + }, + UpdateCell { + changeset: CellChangeset, + is_err: bool, + }, + AssertRowCount(usize), + // AssertRowEqual{ row_index: usize, row: RowMeta}, + AssertGridMetaPad, } pub struct GridEditorTest { - pub sdk: FlowySDKTest, - pub grid_id: String, - pub editor: Arc, - pub field_metas: Vec, - pub grid_blocks: Vec, - pub row_metas: Vec>, - pub field_count: usize, + pub sdk: FlowySDKTest, + pub grid_id: String, + pub editor: Arc, + pub field_metas: Vec, + pub grid_blocks: Vec, + pub row_metas: Vec>, + pub field_count: usize, - pub row_order_by_row_id: HashMap, + pub row_order_by_row_id: HashMap, } impl GridEditorTest { - pub async fn new() -> Self { - let sdk = FlowySDKTest::default(); - let _ = sdk.init_user().await; - let build_context = make_template_1_grid(); - let view_data: Bytes = build_context.into(); - let test = ViewTest::new_grid_view(&sdk, view_data.to_vec()).await; - let editor = sdk.grid_manager.open_grid(&test.view.id).await.unwrap(); - let field_metas = editor.get_field_metas::(None).await.unwrap(); - let grid_blocks = editor.get_block_metas().await.unwrap(); - let row_metas = get_row_metas(&editor).await; + pub async fn new() -> Self { + let sdk = FlowySDKTest::default(); + let _ = sdk.init_user().await; + let build_context = make_template_1_grid(); + let view_data: Bytes = build_context.into(); + let test = ViewTest::new_grid_view(&sdk, view_data.to_vec()).await; + let editor = sdk.grid_manager.open_grid(&test.view.id).await.unwrap(); + let field_metas = editor.get_field_metas::(None).await.unwrap(); + let grid_blocks = editor.get_block_metas().await.unwrap(); + let row_metas = get_row_metas(&editor).await; - let grid_id = test.view.id; - Self { - sdk, - grid_id, - editor, - field_metas, - grid_blocks, - row_metas, - field_count: FieldType::COUNT, - row_order_by_row_id: HashMap::default(), + let grid_id = test.view.id; + Self { + sdk, + grid_id, + editor, + field_metas, + grid_blocks, + row_metas, + field_count: FieldType::COUNT, + row_order_by_row_id: HashMap::default(), + } + } + + pub async fn run_scripts(&mut self, scripts: Vec) { + for script in scripts { + self.run_script(script).await; + } + } + + pub async fn run_script(&mut self, script: EditorScript) { + let grid_manager = self.sdk.grid_manager.clone(); + let pool = self.sdk.user_session.db_pool().unwrap(); + let rev_manager = self.editor.rev_manager(); + let _cache = rev_manager.revision_cache().await; + + match script { + EditorScript::CreateField { params } => { + if !self.editor.contain_field(¶ms.field.id).await { + self.field_count += 1; } - } - pub async fn run_scripts(&mut self, scripts: Vec) { - for script in scripts { - self.run_script(script).await; + self.editor.insert_field(params).await.unwrap(); + self.field_metas = self + .editor + .get_field_metas::(None) + .await + .unwrap(); + assert_eq!(self.field_count, self.field_metas.len()); + }, + EditorScript::UpdateField { changeset: change } => { + self.editor.update_field(change).await.unwrap(); + self.field_metas = self + .editor + .get_field_metas::(None) + .await + .unwrap(); + }, + EditorScript::DeleteField { field_meta } => { + if self.editor.contain_field(&field_meta.id).await { + self.field_count -= 1; } - } - pub async fn run_script(&mut self, script: EditorScript) { - let grid_manager = self.sdk.grid_manager.clone(); - let pool = self.sdk.user_session.db_pool().unwrap(); - let rev_manager = self.editor.rev_manager(); - let _cache = rev_manager.revision_cache().await; - - match script { - EditorScript::CreateField { params } => { - if !self.editor.contain_field(¶ms.field.id).await { - self.field_count += 1; - } - - self.editor.insert_field(params).await.unwrap(); - self.field_metas = self.editor.get_field_metas::(None).await.unwrap(); - assert_eq!(self.field_count, self.field_metas.len()); - } - EditorScript::UpdateField { changeset: change } => { - self.editor.update_field(change).await.unwrap(); - self.field_metas = self.editor.get_field_metas::(None).await.unwrap(); - } - EditorScript::DeleteField { field_meta } => { - if self.editor.contain_field(&field_meta.id).await { - self.field_count -= 1; - } - - self.editor.delete_field(&field_meta.id).await.unwrap(); - self.field_metas = self.editor.get_field_metas::(None).await.unwrap(); - assert_eq!(self.field_count, self.field_metas.len()); - } - EditorScript::AssertFieldCount(count) => { - assert_eq!( - self.editor.get_field_metas::(None).await.unwrap().len(), - count - ); - } - EditorScript::AssertFieldEqual { - field_index, - field_meta, - } => { - let field_metas = self.editor.get_field_metas::(None).await.unwrap(); - assert_eq!(field_metas[field_index].clone(), field_meta); - } - EditorScript::CreateBlock { block } => { - self.editor.create_block(block).await.unwrap(); - self.grid_blocks = self.editor.get_block_metas().await.unwrap(); - } - EditorScript::UpdateBlock { changeset: change } => { - self.editor.update_block(change).await.unwrap(); - } - EditorScript::AssertBlockCount(count) => { - assert_eq!(self.editor.get_block_metas().await.unwrap().len(), count); - } - EditorScript::AssertBlock { - block_index, - row_count, - start_row_index, - } => { - assert_eq!(self.grid_blocks[block_index].row_count, row_count); - assert_eq!(self.grid_blocks[block_index].start_row_index, start_row_index); - } - EditorScript::AssertBlockEqual { block_index, block } => { - let blocks = self.editor.get_block_metas().await.unwrap(); - let compared_block = blocks[block_index].clone(); - assert_eq!(compared_block, block); - } - EditorScript::CreateEmptyRow => { - let row_order = self.editor.create_row(None).await.unwrap(); - self.row_order_by_row_id.insert(row_order.row_id.clone(), row_order); - self.row_metas = self.get_row_metas().await; - self.grid_blocks = self.editor.get_block_metas().await.unwrap(); - } - EditorScript::CreateRow { context } => { - let row_orders = self.editor.insert_rows(vec![context]).await.unwrap(); - for row_order in row_orders { - self.row_order_by_row_id.insert(row_order.row_id.clone(), row_order); - } - self.row_metas = self.get_row_metas().await; - self.grid_blocks = self.editor.get_block_metas().await.unwrap(); - } - EditorScript::UpdateRow { changeset: change } => self.editor.update_row(change).await.unwrap(), - EditorScript::DeleteRow { row_ids } => { - let row_orders = row_ids - .into_iter() - .map(|row_id| self.row_order_by_row_id.get(&row_id).unwrap().clone()) - .collect::>(); - - self.editor.delete_rows(row_orders).await.unwrap(); - self.row_metas = self.get_row_metas().await; - self.grid_blocks = self.editor.get_block_metas().await.unwrap(); - } - EditorScript::AssertRow { changeset } => { - let row = self.row_metas.iter().find(|row| row.id == changeset.row_id).unwrap(); - - if let Some(visibility) = changeset.visibility { - assert_eq!(row.visibility, visibility); - } - - if let Some(height) = changeset.height { - assert_eq!(row.height, height); - } - } - EditorScript::UpdateCell { changeset, is_err } => { - let result = self.editor.update_cell(changeset).await; - if is_err { - assert!(result.is_err()) - } else { - let _ = result.unwrap(); - self.row_metas = self.get_row_metas().await; - } - } - EditorScript::AssertRowCount(count) => { - assert_eq!(self.row_metas.len(), count); - } - EditorScript::AssertGridMetaPad => { - sleep(Duration::from_millis(2 * REVISION_WRITE_INTERVAL_IN_MILLIS)).await; - let mut grid_rev_manager = grid_manager.make_grid_rev_manager(&self.grid_id, pool.clone()).unwrap(); - let grid_pad = grid_rev_manager.load::(None).await.unwrap(); - println!("{}", grid_pad.delta_str()); - } + self.editor.delete_field(&field_meta.id).await.unwrap(); + self.field_metas = self + .editor + .get_field_metas::(None) + .await + .unwrap(); + assert_eq!(self.field_count, self.field_metas.len()); + }, + EditorScript::AssertFieldCount(count) => { + assert_eq!( + self + .editor + .get_field_metas::(None) + .await + .unwrap() + .len(), + count + ); + }, + EditorScript::AssertFieldEqual { + field_index, + field_meta, + } => { + let field_metas = self + .editor + .get_field_metas::(None) + .await + .unwrap(); + assert_eq!(field_metas[field_index].clone(), field_meta); + }, + EditorScript::CreateBlock { block } => { + self.editor.create_block(block).await.unwrap(); + self.grid_blocks = self.editor.get_block_metas().await.unwrap(); + }, + EditorScript::UpdateBlock { changeset: change } => { + self.editor.update_block(change).await.unwrap(); + }, + EditorScript::AssertBlockCount(count) => { + assert_eq!(self.editor.get_block_metas().await.unwrap().len(), count); + }, + EditorScript::AssertBlock { + block_index, + row_count, + start_row_index, + } => { + assert_eq!(self.grid_blocks[block_index].row_count, row_count); + assert_eq!( + self.grid_blocks[block_index].start_row_index, + start_row_index + ); + }, + EditorScript::AssertBlockEqual { block_index, block } => { + let blocks = self.editor.get_block_metas().await.unwrap(); + let compared_block = blocks[block_index].clone(); + assert_eq!(compared_block, block); + }, + EditorScript::CreateEmptyRow => { + let row_order = self.editor.create_row(None).await.unwrap(); + self + .row_order_by_row_id + .insert(row_order.row_id.clone(), row_order); + self.row_metas = self.get_row_metas().await; + self.grid_blocks = self.editor.get_block_metas().await.unwrap(); + }, + EditorScript::CreateRow { context } => { + let row_orders = self.editor.insert_rows(vec![context]).await.unwrap(); + for row_order in row_orders { + self + .row_order_by_row_id + .insert(row_order.row_id.clone(), row_order); } - } + self.row_metas = self.get_row_metas().await; + self.grid_blocks = self.editor.get_block_metas().await.unwrap(); + }, + EditorScript::UpdateRow { changeset: change } => { + self.editor.update_row(change).await.unwrap() + }, + EditorScript::DeleteRow { row_ids } => { + let row_orders = row_ids + .into_iter() + .map(|row_id| self.row_order_by_row_id.get(&row_id).unwrap().clone()) + .collect::>(); - async fn get_row_metas(&self) -> Vec> { - get_row_metas(&self.editor).await + self.editor.delete_rows(row_orders).await.unwrap(); + self.row_metas = self.get_row_metas().await; + self.grid_blocks = self.editor.get_block_metas().await.unwrap(); + }, + EditorScript::AssertRow { changeset } => { + let row = self + .row_metas + .iter() + .find(|row| row.id == changeset.row_id) + .unwrap(); + + if let Some(visibility) = changeset.visibility { + assert_eq!(row.visibility, visibility); + } + + if let Some(height) = changeset.height { + assert_eq!(row.height, height); + } + }, + EditorScript::UpdateCell { changeset, is_err } => { + let result = self.editor.update_cell(changeset).await; + if is_err { + assert!(result.is_err()) + } else { + let _ = result.unwrap(); + self.row_metas = self.get_row_metas().await; + } + }, + EditorScript::AssertRowCount(count) => { + assert_eq!(self.row_metas.len(), count); + }, + EditorScript::AssertGridMetaPad => { + sleep(Duration::from_millis(2 * REVISION_WRITE_INTERVAL_IN_MILLIS)).await; + let mut grid_rev_manager = grid_manager + .make_grid_rev_manager(&self.grid_id, pool.clone()) + .unwrap(); + let grid_pad = grid_rev_manager.load::(None).await.unwrap(); + println!("{}", grid_pad.delta_str()); + }, } + } + + async fn get_row_metas(&self) -> Vec> { + get_row_metas(&self.editor).await + } } async fn get_row_metas(editor: &Arc) -> Vec> { - editor - .grid_block_snapshots(None) - .await - .unwrap() - .pop() - .unwrap() - .row_metas + editor + .grid_block_snapshots(None) + .await + .unwrap() + .pop() + .unwrap() + .row_metas } pub fn create_text_field(grid_id: &str) -> (InsertFieldParams, FieldMeta) { - let field_meta = FieldBuilder::new(RichTextTypeOptionBuilder::default()) - .name("Name") - .visibility(true) - .build(); + let field_meta = FieldBuilder::new(RichTextTypeOptionBuilder::default()) + .name("Name") + .visibility(true) + .build(); - let cloned_field_meta = field_meta.clone(); + let cloned_field_meta = field_meta.clone(); - let type_option_data = field_meta - .get_type_option_entry::(&field_meta.field_type) - .unwrap() - .protobuf_bytes() - .to_vec(); + let type_option_data = field_meta + .get_type_option_entry::(&field_meta.field_type) + .unwrap() + .protobuf_bytes() + .to_vec(); - let field = Field { - id: field_meta.id, - name: field_meta.name, - desc: field_meta.desc, - field_type: field_meta.field_type, - frozen: field_meta.frozen, - visibility: field_meta.visibility, - width: field_meta.width, - is_primary: false, - }; + let field = Field { + id: field_meta.id, + name: field_meta.name, + desc: field_meta.desc, + field_type: field_meta.field_type, + frozen: field_meta.frozen, + visibility: field_meta.visibility, + width: field_meta.width, + is_primary: false, + }; - let params = InsertFieldParams { - grid_id: grid_id.to_owned(), - field, - type_option_data, - start_field_id: None, - }; - (params, cloned_field_meta) + let params = InsertFieldParams { + grid_id: grid_id.to_owned(), + field, + type_option_data, + start_field_id: None, + }; + (params, cloned_field_meta) } pub fn create_single_select_field(grid_id: &str) -> (InsertFieldParams, FieldMeta) { - let single_select = SingleSelectTypeOptionBuilder::default() - .option(SelectOption::new("Done")) - .option(SelectOption::new("Progress")); + let single_select = SingleSelectTypeOptionBuilder::default() + .option(SelectOption::new("Done")) + .option(SelectOption::new("Progress")); - let field_meta = FieldBuilder::new(single_select).name("Name").visibility(true).build(); - let cloned_field_meta = field_meta.clone(); - let type_option_data = field_meta - .get_type_option_entry::(&field_meta.field_type) - .unwrap() - .protobuf_bytes() - .to_vec(); + let field_meta = FieldBuilder::new(single_select) + .name("Name") + .visibility(true) + .build(); + let cloned_field_meta = field_meta.clone(); + let type_option_data = field_meta + .get_type_option_entry::(&field_meta.field_type) + .unwrap() + .protobuf_bytes() + .to_vec(); - let field = Field { - id: field_meta.id, - name: field_meta.name, - desc: field_meta.desc, - field_type: field_meta.field_type, - frozen: field_meta.frozen, - visibility: field_meta.visibility, - width: field_meta.width, - is_primary: false, - }; + let field = Field { + id: field_meta.id, + name: field_meta.name, + desc: field_meta.desc, + field_type: field_meta.field_type, + frozen: field_meta.frozen, + visibility: field_meta.visibility, + width: field_meta.width, + is_primary: false, + }; - let params = InsertFieldParams { - grid_id: grid_id.to_owned(), - field, - type_option_data, - start_field_id: None, - }; - (params, cloned_field_meta) + let params = InsertFieldParams { + grid_id: grid_id.to_owned(), + field, + type_option_data, + start_field_id: None, + }; + (params, cloned_field_meta) } fn make_template_1_grid() -> BuildGridContext { - let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) - .name("Name") - .visibility(true) - .build(); + let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default()) + .name("Name") + .visibility(true) + .build(); - // Single Select - let single_select = SingleSelectTypeOptionBuilder::default() - .option(SelectOption::new("Live")) - .option(SelectOption::new("Completed")) - .option(SelectOption::new("Planned")) - .option(SelectOption::new("Paused")); - let single_select_field = FieldBuilder::new(single_select).name("Status").visibility(true).build(); + // Single Select + let single_select = SingleSelectTypeOptionBuilder::default() + .option(SelectOption::new("Live")) + .option(SelectOption::new("Completed")) + .option(SelectOption::new("Planned")) + .option(SelectOption::new("Paused")); + let single_select_field = FieldBuilder::new(single_select) + .name("Status") + .visibility(true) + .build(); - // MultiSelect - let multi_select = MultiSelectTypeOptionBuilder::default() - .option(SelectOption::new("Google")) - .option(SelectOption::new("Facebook")) - .option(SelectOption::new("Twitter")); - let multi_select_field = FieldBuilder::new(multi_select) - .name("Platform") - .visibility(true) - .build(); + // MultiSelect + let multi_select = MultiSelectTypeOptionBuilder::default() + .option(SelectOption::new("Google")) + .option(SelectOption::new("Facebook")) + .option(SelectOption::new("Twitter")); + let multi_select_field = FieldBuilder::new(multi_select) + .name("Platform") + .visibility(true) + .build(); - // Number - let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); - let number_field = FieldBuilder::new(number).name("Price").visibility(true).build(); + // Number + let number = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD); + let number_field = FieldBuilder::new(number) + .name("Price") + .visibility(true) + .build(); - // Date - let date = DateTypeOptionBuilder::default() - .date_format(DateFormat::US) - .time_format(TimeFormat::TwentyFourHour); - let date_field = FieldBuilder::new(date).name("Time").visibility(true).build(); + // Date + let date = DateTypeOptionBuilder::default() + .date_format(DateFormat::US) + .time_format(TimeFormat::TwentyFourHour); + let date_field = FieldBuilder::new(date) + .name("Time") + .visibility(true) + .build(); - // Checkbox - let checkbox = CheckboxTypeOptionBuilder::default(); - let checkbox_field = FieldBuilder::new(checkbox).name("is done").visibility(true).build(); + // Checkbox + let checkbox = CheckboxTypeOptionBuilder::default(); + let checkbox_field = FieldBuilder::new(checkbox) + .name("is done") + .visibility(true) + .build(); - // URL - let url = URLTypeOptionBuilder::default(); - let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); + // URL + let url = URLTypeOptionBuilder::default(); + let url_field = FieldBuilder::new(url).name("link").visibility(true).build(); - GridBuilder::default() - .add_field(text_field) - .add_field(single_select_field) - .add_field(multi_select_field) - .add_field(number_field) - .add_field(date_field) - .add_field(checkbox_field) - .add_field(url_field) - .add_empty_row() - .add_empty_row() - .add_empty_row() - .build() + GridBuilder::default() + .add_field(text_field) + .add_field(single_select_field) + .add_field(multi_select_field) + .add_field(number_field) + .add_field(date_field) + .add_field(checkbox_field) + .add_field(url_field) + .add_empty_row() + .add_empty_row() + .add_empty_row() + .build() } diff --git a/frontend/rust-lib/flowy-database/tests/grid/snapshot_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/snapshot_test/script.rs index d6f80ebf7d..4d399b3a62 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/snapshot_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/snapshot_test/script.rs @@ -1,8 +1,8 @@ use crate::grid::database_editor::DatabaseEditorTest; +use database_model::FieldRevision; use flowy_client_sync::client_database::{DatabaseOperations, DatabaseRevisionPad}; use flowy_revision::{RevisionSnapshotData, REVISION_WRITE_INTERVAL_IN_MILLIS}; -use grid_model::FieldRevision; use revision_model::Revision; use std::time::Duration; use tokio::time::sleep; @@ -47,7 +47,7 @@ impl DatabaseSnapshotTest { } pub async fn grid_pad(&self) -> DatabaseRevisionPad { - self.editor.grid_pad().read().await.clone() + self.editor.database_pad().read().await.clone() } pub async fn run_scripts(&mut self, scripts: Vec) { diff --git a/frontend/rust-lib/flowy-database/tests/grid/sort_test/checkbox_and_text_test.rs b/frontend/rust-lib/flowy-database/tests/grid/sort_test/checkbox_and_text_test.rs index 17f4859b9e..a955dbcdea 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/sort_test/checkbox_and_text_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/sort_test/checkbox_and_text_test.rs @@ -1,6 +1,6 @@ use crate::grid::sort_test::script::{DatabaseSortTest, SortScript::*}; +use database_model::SortCondition; use flowy_database::entities::FieldType; -use grid_model::SortCondition; #[tokio::test] async fn sort_checkbox_and_then_text_by_descending_test() { diff --git a/frontend/rust-lib/flowy-database/tests/grid/sort_test/multi_sort_test.rs b/frontend/rust-lib/flowy-database/tests/grid/sort_test/multi_sort_test.rs index 20692cdc0f..60dcdceb3b 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/sort_test/multi_sort_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/sort_test/multi_sort_test.rs @@ -1,7 +1,7 @@ use crate::grid::sort_test::script::DatabaseSortTest; use crate::grid::sort_test::script::SortScript::*; +use database_model::SortCondition; use flowy_database::entities::FieldType; -use grid_model::SortCondition; #[tokio::test] async fn sort_text_with_checkbox_by_ascending_test() { diff --git a/frontend/rust-lib/flowy-database/tests/grid/sort_test/script.rs b/frontend/rust-lib/flowy-database/tests/grid/sort_test/script.rs index 19c494b3ed..492242bd2e 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/sort_test/script.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/sort_test/script.rs @@ -1,10 +1,10 @@ use crate::grid::database_editor::DatabaseEditorTest; use async_stream::stream; +use database_model::{FieldRevision, SortCondition, SortRevision}; use flowy_database::entities::{AlterSortParams, CellIdParams, DeleteSortParams}; +use flowy_database::services::database_view::DatabaseViewChanged; use flowy_database::services::sort::SortType; -use flowy_database::services::view_editor::DatabaseViewChanged; use futures::stream::StreamExt; -use grid_model::{FieldRevision, SortCondition, SortRevision}; use std::cmp::min; use std::sync::Arc; use std::time::Duration; diff --git a/frontend/rust-lib/flowy-database/tests/grid/sort_test/single_sort_test.rs b/frontend/rust-lib/flowy-database/tests/grid/sort_test/single_sort_test.rs index 145c642563..50c2ff4177 100644 --- a/frontend/rust-lib/flowy-database/tests/grid/sort_test/single_sort_test.rs +++ b/frontend/rust-lib/flowy-database/tests/grid/sort_test/single_sort_test.rs @@ -1,6 +1,6 @@ use crate::grid::sort_test::script::{DatabaseSortTest, SortScript::*}; +use database_model::SortCondition; use flowy_database::entities::FieldType; -use grid_model::SortCondition; #[tokio::test] async fn sort_text_by_ascending_test() { diff --git a/frontend/rust-lib/flowy-folder/src/services/persistence/version_1/view_sql.rs b/frontend/rust-lib/flowy-folder/src/services/persistence/version_1/view_sql.rs index b1180177f2..673c234aec 100644 --- a/frontend/rust-lib/flowy-folder/src/services/persistence/version_1/view_sql.rs +++ b/frontend/rust-lib/flowy-folder/src/services/persistence/version_1/view_sql.rs @@ -12,7 +12,6 @@ use flowy_sqlite::{ schema::{view_table, view_table::dsl}, SqliteConnection, }; - use folder_model::{ViewDataFormatRevision, ViewLayoutTypeRevision, ViewRevision}; use lib_infra::util::timestamp; @@ -111,7 +110,7 @@ impl ViewTable { thumbnail: view_rev.thumbnail, view_type: data_type, ext_data: view_rev.ext_data, - version: view_rev.version, + version: 0, is_trash: false, } } @@ -119,28 +118,24 @@ impl ViewTable { impl std::convert::From for ViewRevision { fn from(table: ViewTable) -> Self { - let data_type = match table.view_type { + let data_format = match table.view_type { SqlViewDataFormat::Delta => ViewDataFormatRevision::DeltaFormat, SqlViewDataFormat::Database => ViewDataFormatRevision::DatabaseFormat, SqlViewDataFormat::Tree => ViewDataFormatRevision::NodeFormat, }; - ViewRevision { - id: table.id, - app_id: table.belong_to_id, - name: table.name, - desc: table.desc, - data_format: data_type, - belongings: vec![], - modified_time: table.modified_time, - version: table.version, - create_time: table.create_time, - ext_data: "".to_string(), - thumbnail: table.thumbnail, + ViewRevision::new( + table.id, + table.belong_to_id, + table.name, + table.desc, + data_format, // Store the view in ViewTable was deprecated since v0.0.2. // No need to worry about layout. - layout: ViewLayoutTypeRevision::Document, - } + ViewLayoutTypeRevision::Document, + table.modified_time, + table.create_time, + ) } } diff --git a/frontend/rust-lib/flowy-net/src/local_server/server.rs b/frontend/rust-lib/flowy-net/src/local_server/server.rs index 43f8806faa..78fe79a663 100644 --- a/frontend/rust-lib/flowy-net/src/local_server/server.rs +++ b/frontend/rust-lib/flowy-net/src/local_server/server.rs @@ -318,20 +318,16 @@ impl FolderCouldServiceV1 for LocalServer { params: CreateViewParams, ) -> FutureResult { let time = timestamp(); - let view = ViewRevision { - id: params.view_id, - app_id: params.belong_to_id, - name: params.name, - desc: params.desc, - data_format: params.data_format.into(), - version: 0, - belongings: vec![], - modified_time: time, - create_time: time, - ext_data: "".to_string(), - thumbnail: params.thumbnail, - layout: params.layout.into(), - }; + let view = ViewRevision::new( + params.view_id, + params.belong_to_id, + params.name, + params.desc, + params.data_format.into(), + params.layout.into(), + time, + time, + ); FutureResult::new(async { Ok(view) }) } diff --git a/frontend/scripts/makefile/tauri.toml b/frontend/scripts/makefile/tauri.toml index 995f92ab5b..4fe6b19fd7 100644 --- a/frontend/scripts/makefile/tauri.toml +++ b/frontend/scripts/makefile/tauri.toml @@ -1,4 +1,4 @@ -[tasks.build_tauri_backend] +[tasks.tauri_build] description = "Build the Tauri backend" script = [""" cd appflowy_tauri/src-tauri diff --git a/shared-lib/Cargo.lock b/shared-lib/Cargo.lock index dd51972f7b..d9cfacea20 100644 --- a/shared-lib/Cargo.lock +++ b/shared-lib/Cargo.lock @@ -174,6 +174,18 @@ dependencies = [ "parking_lot 0.12.1", ] +[[package]] +name = "database-model" +version = "0.1.0" +dependencies = [ + "bytes", + "indexmap", + "nanoid", + "serde", + "serde_json", + "serde_repr", +] + [[package]] name = "digest" version = "0.9.0" @@ -429,18 +441,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "grid-model" -version = "0.1.0" -dependencies = [ - "bytes", - "indexmap", - "nanoid", - "serde", - "serde_json", - "serde_repr", -] - [[package]] name = "hashbrown" version = "0.12.3" diff --git a/shared-lib/Cargo.toml b/shared-lib/Cargo.toml index 7f19d7fe7d..f57931e069 100644 --- a/shared-lib/Cargo.toml +++ b/shared-lib/Cargo.toml @@ -3,7 +3,7 @@ members = [ "lib-ot", "lib-ws", "lib-infra", - "grid-model", + "database-model", "folder-model", "document-model", "ws-model", diff --git a/shared-lib/grid-model/Cargo.toml b/shared-lib/database-model/Cargo.toml similarity index 93% rename from shared-lib/grid-model/Cargo.toml rename to shared-lib/database-model/Cargo.toml index 5523121924..2f620eb71c 100644 --- a/shared-lib/grid-model/Cargo.toml +++ b/shared-lib/database-model/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "grid-model" +name = "database-model" version = "0.1.0" edition = "2021" diff --git a/shared-lib/grid-model/src/grid_block.rs b/shared-lib/database-model/src/block_rev.rs similarity index 100% rename from shared-lib/grid-model/src/grid_block.rs rename to shared-lib/database-model/src/block_rev.rs diff --git a/shared-lib/grid-model/src/grid_rev.rs b/shared-lib/database-model/src/database_rev.rs similarity index 88% rename from shared-lib/grid-model/src/grid_rev.rs rename to shared-lib/database-model/src/database_rev.rs index 7127cdf1ea..2de186e665 100644 --- a/shared-lib/grid-model/src/grid_rev.rs +++ b/shared-lib/database-model/src/database_rev.rs @@ -5,7 +5,7 @@ use nanoid::nanoid; use serde::{Deserialize, Serialize}; use std::sync::Arc; -pub fn gen_grid_id() -> String { +pub fn gen_database_id() -> String { // nanoid calculator https://zelark.github.io/nano-id-cc/ nanoid!(10) } @@ -20,27 +20,28 @@ pub fn gen_field_id() -> String { #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct DatabaseRevision { - pub grid_id: String, + #[serde(rename = "grid_id")] + pub database_id: String, pub fields: Vec>, - pub blocks: Vec>, + pub blocks: Vec>, } impl DatabaseRevision { - pub fn new(grid_id: &str) -> Self { + pub fn new(database_id: &str) -> Self { Self { - grid_id: grid_id.to_owned(), + database_id: database_id.to_owned(), fields: vec![], blocks: vec![], } } pub fn from_build_context( - grid_id: &str, + database_id: &str, field_revs: Vec>, - block_metas: Vec, + block_metas: Vec, ) -> Self { Self { - grid_id: grid_id.to_owned(), + database_id: database_id.to_owned(), fields: field_revs, blocks: block_metas.into_iter().map(Arc::new).collect(), } @@ -48,13 +49,13 @@ impl DatabaseRevision { } #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -pub struct GridBlockMetaRevision { +pub struct DatabaseBlockMetaRevision { pub block_id: String, pub start_row_index: i32, pub row_count: i32, } -impl GridBlockMetaRevision { +impl DatabaseBlockMetaRevision { pub fn len(&self) -> i32 { self.row_count } @@ -64,22 +65,22 @@ impl GridBlockMetaRevision { } } -impl GridBlockMetaRevision { +impl DatabaseBlockMetaRevision { pub fn new() -> Self { - GridBlockMetaRevision { + DatabaseBlockMetaRevision { block_id: gen_block_id(), ..Default::default() } } } -pub struct GridBlockMetaRevisionChangeset { +pub struct DatabaseBlockMetaRevisionChangeset { pub block_id: String, pub start_row_index: Option, pub row_count: Option, } -impl GridBlockMetaRevisionChangeset { +impl DatabaseBlockMetaRevisionChangeset { pub fn from_row_count(block_id: String, row_count: i32) -> Self { Self { block_id, @@ -192,11 +193,11 @@ pub trait TypeOptionDataDeserializer { #[derive(Clone, Default, Deserialize, Serialize)] pub struct BuildDatabaseContext { pub field_revs: Vec>, - pub block_metas: Vec, + pub block_metas: Vec, pub blocks: Vec, // String in JSON format. It can be deserialized into [GridViewRevision] - pub grid_view_revision_data: String, + pub database_view_data: String, } impl BuildDatabaseContext { diff --git a/shared-lib/grid-model/src/filter_rev.rs b/shared-lib/database-model/src/filter_rev.rs similarity index 100% rename from shared-lib/grid-model/src/filter_rev.rs rename to shared-lib/database-model/src/filter_rev.rs diff --git a/shared-lib/grid-model/src/group_rev.rs b/shared-lib/database-model/src/group_rev.rs similarity index 98% rename from shared-lib/grid-model/src/group_rev.rs rename to shared-lib/database-model/src/group_rev.rs index bd743bf1c8..7ffef5b28d 100644 --- a/shared-lib/grid-model/src/group_rev.rs +++ b/shared-lib/database-model/src/group_rev.rs @@ -1,4 +1,4 @@ -use crate::{gen_grid_group_id, FieldTypeRevision}; +use crate::{gen_database_group_id, FieldTypeRevision}; use serde::{Deserialize, Serialize}; use serde_json::Error; use serde_repr::*; @@ -29,7 +29,7 @@ impl GroupConfigurationRevision { { let content = content.to_json()?; Ok(Self { - id: gen_grid_group_id(), + id: gen_database_group_id(), field_id, field_type_rev: field_type, groups: vec![], diff --git a/shared-lib/database-model/src/lib.rs b/shared-lib/database-model/src/lib.rs new file mode 100644 index 0000000000..812f235b84 --- /dev/null +++ b/shared-lib/database-model/src/lib.rs @@ -0,0 +1,15 @@ +mod block_rev; +mod database_rev; +mod filter_rev; +mod group_rev; +mod setting_rev; +mod sort_rev; +mod view_rev; + +pub use block_rev::*; +pub use database_rev::*; +pub use filter_rev::*; +pub use group_rev::*; +pub use setting_rev::*; +pub use sort_rev::*; +pub use view_rev::*; diff --git a/shared-lib/grid-model/src/grid_setting_rev.rs b/shared-lib/database-model/src/setting_rev.rs similarity index 97% rename from shared-lib/grid-model/src/grid_setting_rev.rs rename to shared-lib/database-model/src/setting_rev.rs index bfb6ccdee5..61f9b20536 100644 --- a/shared-lib/grid-model/src/grid_setting_rev.rs +++ b/shared-lib/database-model/src/setting_rev.rs @@ -7,16 +7,15 @@ use serde::{Deserialize, Serialize}; use std::fmt::Debug; use std::sync::Arc; -pub fn gen_grid_filter_id() -> String { +pub fn gen_database_filter_id() -> String { nanoid!(6) } -pub fn gen_grid_group_id() -> String { +pub fn gen_database_group_id() -> String { nanoid!(6) } -#[allow(dead_code)] -pub fn gen_grid_sort_id() -> String { +pub fn gen_database_sort_id() -> String { nanoid!(6) } diff --git a/shared-lib/grid-model/src/sort_rev.rs b/shared-lib/database-model/src/sort_rev.rs similarity index 100% rename from shared-lib/grid-model/src/sort_rev.rs rename to shared-lib/database-model/src/sort_rev.rs diff --git a/shared-lib/grid-model/src/grid_view.rs b/shared-lib/database-model/src/view_rev.rs similarity index 90% rename from shared-lib/grid-model/src/grid_view.rs rename to shared-lib/database-model/src/view_rev.rs index b7a35988b8..b30f5c1644 100644 --- a/shared-lib/grid-model/src/grid_view.rs +++ b/shared-lib/database-model/src/view_rev.rs @@ -33,7 +33,8 @@ impl std::default::Default for LayoutRevision { pub struct DatabaseViewRevision { pub view_id: String, - pub grid_id: String, + #[serde(rename = "grid_id")] + pub database_id: String, pub layout: LayoutRevision, @@ -48,10 +49,10 @@ pub struct DatabaseViewRevision { } impl DatabaseViewRevision { - pub fn new(grid_id: String, view_id: String, layout: LayoutRevision) -> Self { + pub fn new(database_id: String, view_id: String, layout: LayoutRevision) -> Self { DatabaseViewRevision { view_id, - grid_id, + database_id, layout, filters: Default::default(), groups: Default::default(), @@ -77,7 +78,7 @@ mod tests { fn grid_view_revision_serde_test() { let grid_view_revision = DatabaseViewRevision { view_id: "1".to_string(), - grid_id: "1".to_string(), + database_id: "1".to_string(), layout: Default::default(), filters: Default::default(), groups: Default::default(), diff --git a/shared-lib/folder-model/src/user_default.rs b/shared-lib/folder-model/src/user_default.rs index 89e230c880..348b322415 100644 --- a/shared-lib/folder-model/src/user_default.rs +++ b/shared-lib/folder-model/src/user_default.rs @@ -45,18 +45,14 @@ fn create_default_view(app_id: String, time: chrono::DateTime) -> ViewRevis let view_id = gen_view_id(); let name = "Read me".to_string(); - ViewRevision { - id: view_id, + ViewRevision::new( + view_id, app_id, name, - desc: "".to_string(), - data_format: ViewDataFormatRevision::DeltaFormat, - version: 0, - belongings: vec![], - modified_time: time.timestamp(), - create_time: time.timestamp(), - ext_data: "".to_string(), - thumbnail: "".to_string(), - layout: ViewLayoutTypeRevision::Document, - } + "".to_string(), + ViewDataFormatRevision::DeltaFormat, + ViewLayoutTypeRevision::Document, + time.timestamp(), + time.timestamp(), + ) } diff --git a/shared-lib/folder-model/src/view_rev.rs b/shared-lib/folder-model/src/view_rev.rs index 2b916d6011..c92a629c57 100644 --- a/shared-lib/folder-model/src/view_rev.rs +++ b/shared-lib/folder-model/src/view_rev.rs @@ -20,7 +20,8 @@ pub struct ViewRevision { #[serde(rename = "data_type")] pub data_format: ViewDataFormatRevision, - pub version: i64, // Deprecated + // #[deprecated] + version: i64, pub belongings: Vec, @@ -40,6 +41,36 @@ pub struct ViewRevision { #[serde(rename = "plugin_type")] pub layout: ViewLayoutTypeRevision, } + +impl ViewRevision { + #[allow(clippy::too_many_arguments)] + pub fn new( + id: String, + app_id: String, + name: String, + desc: String, + data_format: ViewDataFormatRevision, + layout: ViewLayoutTypeRevision, + create_time: i64, + modified_time: i64, + ) -> Self { + Self { + id, + app_id, + name, + desc, + data_format, + version: 0, + belongings: vec![], + modified_time, + create_time, + ext_data: "".to_string(), + thumbnail: "".to_string(), + layout, + } + } +} + const DEFAULT_PLUGIN_TYPE: fn() -> ViewLayoutTypeRevision = || ViewLayoutTypeRevision::Document; impl std::convert::From for TrashRevision { diff --git a/shared-lib/grid-model/src/lib.rs b/shared-lib/grid-model/src/lib.rs deleted file mode 100644 index df852779b4..0000000000 --- a/shared-lib/grid-model/src/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -mod filter_rev; -mod grid_block; -mod grid_rev; -mod grid_setting_rev; -mod grid_view; -mod group_rev; -mod sort_rev; - -pub use filter_rev::*; -pub use grid_block::*; -pub use grid_rev::*; -pub use grid_setting_rev::*; -pub use grid_view::*; -pub use group_rev::*; -pub use sort_rev::*;