فهرست منبع

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
Nathan.fooo 2 سال پیش
والد
کامیت
f76d722b4c
100فایلهای تغییر یافته به همراه720 افزوده شده و 664 حذف شده
  1. 1 1
      .github/workflows/tauri_ci.yaml
  2. 1 1
      frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart
  3. 1 1
      frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart
  4. 1 1
      frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart
  5. 1 1
      frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart
  6. 2 2
      frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart
  7. 2 2
      frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart
  8. 1 1
      frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart
  9. 10 10
      frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart
  10. 9 9
      frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart
  11. 3 4
      frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart
  12. 1 1
      frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart
  13. 1 1
      frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart
  14. 1 1
      frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart
  15. 7 7
      frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart
  16. 1 1
      frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart
  17. 1 1
      frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart
  18. 1 1
      frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart
  19. 1 1
      frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart
  20. 9 9
      frontend/app_flowy/lib/plugins/grid/application/grid_service.dart
  21. 1 1
      frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart
  22. 1 1
      frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart
  23. 4 4
      frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart
  24. 1 1
      frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart
  25. 2 2
      frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart
  26. 5 5
      frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart
  27. 4 4
      frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart
  28. 3 3
      frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart
  29. 2 2
      frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart
  30. 2 2
      frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart
  31. 1 1
      frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart
  32. 1 1
      frontend/app_flowy/test/bloc_test/board_test/create_or_edit_field_test.dart
  33. 4 4
      frontend/app_flowy/test/bloc_test/board_test/util.dart
  34. 2 2
      frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart
  35. 7 7
      frontend/app_flowy/test/bloc_test/grid_test/filter/create_filter_test.dart
  36. 2 2
      frontend/app_flowy/test/bloc_test/grid_test/filter/edit_filter_field_test.dart
  37. 2 2
      frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart
  38. 2 2
      frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_checkbox_test.dart
  39. 4 4
      frontend/app_flowy/test/bloc_test/grid_test/filter/filter_rows_by_text_test.dart
  40. 4 4
      frontend/app_flowy/test/bloc_test/grid_test/util.dart
  41. 15 15
      frontend/appflowy_tauri/src-tauri/Cargo.lock
  42. 3 3
      frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts
  43. 6 6
      frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts
  44. 15 15
      frontend/rust-lib/Cargo.lock
  45. 1 1
      frontend/rust-lib/flowy-client-sync/Cargo.toml
  46. 49 36
      frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs
  47. 4 3
      frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs
  48. 43 42
      frontend/rust-lib/flowy-client-sync/src/client_database/database_revision_pad.rs
  49. 12 16
      frontend/rust-lib/flowy-client-sync/src/client_database/database_view_revision_pad.rs
  50. 2 2
      frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs
  51. 1 1
      frontend/rust-lib/flowy-core/Cargo.toml
  52. 17 17
      frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs
  53. 1 1
      frontend/rust-lib/flowy-database/Cargo.toml
  54. 1 1
      frontend/rust-lib/flowy-database/src/entities/cell_entities.rs
  55. 41 48
      frontend/rust-lib/flowy-database/src/entities/field_entities.rs
  56. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs
  57. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs
  58. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs
  59. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs
  60. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/select_option_filter.rs
  61. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs
  62. 1 1
      frontend/rust-lib/flowy-database/src/entities/filter_entities/util.rs
  63. 2 2
      frontend/rust-lib/flowy-database/src/entities/grid_entities.rs
  64. 1 1
      frontend/rust-lib/flowy-database/src/entities/group_entities/configuration.rs
  65. 4 5
      frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs
  66. 9 11
      frontend/rust-lib/flowy-database/src/entities/row_entities.rs
  67. 5 5
      frontend/rust-lib/flowy-database/src/entities/setting_entities.rs
  68. 1 1
      frontend/rust-lib/flowy-database/src/entities/sort_entities.rs
  69. 30 44
      frontend/rust-lib/flowy-database/src/event_handler.rs
  70. 8 8
      frontend/rust-lib/flowy-database/src/event_map.rs
  71. 24 23
      frontend/rust-lib/flowy-database/src/manager.rs
  72. 1 1
      frontend/rust-lib/flowy-database/src/services/cell/cell_operation.rs
  73. 1 1
      frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs
  74. 21 16
      frontend/rust-lib/flowy-database/src/services/database/block_editor.rs
  75. 19 18
      frontend/rust-lib/flowy-database/src/services/database/block_manager.rs
  76. 168 125
      frontend/rust-lib/flowy-database/src/services/database/database_editor.rs
  77. 10 0
      frontend/rust-lib/flowy-database/src/services/database/mod.rs
  78. 3 3
      frontend/rust-lib/flowy-database/src/services/database/retry.rs
  79. 8 6
      frontend/rust-lib/flowy-database/src/services/database/trait_impl.rs
  80. 28 24
      frontend/rust-lib/flowy-database/src/services/database_view/editor.rs
  81. 9 9
      frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs
  82. 2 2
      frontend/rust-lib/flowy-database/src/services/database_view/mod.rs
  83. 4 3
      frontend/rust-lib/flowy-database/src/services/database_view/notifier.rs
  84. 17 14
      frontend/rust-lib/flowy-database/src/services/database_view/trait_impl.rs
  85. 1 1
      frontend/rust-lib/flowy-database/src/services/field/field_builder.rs
  86. 3 3
      frontend/rust-lib/flowy-database/src/services/field/field_operation.rs
  87. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs
  88. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_tests.rs
  89. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs
  90. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_tests.rs
  91. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/date_type_option/date_type_option.rs
  92. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_tests.rs
  93. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/number_type_option/number_type_option.rs
  94. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/checklist_type_option.rs
  95. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/multi_select_type_option.rs
  96. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/select_type_option.rs
  97. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/single_select_type_option.rs
  98. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/selection_type_option/type_option_transform.rs
  99. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/text_type_option/text_type_option.rs
  100. 1 1
      frontend/rust-lib/flowy-database/src/services/field/type_options/type_option.rs

+ 1 - 1
.github/workflows/tauri_ci.yaml

@@ -74,7 +74,7 @@ jobs:
         run: |
         run: |
           mkdir dist
           mkdir dist
           npm install
           npm install
-          cargo make --cwd .. build_tauri_backend
+          cargo make --cwd .. tauri_build 
           yarn && yarn build
           yarn && yarn build
 
 
       - uses: tauri-apps/tauri-action@v0
       - uses: tauri-apps/tauri-action@v0

+ 1 - 1
frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart

@@ -45,7 +45,7 @@ class BoardDataController {
   BoardDataController({required ViewPB view})
   BoardDataController({required ViewPB view})
       : viewId = view.id,
       : viewId = view.id,
         _listener = BoardListener(view.id),
         _listener = BoardListener(view.id),
-        _databaseFFIService = DatabaseFFIService(databaseId: view.id),
+        _databaseFFIService = DatabaseFFIService(viewId: view.id),
         fieldController = GridFieldController(databaseId: view.id) {
         fieldController = GridFieldController(databaseId: view.id) {
     //
     //
     _viewCache = DatabaseViewCache(
     _viewCache = DatabaseViewCache(

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart

@@ -152,7 +152,7 @@ class GridCellController<T, D> extends Equatable {
         _cellDataPersistence = cellDataPersistence,
         _cellDataPersistence = cellDataPersistence,
         _fieldNotifier = fieldNotifier,
         _fieldNotifier = fieldNotifier,
         _fieldService = FieldService(
         _fieldService = FieldService(
-          databaseId: cellId.databaseId,
+          viewId: cellId.databaseId,
           fieldId: cellId.fieldInfo.id,
           fieldId: cellId.fieldInfo.id,
         ),
         ),
         _cacheKey = GridCellCacheKey(
         _cacheKey = GridCellCacheKey(

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart

@@ -175,7 +175,7 @@ class DateCalBloc extends Bloc<DateCalEvent, DateCalState> {
     });
     });
 
 
     final result = await FieldService.updateFieldTypeOption(
     final result = await FieldService.updateFieldTypeOption(
-      databaseId: cellController.databaseId,
+      viewId: cellController.databaseId,
       fieldId: cellController.fieldInfo.id,
       fieldId: cellController.fieldInfo.id,
       typeOptionData: newDateTypeOption.writeToBuffer(),
       typeOptionData: newDateTypeOption.writeToBuffer(),
     );
     );

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/field/field_action_sheet_bloc.dart

@@ -13,7 +13,7 @@ class FieldActionSheetBloc
 
 
   FieldActionSheetBloc({required GridFieldCellContext fieldCellContext})
   FieldActionSheetBloc({required GridFieldCellContext fieldCellContext})
       : fieldService = FieldService(
       : fieldService = FieldService(
-          databaseId: fieldCellContext.databaseId,
+          viewId: fieldCellContext.viewId,
           fieldId: fieldCellContext.field.id,
           fieldId: fieldCellContext.field.id,
         ),
         ),
         super(
         super(

+ 2 - 2
frontend/app_flowy/lib/plugins/grid/application/field/field_cell_bloc.dart

@@ -16,7 +16,7 @@ class FieldCellBloc extends Bloc<FieldCellEvent, FieldCellState> {
     required GridFieldCellContext cellContext,
     required GridFieldCellContext cellContext,
   })  : _fieldListener = SingleFieldListener(fieldId: cellContext.field.id),
   })  : _fieldListener = SingleFieldListener(fieldId: cellContext.field.id),
         _fieldService = FieldService(
         _fieldService = FieldService(
-            databaseId: cellContext.databaseId, fieldId: cellContext.field.id),
+            viewId: cellContext.viewId, fieldId: cellContext.field.id),
         super(FieldCellState.initial(cellContext)) {
         super(FieldCellState.initial(cellContext)) {
     on<FieldCellEvent>(
     on<FieldCellEvent>(
       (event, emit) async {
       (event, emit) async {
@@ -80,7 +80,7 @@ class FieldCellState with _$FieldCellState {
 
 
   factory FieldCellState.initial(GridFieldCellContext cellContext) =>
   factory FieldCellState.initial(GridFieldCellContext cellContext) =>
       FieldCellState(
       FieldCellState(
-        databaseId: cellContext.databaseId,
+        databaseId: cellContext.viewId,
         field: cellContext.field,
         field: cellContext.field,
         width: cellContext.field.width.toDouble(),
         width: cellContext.field.width.toDouble(),
       );
       );

+ 2 - 2
frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart

@@ -150,9 +150,9 @@ class GridFieldController {
   GridFieldController({required this.databaseId})
   GridFieldController({required this.databaseId})
       : _fieldListener = DatabaseFieldsListener(databaseId: databaseId),
       : _fieldListener = DatabaseFieldsListener(databaseId: databaseId),
         _settingListener = DatabaseSettingListener(databaseId: databaseId),
         _settingListener = DatabaseSettingListener(databaseId: databaseId),
-        _filterFFIService = FilterFFIService(databaseId: databaseId),
+        _filterFFIService = FilterFFIService(viewId: databaseId),
         _filtersListener = FiltersListener(viewId: databaseId),
         _filtersListener = FiltersListener(viewId: databaseId),
-        _gridFFIService = DatabaseFFIService(databaseId: databaseId),
+        _gridFFIService = DatabaseFFIService(viewId: databaseId),
         _sortFFIService = SortFFIService(viewId: databaseId),
         _sortFFIService = SortFFIService(viewId: databaseId),
         _sortsListener = SortsListener(viewId: databaseId),
         _sortsListener = SortsListener(viewId: databaseId),
         _settingFFIService = SettingFFIService(viewId: databaseId) {
         _settingFFIService = SettingFFIService(viewId: databaseId) {

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/field/field_editor_bloc.dart

@@ -49,7 +49,7 @@ class FieldEditorBloc extends Bloc<FieldEditorEvent, FieldEditorState> {
               () => null,
               () => null,
               (field) {
               (field) {
                 final fieldService = FieldService(
                 final fieldService = FieldService(
-                  databaseId: databaseId,
+                  viewId: databaseId,
                   fieldId: field.id,
                   fieldId: field.id,
                 );
                 );
                 fieldService.deleteField();
                 fieldService.deleteField();

+ 10 - 10
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.
 /// You could check out the rust-lib/flowy-database/event_map.rs for more information.
 class FieldService {
 class FieldService {
-  final String databaseId;
+  final String viewId;
   final String fieldId;
   final String fieldId;
 
 
-  FieldService({required this.databaseId, required this.fieldId});
+  FieldService({required this.viewId, required this.fieldId});
 
 
   Future<Either<Unit, FlowyError>> moveField(int fromIndex, int toIndex) {
   Future<Either<Unit, FlowyError>> moveField(int fromIndex, int toIndex) {
     final payload = MoveFieldPayloadPB.create()
     final payload = MoveFieldPayloadPB.create()
-      ..viewId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..fromIndex = fromIndex
       ..fromIndex = fromIndex
       ..toIndex = toIndex;
       ..toIndex = toIndex;
@@ -35,7 +35,7 @@ class FieldService {
     double? width,
     double? width,
   }) {
   }) {
     var payload = FieldChangesetPB.create()
     var payload = FieldChangesetPB.create()
-      ..databaseId = databaseId
+      ..databaseId = viewId
       ..fieldId = fieldId;
       ..fieldId = fieldId;
 
 
     if (name != null) {
     if (name != null) {
@@ -62,12 +62,12 @@ class FieldService {
   }
   }
 
 
   static Future<Either<Unit, FlowyError>> updateFieldTypeOption({
   static Future<Either<Unit, FlowyError>> updateFieldTypeOption({
-    required String databaseId,
+    required String viewId,
     required String fieldId,
     required String fieldId,
     required List<int> typeOptionData,
     required List<int> typeOptionData,
   }) {
   }) {
     var payload = TypeOptionChangesetPB.create()
     var payload = TypeOptionChangesetPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..typeOptionData = typeOptionData;
       ..typeOptionData = typeOptionData;
 
 
@@ -76,7 +76,7 @@ class FieldService {
 
 
   Future<Either<Unit, FlowyError>> deleteField() {
   Future<Either<Unit, FlowyError>> deleteField() {
     final payload = DeleteFieldPayloadPB.create()
     final payload = DeleteFieldPayloadPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId;
       ..fieldId = fieldId;
 
 
     return DatabaseEventDeleteField(payload).send();
     return DatabaseEventDeleteField(payload).send();
@@ -84,7 +84,7 @@ class FieldService {
 
 
   Future<Either<Unit, FlowyError>> duplicateField() {
   Future<Either<Unit, FlowyError>> duplicateField() {
     final payload = DuplicateFieldPayloadPB.create()
     final payload = DuplicateFieldPayloadPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId;
       ..fieldId = fieldId;
 
 
     return DatabaseEventDuplicateField(payload).send();
     return DatabaseEventDuplicateField(payload).send();
@@ -94,7 +94,7 @@ class FieldService {
     required FieldType fieldType,
     required FieldType fieldType,
   }) {
   }) {
     final payload = TypeOptionPathPB.create()
     final payload = TypeOptionPathPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..fieldType = fieldType;
       ..fieldType = fieldType;
     return DatabaseEventGetTypeOption(payload).send().then((result) {
     return DatabaseEventGetTypeOption(payload).send().then((result) {
@@ -109,7 +109,7 @@ class FieldService {
 @freezed
 @freezed
 class GridFieldCellContext with _$GridFieldCellContext {
 class GridFieldCellContext with _$GridFieldCellContext {
   const factory GridFieldCellContext({
   const factory GridFieldCellContext({
-    required String databaseId,
+    required String viewId,
     required FieldPB field,
     required FieldPB field,
   }) = _GridFieldCellContext;
   }) = _GridFieldCellContext;
 }
 }

+ 9 - 9
frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart

@@ -155,13 +155,13 @@ abstract class TypeOptionFieldDelegate {
 }
 }
 
 
 abstract class IFieldTypeOptionLoader {
 abstract class IFieldTypeOptionLoader {
-  String get databaseId;
+  String get viewId;
   Future<Either<TypeOptionPB, FlowyError>> load();
   Future<Either<TypeOptionPB, FlowyError>> load();
 
 
   Future<Either<Unit, FlowyError>> switchToField(
   Future<Either<Unit, FlowyError>> switchToField(
       String fieldId, FieldType fieldType) {
       String fieldId, FieldType fieldType) {
     final payload = UpdateFieldTypePayloadPB.create()
     final payload = UpdateFieldTypePayloadPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..fieldType = fieldType;
       ..fieldType = fieldType;
 
 
@@ -174,9 +174,9 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader {
   TypeOptionPB? fieldTypeOption;
   TypeOptionPB? fieldTypeOption;
 
 
   @override
   @override
-  final String databaseId;
+  final String viewId;
   NewFieldTypeOptionLoader({
   NewFieldTypeOptionLoader({
-    required this.databaseId,
+    required this.viewId,
   });
   });
 
 
   /// Creates the field type option if the fieldTypeOption is null.
   /// Creates the field type option if the fieldTypeOption is null.
@@ -185,14 +185,14 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader {
   Future<Either<TypeOptionPB, FlowyError>> load() {
   Future<Either<TypeOptionPB, FlowyError>> load() {
     if (fieldTypeOption != null) {
     if (fieldTypeOption != null) {
       final payload = TypeOptionPathPB.create()
       final payload = TypeOptionPathPB.create()
-        ..databaseId = databaseId
+        ..viewId = viewId
         ..fieldId = fieldTypeOption!.field_2.id
         ..fieldId = fieldTypeOption!.field_2.id
         ..fieldType = fieldTypeOption!.field_2.fieldType;
         ..fieldType = fieldTypeOption!.field_2.fieldType;
 
 
       return DatabaseEventGetTypeOption(payload).send();
       return DatabaseEventGetTypeOption(payload).send();
     } else {
     } else {
       final payload = CreateFieldPayloadPB.create()
       final payload = CreateFieldPayloadPB.create()
-        ..databaseId = databaseId
+        ..viewId = viewId
         ..fieldType = FieldType.RichText;
         ..fieldType = FieldType.RichText;
 
 
       return DatabaseEventCreateTypeOption(payload).send().then((result) {
       return DatabaseEventCreateTypeOption(payload).send().then((result) {
@@ -211,18 +211,18 @@ class NewFieldTypeOptionLoader extends IFieldTypeOptionLoader {
 /// Uses when editing a existing field
 /// Uses when editing a existing field
 class FieldTypeOptionLoader extends IFieldTypeOptionLoader {
 class FieldTypeOptionLoader extends IFieldTypeOptionLoader {
   @override
   @override
-  final String databaseId;
+  final String viewId;
   final FieldPB field;
   final FieldPB field;
 
 
   FieldTypeOptionLoader({
   FieldTypeOptionLoader({
-    required this.databaseId,
+    required this.viewId,
     required this.field,
     required this.field,
   });
   });
 
 
   @override
   @override
   Future<Either<TypeOptionPB, FlowyError>> load() {
   Future<Either<TypeOptionPB, FlowyError>> load() {
     final payload = TypeOptionPathPB.create()
     final payload = TypeOptionPathPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..fieldId = field.id
       ..fieldId = field.id
       ..fieldType = field.fieldType;
       ..fieldType = field.fieldType;
 
 

+ 3 - 4
frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart

@@ -28,7 +28,7 @@ class TypeOptionDataController {
   }) {
   }) {
     if (fieldInfo != null) {
     if (fieldInfo != null) {
       _typeOptiondata = TypeOptionPB.create()
       _typeOptiondata = TypeOptionPB.create()
-        ..databaseId = databaseId
+        ..viewId = databaseId
         ..field_2 = fieldInfo.field;
         ..field_2 = fieldInfo.field;
     }
     }
   }
   }
@@ -66,8 +66,7 @@ class TypeOptionDataController {
 
 
     _fieldNotifier.value = _typeOptiondata.field_2;
     _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<int> typeOptionData) {
   set typeOptionData(List<int> typeOptionData) {
@@ -78,7 +77,7 @@ class TypeOptionDataController {
     });
     });
 
 
     FieldService.updateFieldTypeOption(
     FieldService.updateFieldTypeOption(
-      databaseId: databaseId,
+      viewId: databaseId,
       fieldId: field.id,
       fieldId: field.id,
       typeOptionData: typeOptionData,
       typeOptionData: typeOptionData,
     );
     );

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/filter/checkbox_filter_editor_bloc.dart

@@ -16,7 +16,7 @@ class CheckboxFilterEditorBloc
   final FilterListener _listener;
   final FilterListener _listener;
 
 
   CheckboxFilterEditorBloc({required this.filterInfo})
   CheckboxFilterEditorBloc({required this.filterInfo})
-      : _ffiService = FilterFFIService(databaseId: filterInfo.viewId),
+      : _ffiService = FilterFFIService(viewId: filterInfo.viewId),
         _listener = FilterListener(
         _listener = FilterListener(
           viewId: filterInfo.viewId,
           viewId: filterInfo.viewId,
           filterId: filterInfo.filter.id,
           filterId: filterInfo.filter.id,

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/filter/checklist_filter_bloc.dart

@@ -18,7 +18,7 @@ class ChecklistFilterEditorBloc
 
 
   ChecklistFilterEditorBloc({
   ChecklistFilterEditorBloc({
     required this.filterInfo,
     required this.filterInfo,
-  })  : _ffiService = FilterFFIService(databaseId: filterInfo.viewId),
+  })  : _ffiService = FilterFFIService(viewId: filterInfo.viewId),
         // _selectOptionService =
         // _selectOptionService =
         //           SelectOptionFFIService(cellId: cellController.cellId)
         //           SelectOptionFFIService(cellId: cellController.cellId)
         _listener = FilterListener(
         _listener = FilterListener(

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart

@@ -22,7 +22,7 @@ class GridCreateFilterBloc
   final GridFieldController fieldController;
   final GridFieldController fieldController;
   void Function(List<FieldInfo>)? _onFieldFn;
   void Function(List<FieldInfo>)? _onFieldFn;
   GridCreateFilterBloc({required this.viewId, required this.fieldController})
   GridCreateFilterBloc({required this.viewId, required this.fieldController})
-      : _ffiService = FilterFFIService(databaseId: viewId),
+      : _ffiService = FilterFFIService(viewId: viewId),
         super(GridCreateFilterState.initial(fieldController.fieldInfos)) {
         super(GridCreateFilterState.initial(fieldController.fieldInfos)) {
     on<GridCreateFilterEvent>(
     on<GridCreateFilterEvent>(
       (event, emit) async {
       (event, emit) async {

+ 7 - 7
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;
 import 'package:fixnum/fixnum.dart' as $fixnum;
 
 
 class FilterFFIService {
 class FilterFFIService {
-  final String databaseId;
-  const FilterFFIService({required this.databaseId});
+  final String viewId;
+  const FilterFFIService({required this.viewId});
 
 
   Future<Either<List<FilterPB>, FlowyError>> getAllFilters() {
   Future<Either<List<FilterPB>, FlowyError>> getAllFilters() {
-    final payload = DatabaseIdPB()..value = databaseId;
+    final payload = DatabaseViewIdPB()..value = viewId;
 
 
     return DatabaseEventGetAllFilters(payload).send().then((result) {
     return DatabaseEventGetAllFilters(payload).send().then((result) {
       return result.fold(
       return result.fold(
@@ -171,7 +171,7 @@ class FilterFFIService {
     var insertFilterPayload = AlterFilterPayloadPB.create()
     var insertFilterPayload = AlterFilterPayloadPB.create()
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..fieldType = fieldType
       ..fieldType = fieldType
-      ..viewId = databaseId
+      ..viewId = viewId
       ..data = data;
       ..data = data;
 
 
     if (filterId != null) {
     if (filterId != null) {
@@ -179,7 +179,7 @@ class FilterFFIService {
     }
     }
 
 
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..alterFilter = insertFilterPayload;
       ..alterFilter = insertFilterPayload;
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
       return result.fold(
       return result.fold(
@@ -200,11 +200,11 @@ class FilterFFIService {
     final deleteFilterPayload = DeleteFilterPayloadPB.create()
     final deleteFilterPayload = DeleteFilterPayloadPB.create()
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..filterId = filterId
       ..filterId = filterId
-      ..viewId = databaseId
+      ..viewId = viewId
       ..fieldType = fieldType;
       ..fieldType = fieldType;
 
 
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..deleteFilter = deleteFilterPayload;
       ..deleteFilter = deleteFilterPayload;
 
 
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/filter/select_option_filter_bloc.dart

@@ -20,7 +20,7 @@ class SelectOptionFilterEditorBloc
   SelectOptionFilterEditorBloc({
   SelectOptionFilterEditorBloc({
     required this.filterInfo,
     required this.filterInfo,
     required this.delegate,
     required this.delegate,
-  })  : _ffiService = FilterFFIService(databaseId: filterInfo.viewId),
+  })  : _ffiService = FilterFFIService(viewId: filterInfo.viewId),
         _listener = FilterListener(
         _listener = FilterListener(
           viewId: filterInfo.viewId,
           viewId: filterInfo.viewId,
           filterId: filterInfo.filter.id,
           filterId: filterInfo.filter.id,

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/filter/text_filter_editor_bloc.dart

@@ -16,7 +16,7 @@ class TextFilterEditorBloc
   final FilterListener _listener;
   final FilterListener _listener;
 
 
   TextFilterEditorBloc({required this.filterInfo})
   TextFilterEditorBloc({required this.filterInfo})
-      : _ffiService = FilterFFIService(databaseId: filterInfo.viewId),
+      : _ffiService = FilterFFIService(viewId: filterInfo.viewId),
         _listener = FilterListener(
         _listener = FilterListener(
           viewId: filterInfo.viewId,
           viewId: filterInfo.viewId,
           filterId: filterInfo.filter.id,
           filterId: filterInfo.filter.id,

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart

@@ -32,7 +32,7 @@ class GridController {
 
 
   GridController({required ViewPB view})
   GridController({required ViewPB view})
       : databaseId = view.id,
       : databaseId = view.id,
-        _gridFFIService = DatabaseFFIService(databaseId: view.id),
+        _gridFFIService = DatabaseFFIService(viewId: view.id),
         fieldController = GridFieldController(databaseId: view.id) {
         fieldController = GridFieldController(databaseId: view.id) {
     _viewCache = DatabaseViewCache(
     _viewCache = DatabaseViewCache(
       databaseId: databaseId,
       databaseId: databaseId,

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart

@@ -46,7 +46,7 @@ class GridHeaderBloc extends Bloc<GridHeaderEvent, GridHeaderState> {
     emit(state.copyWith(fields: fields));
     emit(state.copyWith(fields: fields));
 
 
     final fieldService =
     final fieldService =
-        FieldService(databaseId: databaseId, fieldId: value.field.id);
+        FieldService(viewId: databaseId, fieldId: value.field.id);
     final result = await fieldService.moveField(
     final result = await fieldService.moveField(
       value.fromIndex,
       value.fromIndex,
       value.toIndex,
       value.toIndex,

+ 9 - 9
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';
 import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
 
 
 class DatabaseFFIService {
 class DatabaseFFIService {
-  final String databaseId;
+  final String viewId;
   DatabaseFFIService({
   DatabaseFFIService({
-    required this.databaseId,
+    required this.viewId,
   });
   });
 
 
   Future<Either<DatabasePB, FlowyError>> openGrid() async {
   Future<Either<DatabasePB, FlowyError>> 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();
     return DatabaseEventGetDatabase(payload).send();
   }
   }
 
 
   Future<Either<RowPB, FlowyError>> createRow({Option<String>? startRowId}) {
   Future<Either<RowPB, FlowyError>> createRow({Option<String>? startRowId}) {
-    var payload = CreateRowPayloadPB.create()..databaseId = databaseId;
+    var payload = CreateRowPayloadPB.create()..viewId = viewId;
     startRowId?.fold(() => null, (id) => payload.startRowId = id);
     startRowId?.fold(() => null, (id) => payload.startRowId = id);
     return DatabaseEventCreateRow(payload).send();
     return DatabaseEventCreateRow(payload).send();
   }
   }
@@ -31,7 +31,7 @@ class DatabaseFFIService {
     String? startRowId,
     String? startRowId,
   ) {
   ) {
     CreateBoardCardPayloadPB payload = CreateBoardCardPayloadPB.create()
     CreateBoardCardPayloadPB payload = CreateBoardCardPayloadPB.create()
-      ..databaseId = databaseId
+      ..viewId = viewId
       ..groupId = groupId;
       ..groupId = groupId;
 
 
     if (startRowId != null) {
     if (startRowId != null) {
@@ -43,7 +43,7 @@ class DatabaseFFIService {
 
 
   Future<Either<List<FieldPB>, FlowyError>> getFields(
   Future<Either<List<FieldPB>, FlowyError>> getFields(
       {List<FieldIdPB>? fieldIds}) {
       {List<FieldIdPB>? fieldIds}) {
-    var payload = GetFieldPayloadPB.create()..databaseId = databaseId;
+    var payload = GetFieldPayloadPB.create()..viewId = viewId;
 
 
     if (fieldIds != null) {
     if (fieldIds != null) {
       payload.fieldIds = RepeatedFieldIdPB(items: fieldIds);
       payload.fieldIds = RepeatedFieldIdPB(items: fieldIds);
@@ -54,12 +54,12 @@ class DatabaseFFIService {
   }
   }
 
 
   Future<Either<Unit, FlowyError>> closeGrid() {
   Future<Either<Unit, FlowyError>> closeGrid() {
-    final request = ViewIdPB(value: databaseId);
+    final request = ViewIdPB(value: viewId);
     return FolderEventCloseView(request).send();
     return FolderEventCloseView(request).send();
   }
   }
 
 
   Future<Either<RepeatedGroupPB, FlowyError>> loadGroups() {
   Future<Either<RepeatedGroupPB, FlowyError>> loadGroups() {
-    final payload = DatabaseIdPB(value: databaseId);
+    final payload = DatabaseViewIdPB(value: viewId);
     return DatabaseEventGetGroup(payload).send();
     return DatabaseEventGetGroup(payload).send();
   }
   }
 }
 }

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart

@@ -214,7 +214,7 @@ class GridRowCache {
 
 
   Future<void> _loadRow(String rowId) async {
   Future<void> _loadRow(String rowId) async {
     final payload = RowIdPB.create()
     final payload = RowIdPB.create()
-      ..databaseId = databaseId
+      ..viewId = databaseId
       ..rowId = rowId;
       ..rowId = rowId;
 
 
     final result = await DatabaseEventGetRow(payload).send();
     final result = await DatabaseEventGetRow(payload).send();

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/row/row_detail_bloc.dart

@@ -27,7 +27,7 @@ class RowDetailBloc extends Bloc<RowDetailEvent, RowDetailState> {
           },
           },
           deleteField: (_DeleteField value) {
           deleteField: (_DeleteField value) {
             final fieldService = FieldService(
             final fieldService = FieldService(
-              databaseId: dataController.rowInfo.databaseId,
+              viewId: dataController.rowInfo.databaseId,
               fieldId: value.fieldId,
               fieldId: value.fieldId,
             );
             );
             fieldService.deleteField();
             fieldService.deleteField();

+ 4 - 4
frontend/app_flowy/lib/plugins/grid/application/row/row_service.dart

@@ -14,7 +14,7 @@ class RowFFIService {
 
 
   Future<Either<RowPB, FlowyError>> createRow(String rowId) {
   Future<Either<RowPB, FlowyError>> createRow(String rowId) {
     final payload = CreateRowPayloadPB.create()
     final payload = CreateRowPayloadPB.create()
-      ..databaseId = databaseId
+      ..viewId = databaseId
       ..startRowId = rowId;
       ..startRowId = rowId;
 
 
     return DatabaseEventCreateRow(payload).send();
     return DatabaseEventCreateRow(payload).send();
@@ -22,7 +22,7 @@ class RowFFIService {
 
 
   Future<Either<OptionalRowPB, FlowyError>> getRow(String rowId) {
   Future<Either<OptionalRowPB, FlowyError>> getRow(String rowId) {
     final payload = RowIdPB.create()
     final payload = RowIdPB.create()
-      ..databaseId = databaseId
+      ..viewId = databaseId
       ..rowId = rowId;
       ..rowId = rowId;
 
 
     return DatabaseEventGetRow(payload).send();
     return DatabaseEventGetRow(payload).send();
@@ -30,7 +30,7 @@ class RowFFIService {
 
 
   Future<Either<Unit, FlowyError>> deleteRow(String rowId) {
   Future<Either<Unit, FlowyError>> deleteRow(String rowId) {
     final payload = RowIdPB.create()
     final payload = RowIdPB.create()
-      ..databaseId = databaseId
+      ..viewId = databaseId
       ..rowId = rowId;
       ..rowId = rowId;
 
 
     return DatabaseEventDeleteRow(payload).send();
     return DatabaseEventDeleteRow(payload).send();
@@ -38,7 +38,7 @@ class RowFFIService {
 
 
   Future<Either<Unit, FlowyError>> duplicateRow(String rowId) {
   Future<Either<Unit, FlowyError>> duplicateRow(String rowId) {
     final payload = RowIdPB.create()
     final payload = RowIdPB.create()
-      ..databaseId = databaseId
+      ..viewId = databaseId
       ..rowId = rowId;
       ..rowId = rowId;
 
 
     return DatabaseEventDuplicateRow(payload).send();
     return DatabaseEventDuplicateRow(payload).send();

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart

@@ -26,7 +26,7 @@ class GridPropertyBloc extends Bloc<GridPropertyEvent, GridPropertyState> {
           },
           },
           setFieldVisibility: (_SetFieldVisibility value) async {
           setFieldVisibility: (_SetFieldVisibility value) async {
             final fieldService =
             final fieldService =
-                FieldService(databaseId: databaseId, fieldId: value.fieldId);
+                FieldService(viewId: databaseId, fieldId: value.fieldId);
             final result =
             final result =
                 await fieldService.updateField(visibility: value.visibility);
                 await fieldService.updateField(visibility: value.visibility);
             result.fold(
             result.fold(

+ 2 - 2
frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart

@@ -12,7 +12,7 @@ class SettingFFIService {
   const SettingFFIService({required this.viewId});
   const SettingFFIService({required this.viewId});
 
 
   Future<Either<DatabaseViewSettingPB, FlowyError>> getSetting() {
   Future<Either<DatabaseViewSettingPB, FlowyError>> getSetting() {
-    final payload = DatabaseIdPB.create()..value = viewId;
+    final payload = DatabaseViewIdPB.create()..value = viewId;
     return DatabaseEventGetDatabaseSetting(payload).send();
     return DatabaseEventGetDatabaseSetting(payload).send();
   }
   }
 
 
@@ -24,7 +24,7 @@ class SettingFFIService {
       ..fieldId = fieldId
       ..fieldId = fieldId
       ..fieldType = fieldType;
       ..fieldType = fieldType;
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = viewId
+      ..viewId = viewId
       ..insertGroup = insertGroupPayload;
       ..insertGroup = insertGroupPayload;
 
 
     return DatabaseEventUpdateDatabaseSetting(payload).send();
     return DatabaseEventUpdateDatabaseSetting(payload).send();

+ 5 - 5
frontend/app_flowy/lib/plugins/grid/application/sort/sort_service.dart

@@ -13,7 +13,7 @@ class SortFFIService {
   SortFFIService({required this.viewId});
   SortFFIService({required this.viewId});
 
 
   Future<Either<List<SortPB>, FlowyError>> getAllSorts() {
   Future<Either<List<SortPB>, FlowyError>> getAllSorts() {
-    final payload = DatabaseIdPB()..value = viewId;
+    final payload = DatabaseViewIdPB()..value = viewId;
 
 
     return DatabaseEventGetAllSorts(payload).send().then((result) {
     return DatabaseEventGetAllSorts(payload).send().then((result) {
       return result.fold(
       return result.fold(
@@ -37,7 +37,7 @@ class SortFFIService {
       ..sortId = sortId;
       ..sortId = sortId;
 
 
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = viewId
+      ..viewId = viewId
       ..alterSort = insertSortPayload;
       ..alterSort = insertSortPayload;
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
       return result.fold(
       return result.fold(
@@ -62,7 +62,7 @@ class SortFFIService {
       ..condition = condition;
       ..condition = condition;
 
 
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = viewId
+      ..viewId = viewId
       ..alterSort = insertSortPayload;
       ..alterSort = insertSortPayload;
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
       return result.fold(
       return result.fold(
@@ -87,7 +87,7 @@ class SortFFIService {
       ..fieldType = fieldType;
       ..fieldType = fieldType;
 
 
     final payload = DatabaseSettingChangesetPB.create()
     final payload = DatabaseSettingChangesetPB.create()
-      ..databaseId = viewId
+      ..viewId = viewId
       ..deleteSort = deleteFilterPayload;
       ..deleteSort = deleteFilterPayload;
 
 
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
     return DatabaseEventUpdateDatabaseSetting(payload).send().then((result) {
@@ -102,7 +102,7 @@ class SortFFIService {
   }
   }
 
 
   Future<Either<Unit, FlowyError>> deleteAllSorts() {
   Future<Either<Unit, FlowyError>> deleteAllSorts() {
-    final payload = DatabaseIdPB(value: viewId);
+    final payload = DatabaseViewIdPB(value: viewId);
     return DatabaseEventDeleteAllSorts(payload).send().then((result) {
     return DatabaseEventDeleteAllSorts(payload).send().then((result) {
       return result.fold(
       return result.fold(
         (l) => left(l),
         (l) => left(l),

+ 4 - 4
frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell_action_sheet.dart

@@ -35,10 +35,10 @@ class _GridFieldCellActionSheetState extends State<GridFieldCellActionSheet> {
       return SizedBox(
       return SizedBox(
         width: 400,
         width: 400,
         child: FieldEditor(
         child: FieldEditor(
-          databaseId: widget.cellContext.databaseId,
+          databaseId: widget.cellContext.viewId,
           fieldName: field.name,
           fieldName: field.name,
           typeOptionLoader: FieldTypeOptionLoader(
           typeOptionLoader: FieldTypeOptionLoader(
-            databaseId: widget.cellContext.databaseId,
+            viewId: widget.cellContext.viewId,
             field: field,
             field: field,
           ),
           ),
         ),
         ),
@@ -206,7 +206,7 @@ extension _FieldActionExtension on FieldAction {
         PopoverContainer.of(context).close();
         PopoverContainer.of(context).close();
 
 
         FieldService(
         FieldService(
-          databaseId: fieldInfo.databaseId,
+          viewId: fieldInfo.viewId,
           fieldId: fieldInfo.field.id,
           fieldId: fieldInfo.field.id,
         ).duplicateField();
         ).duplicateField();
 
 
@@ -218,7 +218,7 @@ extension _FieldActionExtension on FieldAction {
           title: LocaleKeys.grid_field_deleteFieldPromptMessage.tr(),
           title: LocaleKeys.grid_field_deleteFieldPromptMessage.tr(),
           confirm: () {
           confirm: () {
             FieldService(
             FieldService(
-              databaseId: fieldInfo.databaseId,
+              viewId: fieldInfo.viewId,
               fieldId: fieldInfo.field.id,
               fieldId: fieldInfo.field.id,
             ).deleteField();
             ).deleteField();
           },
           },

+ 3 - 3
frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart

@@ -98,8 +98,8 @@ class _GridHeaderState extends State<_GridHeader> {
       builder: (context, state) {
       builder: (context, state) {
         final cells = state.fields
         final cells = state.fields
             .where((field) => field.visibility)
             .where((field) => field.visibility)
-            .map((field) => GridFieldCellContext(
-                databaseId: widget.viewId, field: field.field))
+            .map((field) =>
+                GridFieldCellContext(viewId: widget.viewId, field: field.field))
             .map((ctx) =>
             .map((ctx) =>
                 GridFieldCell(key: _getKeyById(ctx.field.id), cellContext: ctx))
                 GridFieldCell(key: _getKeyById(ctx.field.id), cellContext: ctx))
             .toList();
             .toList();
@@ -189,7 +189,7 @@ class CreateFieldButton extends StatelessWidget {
       popupBuilder: (BuildContext popover) {
       popupBuilder: (BuildContext popover) {
         return FieldEditor(
         return FieldEditor(
           databaseId: databaseId,
           databaseId: databaseId,
-          typeOptionLoader: NewFieldTypeOptionLoader(databaseId: databaseId),
+          typeOptionLoader: NewFieldTypeOptionLoader(viewId: databaseId),
         );
         );
       },
       },
     );
     );

+ 2 - 2
frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart

@@ -144,7 +144,7 @@ TypeOptionContext<T> makeTypeOptionContext<T extends GeneratedMessage>({
   required FieldInfo fieldInfo,
   required FieldInfo fieldInfo,
 }) {
 }) {
   final loader =
   final loader =
-      FieldTypeOptionLoader(databaseId: databaseId, field: fieldInfo.field);
+      FieldTypeOptionLoader(viewId: databaseId, field: fieldInfo.field);
   final dataController = TypeOptionDataController(
   final dataController = TypeOptionDataController(
     databaseId: databaseId,
     databaseId: databaseId,
     loader: loader,
     loader: loader,
@@ -176,7 +176,7 @@ TypeOptionContext<T> makeSelectTypeOptionContext<T extends GeneratedMessage>({
   required FieldPB fieldPB,
   required FieldPB fieldPB,
 }) {
 }) {
   final loader = FieldTypeOptionLoader(
   final loader = FieldTypeOptionLoader(
-    databaseId: databaseId,
+    viewId: databaseId,
     field: fieldPB,
     field: fieldPB,
   );
   );
   final dataController = TypeOptionDataController(
   final dataController = TypeOptionDataController(

+ 2 - 2
frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart

@@ -206,7 +206,7 @@ class _CreateFieldButtonState extends State<_CreateFieldButton> {
       popupBuilder: (BuildContext popOverContext) {
       popupBuilder: (BuildContext popOverContext) {
         return FieldEditor(
         return FieldEditor(
           databaseId: widget.viewId,
           databaseId: widget.viewId,
-          typeOptionLoader: NewFieldTypeOptionLoader(databaseId: widget.viewId),
+          typeOptionLoader: NewFieldTypeOptionLoader(viewId: widget.viewId),
           onDeleted: (fieldId) {
           onDeleted: (fieldId) {
             popoverController.close();
             popoverController.close();
 
 
@@ -300,7 +300,7 @@ class _RowDetailCellState extends State<_RowDetailCell> {
       fieldName: widget.cellId.fieldInfo.field.name,
       fieldName: widget.cellId.fieldInfo.field.name,
       isGroupField: widget.cellId.fieldInfo.isGroupField,
       isGroupField: widget.cellId.fieldInfo.isGroupField,
       typeOptionLoader: FieldTypeOptionLoader(
       typeOptionLoader: FieldTypeOptionLoader(
-        databaseId: widget.cellId.databaseId,
+        viewId: widget.cellId.databaseId,
         field: widget.cellId.fieldInfo.field,
         field: widget.cellId.fieldInfo.field,
       ),
       ),
       onDeleted: (fieldId) {
       onDeleted: (fieldId) {

+ 1 - 1
frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart

@@ -139,7 +139,7 @@ class _GridPropertyCellState extends State<_GridPropertyCell> {
           databaseId: widget.databaseId,
           databaseId: widget.databaseId,
           fieldName: widget.fieldInfo.name,
           fieldName: widget.fieldInfo.name,
           typeOptionLoader: FieldTypeOptionLoader(
           typeOptionLoader: FieldTypeOptionLoader(
-            databaseId: widget.databaseId,
+            viewId: widget.databaseId,
             field: widget.fieldInfo.field,
             field: widget.fieldInfo.field,
           ),
           ),
         );
         );

+ 1 - 1
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 fieldInfo = context.singleSelectFieldContext();
     final loader = FieldTypeOptionLoader(
     final loader = FieldTypeOptionLoader(
-      databaseId: context.gridView.id,
+      viewId: context.gridView.id,
       field: fieldInfo.field,
       field: fieldInfo.field,
     );
     );
 
 

+ 4 - 4
frontend/app_flowy/test/bloc_test/board_test/util.dart

@@ -81,10 +81,10 @@ class BoardTestContext {
   }) {
   }) {
     IFieldTypeOptionLoader loader;
     IFieldTypeOptionLoader loader;
     if (fieldInfo == null) {
     if (fieldInfo == null) {
-      loader = NewFieldTypeOptionLoader(databaseId: gridView.id);
+      loader = NewFieldTypeOptionLoader(viewId: gridView.id);
     } else {
     } else {
-      loader = FieldTypeOptionLoader(
-          databaseId: gridView.id, field: fieldInfo.field);
+      loader =
+          FieldTypeOptionLoader(viewId: gridView.id, field: fieldInfo.field);
     }
     }
 
 
     final editorBloc = FieldEditorBloc(
     final editorBloc = FieldEditorBloc(
@@ -144,7 +144,7 @@ class BoardTestContext {
 
 
   GridFieldCellContext singleSelectFieldCellContext() {
   GridFieldCellContext singleSelectFieldCellContext() {
     final field = singleSelectFieldContext().field;
     final field = singleSelectFieldContext().field;
-    return GridFieldCellContext(databaseId: gridView.id, field: field);
+    return GridFieldCellContext(viewId: gridView.id, field: field);
   }
   }
 
 
   FieldInfo textFieldContext() {
   FieldInfo textFieldContext() {

+ 2 - 2
frontend/app_flowy/test/bloc_test/grid_test/field/edit_field_test.dart

@@ -8,7 +8,7 @@ Future<FieldEditorBloc> createEditorBloc(AppFlowyGridTest gridTest) async {
   final context = await gridTest.createTestGrid();
   final context = await gridTest.createTestGrid();
   final fieldInfo = context.singleSelectFieldContext();
   final fieldInfo = context.singleSelectFieldContext();
   final loader = FieldTypeOptionLoader(
   final loader = FieldTypeOptionLoader(
-    databaseId: context.gridView.id,
+    viewId: context.gridView.id,
     field: fieldInfo.field,
     field: fieldInfo.field,
   );
   );
 
 
@@ -78,7 +78,7 @@ Future<FieldEditorBloc> makeEditorBloc(AppFlowyGridTest gridTest) async {
   final context = await gridTest.createTestGrid();
   final context = await gridTest.createTestGrid();
   final fieldInfo = context.singleSelectFieldContext();
   final fieldInfo = context.singleSelectFieldContext();
   final loader = FieldTypeOptionLoader(
   final loader = FieldTypeOptionLoader(
-    databaseId: context.gridView.id,
+    viewId: context.gridView.id,
     field: fieldInfo.field,
     field: fieldInfo.field,
   );
   );
 
 

+ 7 - 7
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 {
   test('create a text filter)', () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     await service.insertTextFilter(
     await service.insertTextFilter(
         fieldId: textField.id,
         fieldId: textField.id,
@@ -28,7 +28,7 @@ void main() {
 
 
   test('delete a text filter)', () async {
   test('delete a text filter)', () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     await service.insertTextFilter(
     await service.insertTextFilter(
         fieldId: textField.id,
         fieldId: textField.id,
@@ -49,7 +49,7 @@ void main() {
 
 
   test('filter rows with condition: text is empty', () async {
   test('filter rows with condition: text is empty', () async {
     final context = await gridTest.createTestGrid();
     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 gridController = GridController(view: context.gridView);
     final gridBloc = GridBloc(
     final gridBloc = GridBloc(
       view: context.gridView,
       view: context.gridView,
@@ -70,7 +70,7 @@ void main() {
   test('filter rows with condition: text is empty(After edit the row)',
   test('filter rows with condition: text is empty(After edit the row)',
       () async {
       () async {
     final context = await gridTest.createTestGrid();
     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 gridController = GridController(view: context.gridView);
     final gridBloc = GridBloc(
     final gridBloc = GridBloc(
       view: context.gridView,
       view: context.gridView,
@@ -97,7 +97,7 @@ void main() {
 
 
   test('filter rows with condition: text is not empty', () async {
   test('filter rows with condition: text is not empty', () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     await gridResponseFuture();
     await gridResponseFuture();
     await service.insertTextFilter(
     await service.insertTextFilter(
@@ -111,7 +111,7 @@ void main() {
   test('filter rows with condition: checkbox uncheck', () async {
   test('filter rows with condition: checkbox uncheck', () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
     final checkboxField = context.checkboxFieldContext();
     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 gridController = GridController(view: context.gridView);
     final gridBloc = GridBloc(
     final gridBloc = GridBloc(
       view: context.gridView,
       view: context.gridView,
@@ -130,7 +130,7 @@ void main() {
   test('filter rows with condition: checkbox check', () async {
   test('filter rows with condition: checkbox check', () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
     final checkboxField = context.checkboxFieldContext();
     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 gridController = GridController(view: context.gridView);
     final gridBloc = GridBloc(
     final gridBloc = GridBloc(
       view: context.gridView,
       view: context.gridView,

+ 2 - 2
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 {
   test("create a text filter and then alter the filter's field)", () async {
     final context = await gridTest.createTestGrid();
     final context = await gridTest.createTestGrid();
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
 
 
     // Create the filter menu bloc
     // Create the filter menu bloc
@@ -35,7 +35,7 @@ void main() {
 
 
     // Edit the text field
     // Edit the text field
     final loader = FieldTypeOptionLoader(
     final loader = FieldTypeOptionLoader(
-      databaseId: context.gridView.id,
+      viewId: context.gridView.id,
       field: textField.field,
       field: textField.field,
     );
     );
 
 

+ 2 - 2
frontend/app_flowy/test/bloc_test/grid_test/filter/filter_menu_test.dart

@@ -19,7 +19,7 @@ void main() {
     await gridResponseFuture();
     await gridResponseFuture();
     assert(menuBloc.state.creatableFields.length == 3);
     assert(menuBloc.state.creatableFields.length == 3);
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     await service.insertTextFilter(
     await service.insertTextFilter(
         fieldId: textField.id,
         fieldId: textField.id,
@@ -36,7 +36,7 @@ void main() {
       ..add(const GridFilterMenuEvent.initial());
       ..add(const GridFilterMenuEvent.initial());
     await gridResponseFuture();
     await gridResponseFuture();
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
 
 
     // Create filter
     // Create filter

+ 2 - 2
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 {
   test('filter rows by checkbox is check condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     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);
     final controller = await context.makeCheckboxCellController(0);
     controller.saveCellData("Yes");
     controller.saveCellData("Yes");
@@ -32,7 +32,7 @@ void main() {
 
 
   test('filter rows by checkbox is uncheck condition)', () async {
   test('filter rows by checkbox is uncheck condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     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);
     final controller = await context.makeCheckboxCellController(0);
     controller.saveCellData("Yes");
     controller.saveCellData("Yes");

+ 4 - 4
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 {
   test('filter rows by text is empty condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     final context = await createTestFilterGrid(gridTest);
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     // create a new filter
     // create a new filter
     await service.insertTextFilter(
     await service.insertTextFilter(
@@ -41,7 +41,7 @@ void main() {
   test('filter rows by text is not empty condition)', () async {
   test('filter rows by text is not empty condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     final context = await createTestFilterGrid(gridTest);
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     // create a new filter
     // create a new filter
     await service.insertTextFilter(
     await service.insertTextFilter(
@@ -66,7 +66,7 @@ void main() {
   test('filter rows by text is empty or is not empty condition)', () async {
   test('filter rows by text is empty or is not empty condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     final context = await createTestFilterGrid(gridTest);
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     // create a new filter
     // create a new filter
     await service.insertTextFilter(
     await service.insertTextFilter(
@@ -102,7 +102,7 @@ void main() {
   test('filter rows by text is condition)', () async {
   test('filter rows by text is condition)', () async {
     final context = await createTestFilterGrid(gridTest);
     final context = await createTestFilterGrid(gridTest);
 
 
-    final service = FilterFFIService(databaseId: context.gridView.id);
+    final service = FilterFFIService(viewId: context.gridView.id);
     final textField = context.textFieldContext();
     final textField = context.textFieldContext();
     // create a new filter
     // create a new filter
     await service.insertTextFilter(
     await service.insertTextFilter(

+ 4 - 4
frontend/app_flowy/test/bloc_test/grid_test/util.dart

@@ -39,10 +39,10 @@ class GridTestContext {
   }) {
   }) {
     IFieldTypeOptionLoader loader;
     IFieldTypeOptionLoader loader;
     if (fieldInfo == null) {
     if (fieldInfo == null) {
-      loader = NewFieldTypeOptionLoader(databaseId: gridView.id);
+      loader = NewFieldTypeOptionLoader(viewId: gridView.id);
     } else {
     } else {
-      loader = FieldTypeOptionLoader(
-          databaseId: gridView.id, field: fieldInfo.field);
+      loader =
+          FieldTypeOptionLoader(viewId: gridView.id, field: fieldInfo.field);
     }
     }
 
 
     final editorBloc = FieldEditorBloc(
     final editorBloc = FieldEditorBloc(
@@ -104,7 +104,7 @@ class GridTestContext {
 
 
   GridFieldCellContext singleSelectFieldCellContext() {
   GridFieldCellContext singleSelectFieldCellContext() {
     final field = singleSelectFieldContext().field;
     final field = singleSelectFieldContext().field;
-    return GridFieldCellContext(databaseId: gridView.id, field: field);
+    return GridFieldCellContext(viewId: gridView.id, field: field);
   }
   }
 
 
   FieldInfo textFieldContext() {
   FieldInfo textFieldContext() {

+ 15 - 15
frontend/appflowy_tauri/src-tauri/Cargo.lock

@@ -849,6 +849,18 @@ dependencies = [
  "parking_lot_core",
  "parking_lot_core",
 ]
 ]
 
 
+[[package]]
+name = "database-model"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "indexmap",
+ "nanoid",
+ "serde",
+ "serde_json",
+ "serde_repr",
+]
+
 [[package]]
 [[package]]
 name = "derivative"
 name = "derivative"
 version = "2.2.0"
 version = "2.2.0"
@@ -1132,12 +1144,12 @@ version = "0.1.0"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
  "chrono",
  "chrono",
+ "database-model",
  "dissimilar",
  "dissimilar",
  "document-model",
  "document-model",
  "flowy-derive",
  "flowy-derive",
  "flowy-sync",
  "flowy-sync",
  "folder-model",
  "folder-model",
- "grid-model",
  "lib-infra",
  "lib-infra",
  "lib-ot",
  "lib-ot",
  "parking_lot",
  "parking_lot",
@@ -1195,6 +1207,7 @@ name = "flowy-core"
 version = "0.1.0"
 version = "0.1.0"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
+ "database-model",
  "flowy-client-ws",
  "flowy-client-ws",
  "flowy-database",
  "flowy-database",
  "flowy-document",
  "flowy-document",
@@ -1206,7 +1219,6 @@ dependencies = [
  "flowy-task",
  "flowy-task",
  "flowy-user",
  "flowy-user",
  "futures-core",
  "futures-core",
- "grid-model",
  "lib-dispatch",
  "lib-dispatch",
  "lib-infra",
  "lib-infra",
  "lib-log",
  "lib-log",
@@ -1230,6 +1242,7 @@ dependencies = [
  "chrono",
  "chrono",
  "crossbeam-utils",
  "crossbeam-utils",
  "dashmap",
  "dashmap",
+ "database-model",
  "diesel",
  "diesel",
  "fancy-regex 0.10.0",
  "fancy-regex 0.10.0",
  "flowy-client-sync",
  "flowy-client-sync",
@@ -1242,7 +1255,6 @@ dependencies = [
  "flowy-sqlite",
  "flowy-sqlite",
  "flowy-task",
  "flowy-task",
  "futures",
  "futures",
- "grid-model",
  "indexmap",
  "indexmap",
  "lazy_static",
  "lazy_static",
  "lib-dispatch",
  "lib-dispatch",
@@ -1960,18 +1972,6 @@ dependencies = [
  "system-deps 6.0.3",
  "system-deps 6.0.3",
 ]
 ]
 
 
-[[package]]
-name = "grid-model"
-version = "0.1.0"
-dependencies = [
- "bytes",
- "indexmap",
- "nanoid",
- "serde",
- "serde_json",
- "serde_repr",
-]
-
 [[package]]
 [[package]]
 name = "gtk"
 name = "gtk"
 version = "0.15.5"
 version = "0.15.5"

+ 3 - 3
frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/backend_service.ts

@@ -3,7 +3,7 @@ import {
   DatabaseEventGetDatabase,
   DatabaseEventGetDatabase,
   DatabaseEventGetFields,
   DatabaseEventGetFields,
 } from '../../../../services/backend/events/flowy-database/event';
 } 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 { CreateRowPayloadPB } from '../../../../services/backend/models/flowy-database/row_entities';
 import {
 import {
   GetFieldPayloadPB,
   GetFieldPayloadPB,
@@ -21,7 +21,7 @@ export class DatabaseBackendService {
   }
   }
 
 
   openDatabase = async () => {
   openDatabase = async () => {
-    const payload = DatabaseIdPB.fromObject({
+    const payload = DatabaseViewIdPB.fromObject({
       value: this.viewId,
       value: this.viewId,
     });
     });
     return DatabaseEventGetDatabase(payload);
     return DatabaseEventGetDatabase(payload);
@@ -39,7 +39,7 @@ export class DatabaseBackendService {
   };
   };
 
 
   getFields = async (fieldIds?: FieldIdPB[]) => {
   getFields = async (fieldIds?: FieldIdPB[]) => {
-    const payload = GetFieldPayloadPB.fromObject({ database_id: this.viewId });
+    const payload = GetFieldPayloadPB.fromObject({ view_id: this.viewId });
 
 
     if (!fieldIds) {
     if (!fieldIds) {
       payload.field_ids = RepeatedFieldIdPB.fromObject({ items: fieldIds });
       payload.field_ids = RepeatedFieldIdPB.fromObject({ items: fieldIds });

+ 6 - 6
frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/backend_service.ts

@@ -19,7 +19,7 @@ export abstract class TypeOptionParser<T> {
 }
 }
 
 
 export class FieldBackendService {
 export class FieldBackendService {
-  constructor(public readonly databaseId: string, public readonly fieldId: string) {}
+  constructor(public readonly viewId: string, public readonly fieldId: string) {}
 
 
   updateField = (data: {
   updateField = (data: {
     name?: string;
     name?: string;
@@ -28,7 +28,7 @@ export class FieldBackendService {
     visibility?: boolean;
     visibility?: boolean;
     width?: number;
     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) {
     if (data.name !== undefined) {
       payload.name = data.name;
       payload.name = data.name;
@@ -55,7 +55,7 @@ export class FieldBackendService {
 
 
   updateTypeOption = (typeOptionData: Uint8Array) => {
   updateTypeOption = (typeOptionData: Uint8Array) => {
     const payload = TypeOptionChangesetPB.fromObject({
     const payload = TypeOptionChangesetPB.fromObject({
-      database_id: this.databaseId,
+      view_id: this.viewId,
       field_id: this.fieldId,
       field_id: this.fieldId,
       type_option_data: typeOptionData,
       type_option_data: typeOptionData,
     });
     });
@@ -64,20 +64,20 @@ export class FieldBackendService {
   };
   };
 
 
   deleteField = () => {
   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);
     return DatabaseEventDeleteField(payload);
   };
   };
 
 
   duplicateField = () => {
   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);
     return DatabaseEventDuplicateField(payload);
   };
   };
 
 
   getTypeOptionData = (fieldType: FieldType) => {
   getTypeOptionData = (fieldType: FieldType) => {
     const payload = TypeOptionPathPB.fromObject({
     const payload = TypeOptionPathPB.fromObject({
-      database_id: this.databaseId,
+      view_id: this.viewId,
       field_id: this.fieldId,
       field_id: this.fieldId,
       field_type: fieldType,
       field_type: fieldType,
     });
     });

+ 15 - 15
frontend/rust-lib/Cargo.lock

@@ -695,6 +695,18 @@ dependencies = [
  "parking_lot 0.12.1",
  "parking_lot 0.12.1",
 ]
 ]
 
 
+[[package]]
+name = "database-model"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "indexmap",
+ "nanoid",
+ "serde",
+ "serde_json",
+ "serde_repr",
+]
+
 [[package]]
 [[package]]
 name = "derivative"
 name = "derivative"
 version = "2.2.0"
 version = "2.2.0"
@@ -921,12 +933,12 @@ version = "0.1.0"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
  "chrono",
  "chrono",
+ "database-model",
  "dissimilar",
  "dissimilar",
  "document-model",
  "document-model",
  "flowy-derive",
  "flowy-derive",
  "flowy-sync",
  "flowy-sync",
  "folder-model",
  "folder-model",
- "grid-model",
  "lib-infra",
  "lib-infra",
  "lib-ot",
  "lib-ot",
  "parking_lot 0.12.1",
  "parking_lot 0.12.1",
@@ -984,6 +996,7 @@ name = "flowy-core"
 version = "0.1.0"
 version = "0.1.0"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
+ "database-model",
  "flowy-client-ws",
  "flowy-client-ws",
  "flowy-database",
  "flowy-database",
  "flowy-document",
  "flowy-document",
@@ -995,7 +1008,6 @@ dependencies = [
  "flowy-task",
  "flowy-task",
  "flowy-user",
  "flowy-user",
  "futures-core",
  "futures-core",
- "grid-model",
  "lib-dispatch",
  "lib-dispatch",
  "lib-infra",
  "lib-infra",
  "lib-log",
  "lib-log",
@@ -1019,6 +1031,7 @@ dependencies = [
  "chrono",
  "chrono",
  "crossbeam-utils",
  "crossbeam-utils",
  "dashmap",
  "dashmap",
+ "database-model",
  "diesel",
  "diesel",
  "fancy-regex 0.10.0",
  "fancy-regex 0.10.0",
  "flowy-client-sync",
  "flowy-client-sync",
@@ -1033,7 +1046,6 @@ dependencies = [
  "flowy-task",
  "flowy-task",
  "flowy-test",
  "flowy-test",
  "futures",
  "futures",
- "grid-model",
  "indexmap",
  "indexmap",
  "lazy_static",
  "lazy_static",
  "lib-dispatch",
  "lib-dispatch",
@@ -1613,18 +1625,6 @@ dependencies = [
  "walkdir",
  "walkdir",
 ]
 ]
 
 
-[[package]]
-name = "grid-model"
-version = "0.1.0"
-dependencies = [
- "bytes",
- "indexmap",
- "nanoid",
- "serde",
- "serde_json",
- "serde_repr",
-]
-
 [[package]]
 [[package]]
 name = "h2"
 name = "h2"
 version = "0.3.15"
 version = "0.3.15"

+ 1 - 1
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" }
 lib-infra = { path = "../../../shared-lib/lib-infra" }
 flowy-derive = { path = "../flowy-derive" }
 flowy-derive = { path = "../flowy-derive" }
 folder-model = { path = "../../../shared-lib/folder-model" }
 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" }
 revision-model = { path = "../../../shared-lib/revision-model" }
 document-model = { path = "../../../shared-lib/document-model" }
 document-model = { path = "../../../shared-lib/document-model" }
 flowy-sync = { path = "../../../shared-lib/flowy-sync" }
 flowy-sync = { path = "../../../shared-lib/flowy-sync" }

+ 49 - 36
frontend/rust-lib/flowy-client-sync/src/client_database/block_revision_pad.rs

@@ -1,26 +1,27 @@
 use crate::errors::{SyncError, SyncResult};
 use crate::errors::{SyncError, SyncResult};
 use crate::util::cal_diff;
 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,
   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_infra::util::md5;
 use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
 use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
 use revision_model::Revision;
 use revision_model::Revision;
+use std::any::type_name;
 use std::borrow::Cow;
 use std::borrow::Cow;
 use std::collections::HashMap;
 use std::collections::HashMap;
 use std::sync::Arc;
 use std::sync::Arc;
 
 
-pub type GridBlockOperations = DeltaOperations<EmptyAttributes>;
-pub type GridBlockOperationsBuilder = DeltaBuilder;
+pub type DatabaseBlockOperations = DeltaOperations<EmptyAttributes>;
+pub type DatabaseBlockOperationsBuilder = DeltaBuilder;
 
 
 #[derive(Debug, Clone)]
 #[derive(Debug, Clone)]
-pub struct GridBlockRevisionPad {
+pub struct DatabaseBlockRevisionPad {
   block: DatabaseBlockRevision,
   block: DatabaseBlockRevision,
-  operations: GridBlockOperations,
+  operations: DatabaseBlockOperations,
 }
 }
 
 
-impl std::ops::Deref for GridBlockRevisionPad {
+impl std::ops::Deref for DatabaseBlockRevisionPad {
   type Target = DatabaseBlockRevision;
   type Target = DatabaseBlockRevision;
 
 
   fn deref(&self) -> &Self::Target {
   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 {
   pub fn duplicate_data(&self, duplicated_block_id: &str) -> DatabaseBlockRevision {
     let duplicated_rows = self
     let duplicated_rows = self
       .block
       .block
@@ -47,10 +48,14 @@ impl GridBlockRevisionPad {
     }
     }
   }
   }
 
 
-  pub fn from_operations(operations: GridBlockOperations) -> SyncResult<Self> {
+  pub fn from_operations(operations: DatabaseBlockOperations) -> SyncResult<Self> {
     let s = operations.content()?;
     let s = operations.content()?;
     let revision: DatabaseBlockRevision = serde_json::from_str(&s).map_err(|e| {
     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::<DatabaseBlockRevision>(),
+        e
+      );
       tracing::error!("{}", s);
       tracing::error!("{}", s);
       SyncError::internal().context(msg)
       SyncError::internal().context(msg)
     })?;
     })?;
@@ -60,8 +65,8 @@ impl GridBlockRevisionPad {
     })
     })
   }
   }
 
 
-  pub fn from_revisions(_grid_id: &str, revisions: Vec<Revision>) -> SyncResult<Self> {
-    let operations: GridBlockOperations = make_operations_from_revisions(revisions)?;
+  pub fn from_revisions(revisions: Vec<Revision>) -> SyncResult<Self> {
+    let operations: DatabaseBlockOperations = make_operations_from_revisions(revisions)?;
     Self::from_operations(operations)
     Self::from_operations(operations)
   }
   }
 
 
@@ -70,7 +75,7 @@ impl GridBlockRevisionPad {
     &mut self,
     &mut self,
     row: RowRevision,
     row: RowRevision,
     start_row_id: Option<String>,
     start_row_id: Option<String>,
-  ) -> SyncResult<Option<GridBlockRevisionChangeset>> {
+  ) -> SyncResult<Option<DatabaseBlockRevisionChangeset>> {
     self.modify(|rows| {
     self.modify(|rows| {
       if let Some(start_row_id) = start_row_id {
       if let Some(start_row_id) = start_row_id {
         if !start_row_id.is_empty() {
         if !start_row_id.is_empty() {
@@ -89,7 +94,7 @@ impl GridBlockRevisionPad {
   pub fn delete_rows(
   pub fn delete_rows(
     &mut self,
     &mut self,
     row_ids: Vec<Cow<'_, String>>,
     row_ids: Vec<Cow<'_, String>>,
-  ) -> SyncResult<Option<GridBlockRevisionChangeset>> {
+  ) -> SyncResult<Option<DatabaseBlockRevisionChangeset>> {
     self.modify(|rows| {
     self.modify(|rows| {
       rows.retain(|row| !row_ids.contains(&Cow::Borrowed(&row.id)));
       rows.retain(|row| !row_ids.contains(&Cow::Borrowed(&row.id)));
       Ok(Some(()))
       Ok(Some(()))
@@ -168,7 +173,7 @@ impl GridBlockRevisionPad {
   pub fn update_row(
   pub fn update_row(
     &mut self,
     &mut self,
     changeset: RowChangeset,
     changeset: RowChangeset,
-  ) -> SyncResult<Option<GridBlockRevisionChangeset>> {
+  ) -> SyncResult<Option<DatabaseBlockRevisionChangeset>> {
     let row_id = changeset.row_id.clone();
     let row_id = changeset.row_id.clone();
     self.modify_row(&row_id, |row| {
     self.modify_row(&row_id, |row| {
       let mut is_changed = None;
       let mut is_changed = None;
@@ -201,7 +206,7 @@ impl GridBlockRevisionPad {
     row_id: &str,
     row_id: &str,
     from: usize,
     from: usize,
     to: usize,
     to: usize,
-  ) -> SyncResult<Option<GridBlockRevisionChangeset>> {
+  ) -> SyncResult<Option<DatabaseBlockRevisionChangeset>> {
     self.modify(|row_revs| {
     self.modify(|row_revs| {
       if let Some(position) = row_revs.iter().position(|row_rev| row_rev.id == row_id) {
       if let Some(position) = row_revs.iter().position(|row_rev| row_rev.id == row_id) {
         debug_assert_eq!(from, position);
         debug_assert_eq!(from, position);
@@ -218,7 +223,7 @@ impl GridBlockRevisionPad {
     })
     })
   }
   }
 
 
-  pub fn modify<F>(&mut self, f: F) -> SyncResult<Option<GridBlockRevisionChangeset>>
+  pub fn modify<F>(&mut self, f: F) -> SyncResult<Option<DatabaseBlockRevisionChangeset>>
   where
   where
     F: for<'a> FnOnce(&'a mut Vec<Arc<RowRevision>>) -> SyncResult<Option<()>>,
     F: for<'a> FnOnce(&'a mut Vec<Arc<RowRevision>>) -> SyncResult<Option<()>>,
   {
   {
@@ -232,11 +237,12 @@ impl GridBlockRevisionPad {
           None => Ok(None),
           None => Ok(None),
           Some(operations) => {
           Some(operations) => {
             tracing::trace!(
             tracing::trace!(
-              "[GridBlockRevision] Composing operations {}",
+              "[{}] Composing operations {}",
+              type_name::<DatabaseBlockRevision>(),
               operations.json_str()
               operations.json_str()
             );
             );
             self.operations = self.operations.compose(&operations)?;
             self.operations = self.operations.compose(&operations)?;
-            Ok(Some(GridBlockRevisionChangeset {
+            Ok(Some(DatabaseBlockRevisionChangeset {
               operations,
               operations,
               md5: md5(&self.operations.json_bytes()),
               md5: md5(&self.operations.json_bytes()),
             }))
             }))
@@ -246,7 +252,11 @@ impl GridBlockRevisionPad {
     }
     }
   }
   }
 
 
-  fn modify_row<F>(&mut self, row_id: &str, f: F) -> SyncResult<Option<GridBlockRevisionChangeset>>
+  fn modify_row<F>(
+    &mut self,
+    row_id: &str,
+    f: F,
+  ) -> SyncResult<Option<DatabaseBlockRevisionChangeset>>
   where
   where
     F: FnOnce(&mut RowRevision) -> SyncResult<Option<()>>,
     F: FnOnce(&mut RowRevision) -> SyncResult<Option<()>>,
   {
   {
@@ -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.
   /// md5: the md5 of the grid after applying the change.
   pub md5: String,
   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();
   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,
   _user_id: &str,
-  grid_block_meta_data: &DatabaseBlockRevision,
+  database_block_meta_data: &DatabaseBlockRevision,
 ) -> Vec<Revision> {
 ) -> Vec<Revision> {
-  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 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]
   vec![revision]
 }
 }
 
 
-impl std::default::Default for GridBlockRevisionPad {
+impl std::default::Default for DatabaseBlockRevisionPad {
   fn default() -> Self {
   fn default() -> Self {
     let block_revision = DatabaseBlockRevision {
     let block_revision = DatabaseBlockRevision {
       block_id: gen_block_id(),
       block_id: gen_block_id(),
@@ -299,7 +311,7 @@ impl std::default::Default for GridBlockRevisionPad {
     };
     };
 
 
     let operations = make_database_block_operations(&block_revision);
     let operations = make_database_block_operations(&block_revision);
-    GridBlockRevisionPad {
+    DatabaseBlockRevisionPad {
       block: block_revision,
       block: block_revision,
       operations,
       operations,
     }
     }
@@ -308,8 +320,8 @@ impl std::default::Default for GridBlockRevisionPad {
 
 
 #[cfg(test)]
 #[cfg(test)]
 mod tests {
 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;
   use std::borrow::Cow;
 
 
@@ -365,7 +377,7 @@ mod tests {
     assert_eq!(*pad.rows[2], row_3);
     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 {
     RowRevision {
       id: id.to_string(),
       id: id.to_string(),
       block_id: pad.block_id.clone(),
       block_id: pad.block_id.clone(),
@@ -470,9 +482,10 @@ mod tests {
     );
     );
   }
   }
 
 
-  fn test_pad() -> GridBlockRevisionPad {
+  fn test_pad() -> DatabaseBlockRevisionPad {
     let operations =
     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()
   }
   }
 }
 }

+ 4 - 3
frontend/rust-lib/flowy-client-sync/src/client_database/database_builder.rs

@@ -1,6 +1,7 @@
 use crate::errors::{SyncError, SyncResult};
 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;
 use std::sync::Arc;
 
 
@@ -12,7 +13,7 @@ impl std::default::Default for DatabaseBuilder {
   fn default() -> Self {
   fn default() -> Self {
     let mut build_context = BuildDatabaseContext::new();
     let mut build_context = BuildDatabaseContext::new();
 
 
-    let block_meta = GridBlockMetaRevision::new();
+    let block_meta = DatabaseBlockMetaRevision::new();
     let block_meta_data = DatabaseBlockRevision {
     let block_meta_data = DatabaseBlockRevision {
       block_id: block_meta.block_id.clone(),
       block_id: block_meta.block_id.clone(),
       rows: vec![],
       rows: vec![],

+ 43 - 42
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::errors::{internal_sync_error, SyncError, SyncResult};
 use crate::util::cal_diff;
 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::md5;
 use lib_infra::util::move_vec_element;
 use lib_infra::util::move_vec_element;
 use lib_ot::core::{DeltaOperationBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
 use lib_ot::core::{DeltaOperationBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
@@ -17,7 +17,7 @@ pub type DatabaseOperationsBuilder = DeltaOperationBuilder<EmptyAttributes>;
 
 
 #[derive(Clone)]
 #[derive(Clone)]
 pub struct DatabaseRevisionPad {
 pub struct DatabaseRevisionPad {
-  grid_rev: Arc<DatabaseRevision>,
+  database_rev: Arc<DatabaseRevision>,
   operations: DatabaseOperations,
   operations: DatabaseOperations,
 }
 }
 
 
@@ -26,21 +26,22 @@ pub trait JsonDeserializer {
 }
 }
 
 
 impl DatabaseRevisionPad {
 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,
     &self,
-  ) -> (Vec<FieldRevision>, Vec<GridBlockMetaRevision>) {
+  ) -> (Vec<FieldRevision>, Vec<DatabaseBlockMetaRevision>) {
     let fields = self
     let fields = self
-      .grid_rev
+      .database_rev
       .fields
       .fields
       .iter()
       .iter()
       .map(|field_rev| field_rev.as_ref().clone())
       .map(|field_rev| field_rev.as_ref().clone())
       .collect();
       .collect();
 
 
     let blocks = self
     let blocks = self
-      .grid_rev
+      .database_rev
       .blocks
       .blocks
       .iter()
       .iter()
       .map(|block| {
       .map(|block| {
@@ -48,21 +49,21 @@ impl DatabaseRevisionPad {
         duplicated_block.block_id = gen_block_id();
         duplicated_block.block_id = gen_block_id();
         duplicated_block
         duplicated_block
       })
       })
-      .collect::<Vec<GridBlockMetaRevision>>();
+      .collect::<Vec<DatabaseBlockMetaRevision>>();
 
 
     (fields, blocks)
     (fields, blocks)
   }
   }
 
 
   pub fn from_operations(operations: DatabaseOperations) -> SyncResult<Self> {
   pub fn from_operations(operations: DatabaseOperations) -> SyncResult<Self> {
     let content = operations.content()?;
     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);
       let msg = format!("Deserialize operations to grid failed: {}", e);
       tracing::error!("{}", msg);
       tracing::error!("{}", msg);
       SyncError::internal().context(msg)
       SyncError::internal().context(msg)
     })?;
     })?;
 
 
     Ok(Self {
     Ok(Self {
-      grid_rev: Arc::new(grid),
+      database_rev: Arc::new(database_rev),
       operations,
       operations,
     })
     })
   }
   }
@@ -78,7 +79,7 @@ impl DatabaseRevisionPad {
     new_field_rev: FieldRevision,
     new_field_rev: FieldRevision,
     start_field_id: Option<String>,
     start_field_id: Option<String>,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       // Check if the field exists or not
       // Check if the field exists or not
       if grid_meta
       if grid_meta
         .fields
         .fields
@@ -109,7 +110,7 @@ impl DatabaseRevisionPad {
     &mut self,
     &mut self,
     field_id: &str,
     field_id: &str,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       match grid_meta
       match grid_meta
         .fields
         .fields
         .iter()
         .iter()
@@ -133,7 +134,7 @@ impl DatabaseRevisionPad {
     field_id: &str,
     field_id: &str,
     duplicated_field_id: &str,
     duplicated_field_id: &str,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       match grid_meta
       match grid_meta
         .fields
         .fields
         .iter()
         .iter()
@@ -176,7 +177,7 @@ impl DatabaseRevisionPad {
     T: Into<FieldTypeRevision>,
     T: Into<FieldTypeRevision>,
   {
   {
     let new_field_type = new_field_type.into();
     let new_field_type = new_field_type.into();
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       match grid_meta
       match grid_meta
         .fields
         .fields
         .iter_mut()
         .iter_mut()
@@ -224,7 +225,7 @@ impl DatabaseRevisionPad {
     &mut self,
     &mut self,
     field_rev: Arc<FieldRevision>,
     field_rev: Arc<FieldRevision>,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       match grid_meta
       match grid_meta
         .fields
         .fields
         .iter()
         .iter()
@@ -246,7 +247,7 @@ impl DatabaseRevisionPad {
     from_index: usize,
     from_index: usize,
     to_index: usize,
     to_index: usize,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
       match move_vec_element(
       match move_vec_element(
         &mut grid_meta.fields,
         &mut grid_meta.fields,
         |field| field.id == field_id,
         |field| field.id == field_id,
@@ -263,7 +264,7 @@ impl DatabaseRevisionPad {
 
 
   pub fn contain_field(&self, field_id: &str) -> bool {
   pub fn contain_field(&self, field_id: &str) -> bool {
     self
     self
-      .grid_rev
+      .database_rev
       .fields
       .fields
       .iter()
       .iter()
       .any(|field| field.id == field_id)
       .any(|field| field.id == field_id)
@@ -271,7 +272,7 @@ impl DatabaseRevisionPad {
 
 
   pub fn get_field_rev(&self, field_id: &str) -> Option<(usize, &Arc<FieldRevision>)> {
   pub fn get_field_rev(&self, field_id: &str) -> Option<(usize, &Arc<FieldRevision>)> {
     self
     self
-      .grid_rev
+      .database_rev
       .fields
       .fields
       .iter()
       .iter()
       .enumerate()
       .enumerate()
@@ -283,10 +284,10 @@ impl DatabaseRevisionPad {
     field_ids: Option<Vec<String>>,
     field_ids: Option<Vec<String>>,
   ) -> SyncResult<Vec<Arc<FieldRevision>>> {
   ) -> SyncResult<Vec<Arc<FieldRevision>>> {
     match field_ids {
     match field_ids {
-      None => Ok(self.grid_rev.fields.clone()),
+      None => Ok(self.database_rev.fields.clone()),
       Some(field_ids) => {
       Some(field_ids) => {
         let field_by_field_id = self
         let field_by_field_id = self
-          .grid_rev
+          .database_rev
           .fields
           .fields
           .iter()
           .iter()
           .map(|field| (&field.id, field))
           .map(|field| (&field.id, field))
@@ -309,9 +310,9 @@ impl DatabaseRevisionPad {
 
 
   pub fn create_block_meta_rev(
   pub fn create_block_meta_rev(
     &mut self,
     &mut self,
-    block: GridBlockMetaRevision,
+    block: DatabaseBlockMetaRevision,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
-    self.modify_grid(|grid_meta| {
+    self.modify_database(|grid_meta| {
             if grid_meta.blocks.iter().any(|b| b.block_id == block.block_id) {
             if grid_meta.blocks.iter().any(|b| b.block_id == block.block_id) {
                 tracing::warn!("Duplicate grid block");
                 tracing::warn!("Duplicate grid block");
                 Ok(None)
                 Ok(None)
@@ -333,13 +334,13 @@ impl DatabaseRevisionPad {
         })
         })
   }
   }
 
 
-  pub fn get_block_meta_revs(&self) -> Vec<Arc<GridBlockMetaRevision>> {
-    self.grid_rev.blocks.clone()
+  pub fn get_block_meta_revs(&self) -> Vec<Arc<DatabaseBlockMetaRevision>> {
+    self.database_rev.blocks.clone()
   }
   }
 
 
   pub fn update_block_rev(
   pub fn update_block_rev(
     &mut self,
     &mut self,
-    changeset: GridBlockMetaRevisionChangeset,
+    changeset: DatabaseBlockMetaRevisionChangeset,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
   ) -> SyncResult<Option<DatabaseRevisionChangeset>> {
     let block_id = changeset.block_id.clone();
     let block_id = changeset.block_id.clone();
     self.modify_block(&block_id, |block| {
     self.modify_block(&block_id, |block| {
@@ -368,18 +369,18 @@ impl DatabaseRevisionPad {
   }
   }
 
 
   pub fn get_fields(&self) -> &[Arc<FieldRevision>] {
   pub fn get_fields(&self) -> &[Arc<FieldRevision>] {
-    &self.grid_rev.fields
+    &self.database_rev.fields
   }
   }
 
 
-  fn modify_grid<F>(&mut self, f: F) -> SyncResult<Option<DatabaseRevisionChangeset>>
+  fn modify_database<F>(&mut self, f: F) -> SyncResult<Option<DatabaseRevisionChangeset>>
   where
   where
     F: FnOnce(&mut DatabaseRevision) -> SyncResult<Option<()>>,
     F: FnOnce(&mut DatabaseRevision) -> SyncResult<Option<()>>,
   {
   {
-    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),
       None => Ok(None),
       Some(_) => {
       Some(_) => {
-        let old = make_database_rev_json_str(&cloned_grid)?;
+        let old = make_database_rev_json_str(&cloned_database)?;
         let new = self.json_str()?;
         let new = self.json_str()?;
         match cal_diff::<EmptyAttributes>(old, new) {
         match cal_diff::<EmptyAttributes>(old, new) {
           None => Ok(None),
           None => Ok(None),
@@ -401,9 +402,9 @@ impl DatabaseRevisionPad {
     f: F,
     f: F,
   ) -> SyncResult<Option<DatabaseRevisionChangeset>>
   ) -> SyncResult<Option<DatabaseRevisionChangeset>>
   where
   where
-    F: FnOnce(&mut GridBlockMetaRevision) -> SyncResult<Option<()>>,
+    F: FnOnce(&mut DatabaseBlockMetaRevision) -> SyncResult<Option<()>>,
   {
   {
-    self.modify_grid(|grid_rev| {
+    self.modify_database(|grid_rev| {
       match grid_rev
       match grid_rev
         .blocks
         .blocks
         .iter()
         .iter()
@@ -429,7 +430,7 @@ impl DatabaseRevisionPad {
   where
   where
     F: FnOnce(&mut FieldRevision) -> SyncResult<Option<()>>,
     F: FnOnce(&mut FieldRevision) -> SyncResult<Option<()>>,
   {
   {
-    self.modify_grid(|grid_rev| {
+    self.modify_database(|grid_rev| {
       match grid_rev
       match grid_rev
         .fields
         .fields
         .iter()
         .iter()
@@ -448,7 +449,7 @@ impl DatabaseRevisionPad {
   }
   }
 
 
   pub fn json_str(&self) -> SyncResult<String> {
   pub fn json_str(&self) -> SyncResult<String> {
-    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<Revision> {
 pub fn make_database_revisions(_user_id: &str, grid_rev: &DatabaseRevision) -> Vec<Revision> {
   let operations = make_database_operations(grid_rev);
   let operations = make_database_operations(grid_rev);
   let bytes = operations.json_bytes();
   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]
   vec![revision]
 }
 }
 
 
 impl std::default::Default for DatabaseRevisionPad {
 impl std::default::Default for DatabaseRevisionPad {
   fn default() -> Self {
   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 {
     DatabaseRevisionPad {
-      grid_rev: Arc::new(grid),
+      database_rev: Arc::new(database),
       operations,
       operations,
     }
     }
   }
   }

+ 12 - 16
frontend/rust-lib/flowy-client-sync/src/client_database/view_revision_pad.rs → 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::errors::{internal_sync_error, SyncError, SyncResult};
 use crate::util::cal_diff;
 use crate::util::cal_diff;
-use flowy_sync::util::make_operations_from_revisions;
-use grid_model::{
+use database_model::{
   DatabaseViewRevision, FieldRevision, FieldTypeRevision, FilterRevision,
   DatabaseViewRevision, FieldRevision, FieldTypeRevision, FilterRevision,
   GroupConfigurationRevision, LayoutRevision, SortRevision,
   GroupConfigurationRevision, LayoutRevision, SortRevision,
 };
 };
+use flowy_sync::util::make_operations_from_revisions;
 use lib_infra::util::md5;
 use lib_infra::util::md5;
 use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
 use lib_ot::core::{DeltaBuilder, DeltaOperations, EmptyAttributes, OperationTransform};
 use revision_model::Revision;
 use revision_model::Revision;
@@ -14,12 +14,12 @@ pub type GridViewOperations = DeltaOperations<EmptyAttributes>;
 pub type GridViewOperationsBuilder = DeltaBuilder;
 pub type GridViewOperationsBuilder = DeltaBuilder;
 
 
 #[derive(Debug, Clone)]
 #[derive(Debug, Clone)]
-pub struct GridViewRevisionPad {
+pub struct DatabaseViewRevisionPad {
   view: Arc<DatabaseViewRevision>,
   view: Arc<DatabaseViewRevision>,
   operations: GridViewOperations,
   operations: GridViewOperations,
 }
 }
 
 
-impl std::ops::Deref for GridViewRevisionPad {
+impl std::ops::Deref for DatabaseViewRevisionPad {
   type Target = DatabaseViewRevision;
   type Target = DatabaseViewRevision;
 
 
   fn deref(&self) -> &Self::Target {
   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.
   // 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 json = serde_json::to_string(&view).unwrap();
     let operations = GridViewOperationsBuilder::new().insert(&json).build();
     let operations = GridViewOperationsBuilder::new().insert(&json).build();
     Self { view, operations }
     Self { view, operations }
   }
   }
 
 
-  pub fn from_operations(view_id: &str, operations: GridViewOperations) -> SyncResult<Self> {
+  pub fn from_operations(operations: GridViewOperations) -> SyncResult<Self> {
     if operations.is_empty() {
     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 s = operations.content()?;
     let view: DatabaseViewRevision = serde_json::from_str(&s).map_err(|e| {
     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<Revision>) -> SyncResult<Self> {
+  pub fn from_revisions(revisions: Vec<Revision>) -> SyncResult<Self> {
     let operations: GridViewOperations = make_operations_from_revisions(revisions)?;
     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(
   pub fn get_groups_by_field_revs(

+ 2 - 2
frontend/rust-lib/flowy-client-sync/src/client_database/mod.rs

@@ -1,9 +1,9 @@
 mod block_revision_pad;
 mod block_revision_pad;
 mod database_builder;
 mod database_builder;
 mod database_revision_pad;
 mod database_revision_pad;
-mod view_revision_pad;
+mod database_view_revision_pad;
 
 
 pub use block_revision_pad::*;
 pub use block_revision_pad::*;
 pub use database_builder::*;
 pub use database_builder::*;
 pub use database_revision_pad::*;
 pub use database_revision_pad::*;
-pub use view_revision_pad::*;
+pub use database_view_revision_pad::*;

+ 1 - 1
frontend/rust-lib/flowy-core/Cargo.toml

@@ -12,7 +12,7 @@ flowy-user = { path = "../flowy-user" }
 flowy-net = { path = "../flowy-net" }
 flowy-net = { path = "../flowy-net" }
 flowy-folder = { path = "../flowy-folder" }
 flowy-folder = { path = "../flowy-folder" }
 flowy-database = { path = "../flowy-database" }
 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" }
 user-model = { path = "../../../shared-lib/user-model" }
 flowy-client-ws = { path = "../../../shared-lib/flowy-client-ws" }
 flowy-client-ws = { path = "../../../shared-lib/flowy-client-ws" }
 flowy-sqlite = { path = "../flowy-sqlite", optional = true }
 flowy-sqlite = { path = "../flowy-sqlite", optional = true }

+ 17 - 17
frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs

@@ -1,6 +1,7 @@
 use bytes::Bytes;
 use bytes::Bytes;
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
 
 
+use database_model::BuildDatabaseContext;
 use flowy_client_ws::FlowyWebSocketConnect;
 use flowy_client_ws::FlowyWebSocketConnect;
 use flowy_database::entities::LayoutTypePB;
 use flowy_database::entities::LayoutTypePB;
 use flowy_database::manager::{make_database_view_data, DatabaseManager};
 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_revision::{RevisionWebSocket, WSStateReceiver};
 use flowy_user::services::UserSession;
 use flowy_user::services::UserSession;
 use futures_core::future::BoxFuture;
 use futures_core::future::BoxFuture;
-use grid_model::BuildDatabaseContext;
 use lib_infra::future::{BoxResultFuture, FutureResult};
 use lib_infra::future::{BoxResultFuture, FutureResult};
 use lib_ws::{WSChannel, WSMessageReceiver, WebSocketRawMessage};
 use lib_ws::{WSChannel, WSMessageReceiver, WebSocketRawMessage};
 use revision_model::Revision;
 use revision_model::Revision;
@@ -36,7 +36,7 @@ impl FolderDepsResolver {
     server_config: &ClientServerConfiguration,
     server_config: &ClientServerConfiguration,
     ws_conn: &Arc<FlowyWebSocketConnect>,
     ws_conn: &Arc<FlowyWebSocketConnect>,
     text_block_manager: &Arc<DocumentManager>,
     text_block_manager: &Arc<DocumentManager>,
-    grid_manager: &Arc<DatabaseManager>,
+    database_manager: &Arc<DatabaseManager>,
   ) -> Arc<FolderManager> {
   ) -> Arc<FolderManager> {
     let user: Arc<dyn WorkspaceUser> = Arc::new(WorkspaceUserImpl(user_session.clone()));
     let user: Arc<dyn WorkspaceUser> = Arc::new(WorkspaceUserImpl(user_session.clone()));
     let database: Arc<dyn WorkspaceDatabase> = Arc::new(WorkspaceDatabaseImpl(user_session));
     let database: Arc<dyn WorkspaceDatabase> = Arc::new(WorkspaceDatabaseImpl(user_session));
@@ -47,7 +47,7 @@ impl FolderDepsResolver {
     };
     };
 
 
     let view_data_processor =
     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(
     let folder_manager = Arc::new(
       FolderManager::new(
       FolderManager::new(
         user.clone(),
         user.clone(),
@@ -74,7 +74,7 @@ impl FolderDepsResolver {
 
 
 fn make_view_data_processor(
 fn make_view_data_processor(
   document_manager: Arc<DocumentManager>,
   document_manager: Arc<DocumentManager>,
-  grid_manager: Arc<DatabaseManager>,
+  database_manager: Arc<DatabaseManager>,
 ) -> ViewDataProcessorMap {
 ) -> ViewDataProcessorMap {
   let mut map: HashMap<ViewDataFormatPB, Arc<dyn ViewDataProcessor + Send + Sync>> = HashMap::new();
   let mut map: HashMap<ViewDataFormatPB, Arc<dyn ViewDataProcessor + Send + Sync>> = HashMap::new();
 
 
@@ -86,7 +86,7 @@ fn make_view_data_processor(
       map.insert(data_type, document_processor.clone());
       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
   grid_data_impl
     .data_types()
     .data_types()
     .into_iter()
     .into_iter()
@@ -177,7 +177,7 @@ impl ViewDataProcessor for DocumentViewDataProcessor {
     debug_assert_eq!(layout, ViewLayoutTypePB::Document);
     debug_assert_eq!(layout, ViewLayoutTypePB::Document);
     let view_data = match String::from_utf8(view_data.to_vec()) {
     let view_data = match String::from_utf8(view_data.to_vec()) {
       Ok(content) => match make_transaction_from_document_content(&content) {
       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![],
       },
       },
       Err(_) => vec![],
       Err(_) => vec![],
@@ -259,9 +259,9 @@ impl ViewDataProcessor for GridViewDataProcessor {
   ) -> FutureResult<(), FlowyError> {
   ) -> FutureResult<(), FlowyError> {
     let revision = Revision::initial_revision(view_id, delta_data);
     let revision = Revision::initial_revision(view_id, delta_data);
     let view_id = view_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 {
     FutureResult::new(async move {
-      grid_manager
+      database_manager
         .create_database(view_id, vec![revision])
         .create_database(view_id, vec![revision])
         .await?;
         .await?;
       Ok(())
       Ok(())
@@ -269,20 +269,20 @@ impl ViewDataProcessor for GridViewDataProcessor {
   }
   }
 
 
   fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
   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();
     let view_id = view_id.to_string();
     FutureResult::new(async move {
     FutureResult::new(async move {
-      grid_manager.close_database(view_id).await?;
+      database_manager.close_database(view_id).await?;
       Ok(())
       Ok(())
     })
     })
   }
   }
 
 
   fn get_view_data(&self, view: &ViewPB) -> FutureResult<Bytes, FlowyError> {
   fn get_view_data(&self, view: &ViewPB) -> FutureResult<Bytes, FlowyError> {
-    let grid_manager = self.0.clone();
+    let database_manager = self.0.clone();
     let view_id = view.id.clone();
     let view_id = view.id.clone();
     FutureResult::new(async move {
     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())
       Ok(delta_bytes.into())
     })
     })
   }
   }
@@ -308,9 +308,9 @@ impl ViewDataProcessor for GridViewDataProcessor {
 
 
     let user_id = user_id.to_string();
     let user_id = user_id.to_string();
     let view_id = view_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 {
     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<Bytes, FlowyError> {
   ) -> FutureResult<Bytes, FlowyError> {
     let user_id = user_id.to_string();
     let user_id = user_id.to_string();
     let view_id = view_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 {
     let layout = match layout {
       ViewLayoutTypePB::Grid => LayoutTypePB::Grid,
       ViewLayoutTypePB::Grid => LayoutTypePB::Grid,
@@ -339,7 +339,7 @@ impl ViewDataProcessor for GridViewDataProcessor {
     FutureResult::new(async move {
     FutureResult::new(async move {
       let bytes = Bytes::from(data);
       let bytes = Bytes::from(data);
       let build_context = BuildDatabaseContext::try_from(bytes)?;
       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
     })
     })
   }
   }
 
 

+ 1 - 1
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" }
 flowy-derive = { path = "../flowy-derive" }
 lib-ot = { path = "../../../shared-lib/lib-ot" }
 lib-ot = { path = "../../../shared-lib/lib-ot" }
 lib-infra = { path = "../../../shared-lib/lib-infra" }
 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"}
 flowy-client-sync = { path = "../flowy-client-sync"}
 revision-model = { path = "../../../shared-lib/revision-model" }
 revision-model = { path = "../../../shared-lib/revision-model" }
 flowy-sqlite = { path = "../flowy-sqlite", optional = true }
 flowy-sqlite = { path = "../flowy-sqlite", optional = true }

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/cell_entities.rs

@@ -1,8 +1,8 @@
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::FieldType;
 use crate::entities::FieldType;
+use database_model::{CellRevision, RowChangeset};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::{CellRevision, RowChangeset};
 use std::collections::HashMap;
 use std::collections::HashMap;
 
 
 #[derive(ProtoBuf, Default)]
 #[derive(ProtoBuf, Default)]

+ 41 - 48
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_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::{FieldRevision, FieldTypeRevision};
 use serde_repr::*;
 use serde_repr::*;
 use std::sync::Arc;
 use std::sync::Arc;
 
 
@@ -88,7 +88,7 @@ impl std::convert::From<&Arc<FieldRevision>> for FieldIdPB {
 #[derive(Debug, Clone, Default, ProtoBuf)]
 #[derive(Debug, Clone, Default, ProtoBuf)]
 pub struct DatabaseFieldChangesetPB {
 pub struct DatabaseFieldChangesetPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub inserted_fields: Vec<IndexFieldPB>,
   pub inserted_fields: Vec<IndexFieldPB>,
@@ -103,7 +103,7 @@ pub struct DatabaseFieldChangesetPB {
 impl DatabaseFieldChangesetPB {
 impl DatabaseFieldChangesetPB {
   pub fn insert(database_id: &str, inserted_fields: Vec<IndexFieldPB>) -> Self {
   pub fn insert(database_id: &str, inserted_fields: Vec<IndexFieldPB>) -> Self {
     Self {
     Self {
-      database_id: database_id.to_owned(),
+      view_id: database_id.to_owned(),
       inserted_fields,
       inserted_fields,
       deleted_fields: vec![],
       deleted_fields: vec![],
       updated_fields: vec![],
       updated_fields: vec![],
@@ -112,7 +112,7 @@ impl DatabaseFieldChangesetPB {
 
 
   pub fn delete(database_id: &str, deleted_fields: Vec<FieldIdPB>) -> Self {
   pub fn delete(database_id: &str, deleted_fields: Vec<FieldIdPB>) -> Self {
     Self {
     Self {
-      database_id: database_id.to_string(),
+      view_id: database_id.to_string(),
       inserted_fields: vec![],
       inserted_fields: vec![],
       deleted_fields,
       deleted_fields,
       updated_fields: vec![],
       updated_fields: vec![],
@@ -121,7 +121,7 @@ impl DatabaseFieldChangesetPB {
 
 
   pub fn update(database_id: &str, updated_fields: Vec<FieldPB>) -> Self {
   pub fn update(database_id: &str, updated_fields: Vec<FieldPB>) -> Self {
     Self {
     Self {
-      database_id: database_id.to_string(),
+      view_id: database_id.to_string(),
       inserted_fields: vec![],
       inserted_fields: vec![],
       deleted_fields: vec![],
       deleted_fields: vec![],
       updated_fields,
       updated_fields,
@@ -150,7 +150,7 @@ impl IndexFieldPB {
 #[derive(Debug, Default, ProtoBuf)]
 #[derive(Debug, Default, ProtoBuf)]
 pub struct CreateFieldPayloadPB {
 pub struct CreateFieldPayloadPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub field_type: FieldType,
   pub field_type: FieldType,
@@ -161,7 +161,7 @@ pub struct CreateFieldPayloadPB {
 
 
 #[derive(Clone)]
 #[derive(Clone)]
 pub struct CreateFieldParams {
 pub struct CreateFieldParams {
-  pub database_id: String,
+  pub view_id: String,
   pub field_type: FieldType,
   pub field_type: FieldType,
   pub type_option_data: Option<Vec<u8>>,
   pub type_option_data: Option<Vec<u8>>,
 }
 }
@@ -170,10 +170,9 @@ impl TryInto<CreateFieldParams> for CreateFieldPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<CreateFieldParams, Self::Error> {
   fn try_into(self) -> Result<CreateFieldParams, Self::Error> {
-    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 {
     Ok(CreateFieldParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_type: self.field_type,
       field_type: self.field_type,
       type_option_data: self.type_option_data,
       type_option_data: self.type_option_data,
     })
     })
@@ -183,7 +182,7 @@ impl TryInto<CreateFieldParams> for CreateFieldPayloadPB {
 #[derive(Debug, Default, ProtoBuf)]
 #[derive(Debug, Default, ProtoBuf)]
 pub struct UpdateFieldTypePayloadPB {
 pub struct UpdateFieldTypePayloadPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub field_id: String,
   pub field_id: String,
@@ -196,7 +195,7 @@ pub struct UpdateFieldTypePayloadPB {
 }
 }
 
 
 pub struct EditFieldParams {
 pub struct EditFieldParams {
-  pub database_id: String,
+  pub view_id: String,
   pub field_id: String,
   pub field_id: String,
   pub field_type: FieldType,
   pub field_type: FieldType,
 }
 }
@@ -205,11 +204,10 @@ impl TryInto<EditFieldParams> for UpdateFieldTypePayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<EditFieldParams, Self::Error> {
   fn try_into(self) -> Result<EditFieldParams, Self::Error> {
-    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)?;
     let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?;
     Ok(EditFieldParams {
     Ok(EditFieldParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_id: field_id.0,
       field_id: field_id.0,
       field_type: self.field_type,
       field_type: self.field_type,
     })
     })
@@ -219,7 +217,7 @@ impl TryInto<EditFieldParams> for UpdateFieldTypePayloadPB {
 #[derive(Debug, Default, ProtoBuf)]
 #[derive(Debug, Default, ProtoBuf)]
 pub struct TypeOptionPathPB {
 pub struct TypeOptionPathPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub field_id: String,
   pub field_id: String,
@@ -229,7 +227,7 @@ pub struct TypeOptionPathPB {
 }
 }
 
 
 pub struct TypeOptionPathParams {
 pub struct TypeOptionPathParams {
-  pub database_id: String,
+  pub view_id: String,
   pub field_id: String,
   pub field_id: String,
   pub field_type: FieldType,
   pub field_type: FieldType,
 }
 }
@@ -238,11 +236,10 @@ impl TryInto<TypeOptionPathParams> for TypeOptionPathPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<TypeOptionPathParams, Self::Error> {
   fn try_into(self) -> Result<TypeOptionPathParams, Self::Error> {
-    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)?;
     let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?;
     Ok(TypeOptionPathParams {
     Ok(TypeOptionPathParams {
-      database_id: database_id.0,
+      view_id: database_id.0,
       field_id: field_id.0,
       field_id: field_id.0,
       field_type: self.field_type,
       field_type: self.field_type,
     })
     })
@@ -252,7 +249,7 @@ impl TryInto<TypeOptionPathParams> for TypeOptionPathPB {
 #[derive(Debug, Default, ProtoBuf)]
 #[derive(Debug, Default, ProtoBuf)]
 pub struct TypeOptionPB {
 pub struct TypeOptionPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub field: FieldPB,
   pub field: FieldPB,
@@ -317,7 +314,7 @@ impl std::convert::From<String> for RepeatedFieldIdPB {
 #[derive(ProtoBuf, Default)]
 #[derive(ProtoBuf, Default)]
 pub struct TypeOptionChangesetPB {
 pub struct TypeOptionChangesetPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub field_id: String,
   pub field_id: String,
@@ -329,7 +326,7 @@ pub struct TypeOptionChangesetPB {
 
 
 #[derive(Clone)]
 #[derive(Clone)]
 pub struct TypeOptionChangesetParams {
 pub struct TypeOptionChangesetParams {
-  pub database_id: String,
+  pub view_id: String,
   pub field_id: String,
   pub field_id: String,
   pub type_option_data: Vec<u8>,
   pub type_option_data: Vec<u8>,
 }
 }
@@ -338,12 +335,11 @@ impl TryInto<TypeOptionChangesetParams> for TypeOptionChangesetPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<TypeOptionChangesetParams, Self::Error> {
   fn try_into(self) -> Result<TypeOptionChangesetParams, Self::Error> {
-    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)?;
     let _ = NotEmptyStr::parse(self.field_id.clone()).map_err(|_| ErrorCode::FieldIdIsEmpty)?;
 
 
     Ok(TypeOptionChangesetParams {
     Ok(TypeOptionChangesetParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_id: self.field_id,
       field_id: self.field_id,
       type_option_data: self.type_option_data,
       type_option_data: self.type_option_data,
     })
     })
@@ -353,14 +349,14 @@ impl TryInto<TypeOptionChangesetParams> for TypeOptionChangesetPB {
 #[derive(ProtoBuf, Default)]
 #[derive(ProtoBuf, Default)]
 pub struct GetFieldPayloadPB {
 pub struct GetFieldPayloadPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2, one_of)]
   #[pb(index = 2, one_of)]
   pub field_ids: Option<RepeatedFieldIdPB>,
   pub field_ids: Option<RepeatedFieldIdPB>,
 }
 }
 
 
 pub struct GetFieldParams {
 pub struct GetFieldParams {
-  pub database_id: String,
+  pub view_id: String,
   pub field_ids: Option<Vec<String>>,
   pub field_ids: Option<Vec<String>>,
 }
 }
 
 
@@ -368,8 +364,7 @@ impl TryInto<GetFieldParams> for GetFieldPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<GetFieldParams, Self::Error> {
   fn try_into(self) -> Result<GetFieldParams, Self::Error> {
-    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| {
     let field_ids = self.field_ids.map(|repeated| {
       repeated
       repeated
         .items
         .items
@@ -379,7 +374,7 @@ impl TryInto<GetFieldParams> for GetFieldPayloadPB {
     });
     });
 
 
     Ok(GetFieldParams {
     Ok(GetFieldParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_ids,
       field_ids,
     })
     })
   }
   }
@@ -624,27 +619,26 @@ pub struct DuplicateFieldPayloadPB {
   pub field_id: String,
   pub field_id: String,
 
 
   #[pb(index = 2)]
   #[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<FieldIdParams> for DuplicateFieldPayloadPB {
 impl TryInto<FieldIdParams> for DuplicateFieldPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<FieldIdParams, Self::Error> {
   fn try_into(self) -> Result<FieldIdParams, Self::Error> {
-    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)?;
     let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?;
     Ok(FieldIdParams {
     Ok(FieldIdParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_id: field_id.0,
       field_id: field_id.0,
     })
     })
   }
   }
@@ -656,18 +650,17 @@ pub struct DeleteFieldPayloadPB {
   pub field_id: String,
   pub field_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
-  pub database_id: String,
+  pub view_id: String,
 }
 }
 
 
 impl TryInto<FieldIdParams> for DeleteFieldPayloadPB {
 impl TryInto<FieldIdParams> for DeleteFieldPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<FieldIdParams, Self::Error> {
   fn try_into(self) -> Result<FieldIdParams, Self::Error> {
-    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)?;
     let field_id = NotEmptyStr::parse(self.field_id).map_err(|_| ErrorCode::FieldIdIsEmpty)?;
     Ok(FieldIdParams {
     Ok(FieldIdParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       field_id: field_id.0,
       field_id: field_id.0,
     })
     })
   }
   }
@@ -675,5 +668,5 @@ impl TryInto<FieldIdParams> for DeleteFieldPayloadPB {
 
 
 pub struct FieldIdParams {
 pub struct FieldIdParams {
   pub field_id: String,
   pub field_id: String,
-  pub database_id: String,
+  pub view_id: String,
 }
 }

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/filter_entities/checkbox_filter.rs

@@ -1,7 +1,7 @@
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct CheckboxFilterPB {
 pub struct CheckboxFilterPB {

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/filter_entities/checklist_filter.rs

@@ -1,7 +1,7 @@
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct ChecklistFilterPB {
 pub struct ChecklistFilterPB {

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/filter_entities/date_filter.rs

@@ -1,7 +1,7 @@
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 use std::str::FromStr;
 use std::str::FromStr;
 
 

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/filter_entities/number_filter.rs

@@ -1,7 +1,7 @@
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct NumberFilterPB {
 pub struct NumberFilterPB {

+ 1 - 1
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::field::SelectOptionIds;
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct SelectOptionFilterPB {
 pub struct SelectOptionFilterPB {

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/filter_entities/text_filter.rs

@@ -1,7 +1,7 @@
 use crate::services::filter::FromFilterString;
 use crate::services::filter::FromFilterString;
+use database_model::FilterRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::FilterRevision;
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct TextFilterPB {
 pub struct TextFilterPB {

+ 1 - 1
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::field::SelectOptionIds;
 use crate::services::filter::FilterType;
 use crate::services::filter::FilterType;
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, FieldTypeRevision, FilterRevision};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::{FieldRevision, FieldTypeRevision, FilterRevision};
 use std::convert::TryInto;
 use std::convert::TryInto;
 use std::sync::Arc;
 use std::sync::Arc;
 
 

+ 2 - 2
frontend/rust-lib/flowy-database/src/entities/grid_entities.rs

@@ -23,12 +23,12 @@ pub struct CreateDatabasePayloadPB {
 }
 }
 
 
 #[derive(Clone, ProtoBuf, Default, Debug)]
 #[derive(Clone, ProtoBuf, Default, Debug)]
-pub struct DatabaseIdPB {
+pub struct DatabaseViewIdPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
   pub value: String,
   pub value: String,
 }
 }
 
 
-impl AsRef<str> for DatabaseIdPB {
+impl AsRef<str> for DatabaseViewIdPB {
   fn as_ref(&self) -> &str {
   fn as_ref(&self) -> &str {
     &self.value
     &self.value
   }
   }

+ 1 - 1
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 flowy_derive::{ProtoBuf, ProtoBuf_Enum};
-use grid_model::{GroupRevision, SelectOptionGroupConfigurationRevision};
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct UrlGroupConfigurationPB {
 pub struct UrlGroupConfigurationPB {

+ 4 - 5
frontend/rust-lib/flowy-database/src/entities/group_entities/group.rs

@@ -1,16 +1,16 @@
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::{CreateRowParams, FieldType, LayoutTypePB, RowPB};
 use crate::entities::{CreateRowParams, FieldType, LayoutTypePB, RowPB};
 use crate::services::group::Group;
 use crate::services::group::Group;
+use database_model::{FieldTypeRevision, GroupConfigurationRevision};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::{FieldTypeRevision, GroupConfigurationRevision};
 use std::convert::TryInto;
 use std::convert::TryInto;
 use std::sync::Arc;
 use std::sync::Arc;
 
 
 #[derive(ProtoBuf, Debug, Default, Clone)]
 #[derive(ProtoBuf, Debug, Default, Clone)]
 pub struct CreateBoardCardPayloadPB {
 pub struct CreateBoardCardPayloadPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub group_id: String,
   pub group_id: String,
@@ -23,8 +23,7 @@ impl TryInto<CreateRowParams> for CreateBoardCardPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<CreateRowParams, Self::Error> {
   fn try_into(self) -> Result<CreateRowParams, Self::Error> {
-    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 group_id = NotEmptyStr::parse(self.group_id).map_err(|_| ErrorCode::GroupIdIsEmpty)?;
     let start_row_id = match self.start_row_id {
     let start_row_id = match self.start_row_id {
       None => None,
       None => None,
@@ -35,7 +34,7 @@ impl TryInto<CreateRowParams> for CreateBoardCardPayloadPB {
       ),
       ),
     };
     };
     Ok(CreateRowParams {
     Ok(CreateRowParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       start_row_id,
       start_row_id,
       group_id: Some(group_id.0),
       group_id: Some(group_id.0),
       layout: LayoutTypePB::Board,
       layout: LayoutTypePB::Board,

+ 9 - 11
frontend/rust-lib/flowy-database/src/entities/row_entities.rs

@@ -1,8 +1,8 @@
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::parser::NotEmptyStr;
 use crate::entities::LayoutTypePB;
 use crate::entities::LayoutTypePB;
+use database_model::RowRevision;
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::RowRevision;
 use std::sync::Arc;
 use std::sync::Arc;
 
 
 /// [RowPB] Describes a row. Has the id of the parent Block. Has the metadata of the row.
 /// [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)]
 #[derive(Debug, Default, Clone, ProtoBuf)]
 pub struct RowIdPB {
 pub struct RowIdPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub row_id: String,
   pub row_id: String,
 }
 }
 
 
 pub struct RowIdParams {
 pub struct RowIdParams {
-  pub database_id: String,
+  pub view_id: String,
   pub row_id: String,
   pub row_id: String,
 }
 }
 
 
@@ -151,12 +151,11 @@ impl TryInto<RowIdParams> for RowIdPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<RowIdParams, Self::Error> {
   fn try_into(self) -> Result<RowIdParams, Self::Error> {
-    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)?;
     let row_id = NotEmptyStr::parse(self.row_id).map_err(|_| ErrorCode::RowIdIsEmpty)?;
 
 
     Ok(RowIdParams {
     Ok(RowIdParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       row_id: row_id.0,
       row_id: row_id.0,
     })
     })
   }
   }
@@ -174,7 +173,7 @@ pub struct BlockRowIdPB {
 #[derive(ProtoBuf, Default)]
 #[derive(ProtoBuf, Default)]
 pub struct CreateRowPayloadPB {
 pub struct CreateRowPayloadPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2, one_of)]
   #[pb(index = 2, one_of)]
   pub start_row_id: Option<String>,
   pub start_row_id: Option<String>,
@@ -182,7 +181,7 @@ pub struct CreateRowPayloadPB {
 
 
 #[derive(Default)]
 #[derive(Default)]
 pub struct CreateRowParams {
 pub struct CreateRowParams {
-  pub database_id: String,
+  pub view_id: String,
   pub start_row_id: Option<String>,
   pub start_row_id: Option<String>,
   pub group_id: Option<String>,
   pub group_id: Option<String>,
   pub layout: LayoutTypePB,
   pub layout: LayoutTypePB,
@@ -192,11 +191,10 @@ impl TryInto<CreateRowParams> for CreateRowPayloadPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<CreateRowParams, Self::Error> {
   fn try_into(self) -> Result<CreateRowParams, Self::Error> {
-    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 {
     Ok(CreateRowParams {
-      database_id: database_id.0,
+      view_id: view_id.0,
       start_row_id: self.start_row_id,
       start_row_id: self.start_row_id,
       group_id: None,
       group_id: None,
       layout: LayoutTypePB::Grid,
       layout: LayoutTypePB::Grid,

+ 5 - 5
frontend/rust-lib/flowy-database/src/entities/setting_entities.rs

@@ -5,9 +5,9 @@ use crate::entities::{
   DeleteSortPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB,
   DeleteSortPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB,
   RepeatedGroupConfigurationPB, RepeatedSortPB,
   RepeatedGroupConfigurationPB, RepeatedSortPB,
 };
 };
+use database_model::LayoutRevision;
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::LayoutRevision;
 use std::convert::TryInto;
 use std::convert::TryInto;
 use strum::IntoEnumIterator;
 use strum::IntoEnumIterator;
 use strum_macros::EnumIter;
 use strum_macros::EnumIter;
@@ -85,7 +85,7 @@ impl std::convert::From<LayoutTypePB> for LayoutRevision {
 #[derive(Default, ProtoBuf)]
 #[derive(Default, ProtoBuf)]
 pub struct DatabaseSettingChangesetPB {
 pub struct DatabaseSettingChangesetPB {
   #[pb(index = 1)]
   #[pb(index = 1)]
-  pub database_id: String,
+  pub view_id: String,
 
 
   #[pb(index = 2)]
   #[pb(index = 2)]
   pub layout_type: LayoutTypePB,
   pub layout_type: LayoutTypePB,
@@ -113,7 +113,7 @@ impl TryInto<DatabaseSettingChangesetParams> for DatabaseSettingChangesetPB {
   type Error = ErrorCode;
   type Error = ErrorCode;
 
 
   fn try_into(self) -> Result<DatabaseSettingChangesetParams, Self::Error> {
   fn try_into(self) -> Result<DatabaseSettingChangesetParams, Self::Error> {
-    let database_id = NotEmptyStr::parse(self.database_id)
+    let view_id = NotEmptyStr::parse(self.view_id)
       .map_err(|_| ErrorCode::ViewIdInvalid)?
       .map_err(|_| ErrorCode::ViewIdInvalid)?
       .0;
       .0;
 
 
@@ -148,7 +148,7 @@ impl TryInto<DatabaseSettingChangesetParams> for DatabaseSettingChangesetPB {
     };
     };
 
 
     Ok(DatabaseSettingChangesetParams {
     Ok(DatabaseSettingChangesetParams {
-      database_id,
+      view_id,
       layout_type: self.layout_type.into(),
       layout_type: self.layout_type.into(),
       insert_filter,
       insert_filter,
       delete_filter,
       delete_filter,
@@ -161,7 +161,7 @@ impl TryInto<DatabaseSettingChangesetParams> for DatabaseSettingChangesetPB {
 }
 }
 
 
 pub struct DatabaseSettingChangesetParams {
 pub struct DatabaseSettingChangesetParams {
-  pub database_id: String,
+  pub view_id: String,
   pub layout_type: LayoutRevision,
   pub layout_type: LayoutRevision,
   pub insert_filter: Option<AlterFilterParams>,
   pub insert_filter: Option<AlterFilterParams>,
   pub delete_filter: Option<DeleteFilterParams>,
   pub delete_filter: Option<DeleteFilterParams>,

+ 1 - 1
frontend/rust-lib/flowy-database/src/entities/sort_entities.rs

@@ -3,9 +3,9 @@ use crate::entities::FieldType;
 use crate::services::sort::SortType;
 use crate::services::sort::SortType;
 use std::sync::Arc;
 use std::sync::Arc;
 
 
+use database_model::{FieldTypeRevision, SortCondition, SortRevision};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::ErrorCode;
 use flowy_error::ErrorCode;
-use grid_model::{FieldTypeRevision, SortCondition, SortRevision};
 
 
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
 pub struct SortPB {
 pub struct SortPB {

+ 30 - 44
frontend/rust-lib/flowy-database/src/event_handler.rs

@@ -8,17 +8,17 @@ use crate::services::field::{
   SelectOptionChangeset, SelectOptionChangesetPB, SelectOptionIds, SelectOptionPB,
   SelectOptionChangeset, SelectOptionChangesetPB, SelectOptionIds, SelectOptionPB,
 };
 };
 use crate::services::row::make_row_from_row_rev;
 use crate::services::row::make_row_from_row_rev;
+use database_model::FieldRevision;
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
-use grid_model::FieldRevision;
 use lib_dispatch::prelude::{data_result, AFPluginData, AFPluginState, DataResult};
 use lib_dispatch::prelude::{data_result, AFPluginData, AFPluginState, DataResult};
 use std::sync::Arc;
 use std::sync::Arc;
 
 
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 pub(crate) async fn get_database_data_handler(
 pub(crate) async fn get_database_data_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<DatabasePB, FlowyError> {
 ) -> DataResult<DatabasePB, 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?;
   let editor = manager.open_database(database_id.as_ref()).await?;
   let database = editor.get_database(database_id.as_ref()).await?;
   let database = editor.get_database(database_id.as_ref()).await?;
   data_result(database)
   data_result(database)
@@ -26,10 +26,10 @@ pub(crate) async fn get_database_data_handler(
 
 
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 pub(crate) async fn get_database_setting_handler(
 pub(crate) async fn get_database_setting_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<DatabaseViewSettingPB, FlowyError> {
 ) -> DataResult<DatabaseViewSettingPB, FlowyError> {
-  let database_id: DatabaseIdPB = data.into_inner();
+  let database_id: DatabaseViewIdPB = data.into_inner();
   let editor = manager.open_database(database_id).await?;
   let editor = manager.open_database(database_id).await?;
   let database_setting = editor.get_setting().await?;
   let database_setting = editor.get_setting().await?;
   data_result(database_setting)
   data_result(database_setting)
@@ -42,7 +42,7 @@ pub(crate) async fn update_database_setting_handler(
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: DatabaseSettingChangesetParams = data.into_inner().try_into()?;
   let params: DatabaseSettingChangesetParams = data.into_inner().try_into()?;
 
 
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   if let Some(insert_params) = params.insert_group {
   if let Some(insert_params) = params.insert_group {
     editor.insert_group(insert_params).await?;
     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)]
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 pub(crate) async fn get_all_filters_handler(
 pub(crate) async fn get_all_filters_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RepeatedFilterPB, FlowyError> {
 ) -> DataResult<RepeatedFilterPB, FlowyError> {
-  let database_id: DatabaseIdPB = data.into_inner();
+  let database_id: DatabaseViewIdPB = data.into_inner();
   let editor = manager.open_database(database_id).await?;
   let editor = manager.open_database(database_id).await?;
   let filters = RepeatedFilterPB {
   let filters = RepeatedFilterPB {
     items: editor.get_all_filters().await?,
     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)]
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 pub(crate) async fn get_all_sorts_handler(
 pub(crate) async fn get_all_sorts_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RepeatedSortPB, FlowyError> {
 ) -> DataResult<RepeatedSortPB, 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?;
   let editor = manager.open_database(database_id.as_ref()).await?;
   let sorts = RepeatedSortPB {
   let sorts = RepeatedSortPB {
     items: editor.get_all_sorts(database_id.as_ref()).await?,
     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)]
 #[tracing::instrument(level = "trace", skip(data, manager), err)]
 pub(crate) async fn delete_all_sorts_handler(
 pub(crate) async fn delete_all_sorts_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> 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?;
   let editor = manager.open_database(database_id.as_ref()).await?;
   editor.delete_all_sorts(database_id.as_ref()).await?;
   editor.delete_all_sorts(database_id.as_ref()).await?;
   Ok(())
   Ok(())
@@ -111,7 +111,7 @@ pub(crate) async fn get_fields_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RepeatedFieldPB, FlowyError> {
 ) -> DataResult<RepeatedFieldPB, FlowyError> {
   let params: GetFieldParams = data.into_inner().try_into()?;
   let params: GetFieldParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   let field_revs = editor.get_field_revs(params.field_ids).await?;
   let field_revs = editor.get_field_revs(params.field_ids).await?;
   let repeated_field: RepeatedFieldPB = field_revs
   let repeated_field: RepeatedFieldPB = field_revs
     .into_iter()
     .into_iter()
@@ -138,15 +138,10 @@ pub(crate) async fn update_field_type_option_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: TypeOptionChangesetParams = data.into_inner().try_into()?;
   let params: TypeOptionChangesetParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   let old_field_rev = editor.get_field_rev(&params.field_id).await;
   let old_field_rev = editor.get_field_rev(&params.field_id).await;
   editor
   editor
-    .update_field_type_option(
-      &params.database_id,
-      &params.field_id,
-      params.type_option_data,
-      old_field_rev,
-    )
+    .update_field_type_option(&params.field_id, params.type_option_data, old_field_rev)
     .await?;
     .await?;
   Ok(())
   Ok(())
 }
 }
@@ -157,7 +152,7 @@ pub(crate) async fn delete_field_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: FieldIdParams = data.into_inner().try_into()?;
   let params: FieldIdParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   editor.delete_field(&params.field_id).await?;
   editor.delete_field(&params.field_id).await?;
   Ok(())
   Ok(())
 }
 }
@@ -168,7 +163,7 @@ pub(crate) async fn switch_to_field_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: EditFieldParams = data.into_inner().try_into()?;
   let params: EditFieldParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   let old_field_rev = editor.get_field_rev(&params.field_id).await;
   let old_field_rev = editor.get_field_rev(&params.field_id).await;
   editor
   editor
     .switch_to_field_type(&params.field_id, &params.field_type)
     .switch_to_field_type(&params.field_id, &params.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
   // Update the type-option data after the field type has been changed
   let type_option_data = get_type_option_data(&new_field_rev, &params.field_type).await?;
   let type_option_data = get_type_option_data(&new_field_rev, &params.field_type).await?;
   editor
   editor
-    .update_field_type_option(
-      &params.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?;
     .await?;
 
 
   Ok(())
   Ok(())
@@ -200,7 +190,7 @@ pub(crate) async fn duplicate_field_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: FieldIdParams = data.into_inner().try_into()?;
   let params: FieldIdParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   editor.duplicate_field(&params.field_id).await?;
   editor.duplicate_field(&params.field_id).await?;
   Ok(())
   Ok(())
 }
 }
@@ -212,14 +202,14 @@ pub(crate) async fn get_field_type_option_data_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<TypeOptionPB, FlowyError> {
 ) -> DataResult<TypeOptionPB, FlowyError> {
   let params: TypeOptionPathParams = data.into_inner().try_into()?;
   let params: TypeOptionPathParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   match editor.get_field_rev(&params.field_id).await {
   match editor.get_field_rev(&params.field_id).await {
     None => Err(FlowyError::record_not_found()),
     None => Err(FlowyError::record_not_found()),
     Some(field_rev) => {
     Some(field_rev) => {
       let field_type = field_rev.ty.into();
       let field_type = field_rev.ty.into();
       let type_option_data = get_type_option_data(&field_rev, &field_type).await?;
       let type_option_data = get_type_option_data(&field_rev, &field_type).await?;
       let data = TypeOptionPB {
       let data = TypeOptionPB {
-        database_id: params.database_id,
+        view_id: params.view_id,
         field: field_rev.into(),
         field: field_rev.into(),
         type_option_data,
         type_option_data,
       };
       };
@@ -235,7 +225,7 @@ pub(crate) async fn create_field_type_option_data_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<TypeOptionPB, FlowyError> {
 ) -> DataResult<TypeOptionPB, FlowyError> {
   let params: CreateFieldParams = data.into_inner().try_into()?;
   let params: CreateFieldParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   let field_rev = editor
   let field_rev = editor
     .create_new_field_rev_with_type_option(&params.field_type, params.type_option_data)
     .create_new_field_rev_with_type_option(&params.field_type, params.type_option_data)
     .await?;
     .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?;
   let type_option_data = get_type_option_data(&field_rev, &field_type).await?;
 
 
   data_result(TypeOptionPB {
   data_result(TypeOptionPB {
-    database_id: params.database_id,
+    view_id: params.view_id,
     field: field_rev.into(),
     field: field_rev.into(),
     type_option_data,
     type_option_data,
   })
   })
@@ -286,7 +276,7 @@ pub(crate) async fn get_row_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<OptionalRowPB, FlowyError> {
 ) -> DataResult<OptionalRowPB, FlowyError> {
   let params: RowIdParams = data.into_inner().try_into()?;
   let params: RowIdParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   let row = editor
   let row = editor
     .get_row_rev(&params.row_id)
     .get_row_rev(&params.row_id)
     .await?
     .await?
@@ -301,7 +291,7 @@ pub(crate) async fn delete_row_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: RowIdParams = data.into_inner().try_into()?;
   let params: RowIdParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   editor.delete_row(&params.row_id).await?;
   editor.delete_row(&params.row_id).await?;
   Ok(())
   Ok(())
 }
 }
@@ -312,7 +302,7 @@ pub(crate) async fn duplicate_row_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> Result<(), FlowyError> {
 ) -> Result<(), FlowyError> {
   let params: RowIdParams = data.into_inner().try_into()?;
   let params: RowIdParams = data.into_inner().try_into()?;
-  let editor = manager.get_database_editor(&params.database_id).await?;
+  let editor = manager.get_database_editor(&params.view_id).await?;
   editor.duplicate_row(&params.row_id).await?;
   editor.duplicate_row(&params.row_id).await?;
   Ok(())
   Ok(())
 }
 }
@@ -334,9 +324,7 @@ pub(crate) async fn create_table_row_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RowPB, FlowyError> {
 ) -> DataResult<RowPB, FlowyError> {
   let params: CreateRowParams = data.into_inner().try_into()?;
   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?;
   let row = editor.create_row(params).await?;
   data_result(row)
   data_result(row)
 }
 }
@@ -531,10 +519,10 @@ pub(crate) async fn update_date_cell_handler(
 
 
 #[tracing::instrument(level = "trace", skip_all, err)]
 #[tracing::instrument(level = "trace", skip_all, err)]
 pub(crate) async fn get_groups_handler(
 pub(crate) async fn get_groups_handler(
-  data: AFPluginData<DatabaseIdPB>,
+  data: AFPluginData<DatabaseViewIdPB>,
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RepeatedGroupPB, FlowyError> {
 ) -> DataResult<RepeatedGroupPB, FlowyError> {
-  let params: DatabaseIdPB = data.into_inner();
+  let params: DatabaseViewIdPB = data.into_inner();
   let editor = manager.get_database_editor(&params.value).await?;
   let editor = manager.get_database_editor(&params.value).await?;
   let group = editor.load_groups().await?;
   let group = editor.load_groups().await?;
   data_result(group)
   data_result(group)
@@ -546,9 +534,7 @@ pub(crate) async fn create_board_card_handler(
   manager: AFPluginState<Arc<DatabaseManager>>,
   manager: AFPluginState<Arc<DatabaseManager>>,
 ) -> DataResult<RowPB, FlowyError> {
 ) -> DataResult<RowPB, FlowyError> {
   let params: CreateRowParams = data.into_inner().try_into()?;
   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?;
   let row = editor.create_row(params).await?;
   data_result(row)
   data_result(row)
 }
 }

+ 8 - 8
frontend/rust-lib/flowy-database/src/event_map.rs

@@ -59,15 +59,15 @@ pub fn init(database_manager: Arc<DatabaseManager>) -> AFPlugin {
 pub enum DatabaseEvent {
 pub enum DatabaseEvent {
   /// [GetDatabase] event is used to get the [DatabasePB]
   /// [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,
   GetDatabase = 0,
 
 
   /// [GetDatabaseSetting] event is used to get the database's settings.
   /// [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.
   /// if there is no errors.
-  #[event(input = "DatabaseIdPB", output = "DatabaseViewSettingPB")]
+  #[event(input = "DatabaseViewIdPB", output = "DatabaseViewSettingPB")]
   GetDatabaseSetting = 2,
   GetDatabaseSetting = 2,
 
 
   /// [UpdateDatabaseSetting] event is used to update the database's settings.
   /// [UpdateDatabaseSetting] event is used to update the database's settings.
@@ -76,13 +76,13 @@ pub enum DatabaseEvent {
   #[event(input = "DatabaseSettingChangesetPB")]
   #[event(input = "DatabaseSettingChangesetPB")]
   UpdateDatabaseSetting = 3,
   UpdateDatabaseSetting = 3,
 
 
-  #[event(input = "DatabaseIdPB", output = "RepeatedFilterPB")]
+  #[event(input = "DatabaseViewIdPB", output = "RepeatedFilterPB")]
   GetAllFilters = 4,
   GetAllFilters = 4,
 
 
-  #[event(input = "DatabaseIdPB", output = "RepeatedSortPB")]
+  #[event(input = "DatabaseViewIdPB", output = "RepeatedSortPB")]
   GetAllSorts = 5,
   GetAllSorts = 5,
 
 
-  #[event(input = "DatabaseIdPB")]
+  #[event(input = "DatabaseViewIdPB")]
   DeleteAllSorts = 6,
   DeleteAllSorts = 6,
 
 
   /// [GetFields] event is used to get the database's settings.
   /// [GetFields] event is used to get the database's settings.
@@ -215,7 +215,7 @@ pub enum DatabaseEvent {
   #[event(input = "DateChangesetPB")]
   #[event(input = "DateChangesetPB")]
   UpdateDateCell = 80,
   UpdateDateCell = 80,
 
 
-  #[event(input = "DatabaseIdPB", output = "RepeatedGroupPB")]
+  #[event(input = "DatabaseViewIdPB", output = "RepeatedGroupPB")]
   GetGroup = 100,
   GetGroup = 100,
 
 
   #[event(input = "CreateBoardCardPayloadPB", output = "RowPB")]
   #[event(input = "CreateBoardCardPayloadPB", output = "RowPB")]

+ 24 - 23
frontend/rust-lib/flowy-database/src/manager.rs

@@ -1,7 +1,9 @@
 use crate::entities::LayoutTypePB;
 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::block_index::BlockIndexCache;
 use crate::services::persistence::kv::DatabaseKVPersistence;
 use crate::services::persistence::kv::DatabaseKVPersistence;
 use crate::services::persistence::migration::DatabaseMigration;
 use crate::services::persistence::migration::DatabaseMigration;
@@ -9,8 +11,8 @@ use crate::services::persistence::rev_sqlite::{
   SQLiteDatabaseRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence,
   SQLiteDatabaseRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence,
 };
 };
 use crate::services::persistence::GridDatabase;
 use crate::services::persistence::GridDatabase;
-use crate::services::view_editor::make_database_view_rev_manager;
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{BuildDatabaseContext, DatabaseRevision, DatabaseViewRevision};
 use flowy_client_sync::client_database::{
 use flowy_client_sync::client_database::{
   make_database_block_operations, make_database_operations, make_grid_view_operations,
   make_database_block_operations, make_database_operations, make_grid_view_operations,
 };
 };
@@ -19,12 +21,10 @@ use flowy_revision::{
   RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration, RevisionWebSocket,
   RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration, RevisionWebSocket,
 };
 };
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
-use grid_model::{BuildDatabaseContext, DatabaseRevision, DatabaseViewRevision};
 use lib_infra::async_trait::async_trait;
 use lib_infra::async_trait::async_trait;
 use lib_infra::ref_map::{RefCountHashMap, RefCountValue};
 use lib_infra::ref_map::{RefCountHashMap, RefCountValue};
 use revision_model::Revision;
 use revision_model::Revision;
 
 
-use crate::services::block_manager::make_database_block_rev_manager;
 use flowy_task::TaskDispatcher;
 use flowy_task::TaskDispatcher;
 use std::sync::Arc;
 use std::sync::Arc;
 use tokio::sync::RwLock;
 use tokio::sync::RwLock;
@@ -135,6 +135,7 @@ impl DatabaseManager {
   }
   }
 
 
   // #[tracing::instrument(level = "debug", skip(self), err)]
   // #[tracing::instrument(level = "debug", skip(self), err)]
+  //TODO(nathan): map the view_id to database_id
   pub async fn get_database_editor(
   pub async fn get_database_editor(
     &self,
     &self,
     database_id: &str,
     database_id: &str,
@@ -175,11 +176,11 @@ impl DatabaseManager {
   ) -> Result<Arc<DatabaseRevisionEditor>, FlowyError> {
   ) -> Result<Arc<DatabaseRevisionEditor>, FlowyError> {
     let user = self.database_user.clone();
     let user = self.database_user.clone();
     let token = user.token()?;
     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 mut rev_manager = self.make_database_rev_manager(database_id, pool.clone())?;
     let database_pad = Arc::new(RwLock::new(
     let database_pad = Arc::new(RwLock::new(
       rev_manager
       rev_manager
-        .initialize::<GridRevisionSerde>(Some(cloud))
+        .initialize::<DatabaseRevisionSerde>(Some(cloud))
         .await?,
         .await?,
     ));
     ));
     let database_editor = DatabaseRevisionEditor::new(
     let database_editor = DatabaseRevisionEditor::new(
@@ -213,7 +214,7 @@ impl DatabaseManager {
     let snapshot_persistence =
     let snapshot_persistence =
       SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool);
       SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool);
 
 
-    let rev_compress = GridRevisionMergeable();
+    let rev_compress = DatabaseRevisionMergeable();
     let rev_manager = RevisionManager::new(
     let rev_manager = RevisionManager::new(
       &user_id,
       &user_id,
       database_id,
       database_id,
@@ -236,7 +237,7 @@ pub async fn make_database_view_data(
     field_revs,
     field_revs,
     block_metas,
     block_metas,
     blocks,
     blocks,
-    grid_view_revision_data,
+    database_view_data: grid_view_revision_data,
   } = build_context;
   } = build_context;
 
 
   for block_meta_data in &blocks {
   for block_meta_data in &blocks {
@@ -249,40 +250,40 @@ pub async fn make_database_view_data(
     });
     });
 
 
     // Create grid's block
     // 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
     database_manager
       .create_database_block(&block_id, vec![revision])
       .create_database_block(&block_id, vec![revision])
       .await?;
       .await?;
   }
   }
 
 
   // Will replace the grid_id with the value returned by the gen_grid_id()
   // 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
   // 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
   database_manager
-    .create_database(&grid_id, vec![revision])
+    .create_database(&database_id, vec![revision])
     .await?;
     .await?;
 
 
   // Create grid view
   // Create grid view
   let grid_view = if grid_view_revision_data.is_empty() {
   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 {
   } else {
     DatabaseViewRevision::from_json(grid_view_revision_data)?
     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
   database_manager
     .create_database_view(view_id, vec![revision])
     .create_database_view(view_id, vec![revision])
     .await?;
     .await?;
 
 
-  Ok(grid_rev_delta_bytes)
+  Ok(database_bytes)
 }
 }
 
 
 #[async_trait]
 #[async_trait]

+ 1 - 1
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::field::*;
 
 
 use crate::services::group::make_no_status_group;
 use crate::services::group::make_no_status_group;
+use database_model::{CellRevision, FieldRevision};
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
-use grid_model::{CellRevision, FieldRevision};
 
 
 use std::fmt::Debug;
 use std::fmt::Debug;
 
 

+ 1 - 1
frontend/rust-lib/flowy-database/src/services/cell/type_cell_data.rs

@@ -1,8 +1,8 @@
 use crate::entities::FieldType;
 use crate::entities::FieldType;
 
 
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::CellRevision;
 use flowy_error::{internal_error, FlowyError, FlowyResult};
 use flowy_error::{internal_error, FlowyError, FlowyResult};
-use grid_model::CellRevision;
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 
 
 /// TypeCellData is a generic CellData, you can parse the type_cell_data according to the field_type.
 /// TypeCellData is a generic CellData, you can parse the type_cell_data according to the field_type.

+ 21 - 16
frontend/rust-lib/flowy-database/src/services/block_editor.rs → 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 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_client_sync::make_operations_from_revisions;
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_revision::{
 use flowy_revision::{
@@ -8,7 +11,6 @@ use flowy_revision::{
   RevisionObjectSerializer,
   RevisionObjectSerializer,
 };
 };
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
-use grid_model::{CellRevision, DatabaseBlockRevision, RowChangeset, RowRevision};
 use lib_infra::future::FutureResult;
 use lib_infra::future::FutureResult;
 use lib_infra::retry::spawn_retry;
 use lib_infra::retry::spawn_retry;
 use lib_ot::core::EmptyAttributes;
 use lib_ot::core::EmptyAttributes;
@@ -21,7 +23,7 @@ pub struct DatabaseBlockRevisionEditor {
   #[allow(dead_code)]
   #[allow(dead_code)]
   user_id: String,
   user_id: String,
   pub block_id: String,
   pub block_id: String,
-  pad: Arc<RwLock<GridBlockRevisionPad>>,
+  pad: Arc<RwLock<DatabaseBlockRevisionPad>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
 }
 }
 
 
@@ -32,7 +34,7 @@ impl DatabaseBlockRevisionEditor {
     block_id: &str,
     block_id: &str,
     mut rev_manager: RevisionManager<Arc<ConnectionPool>>,
     mut rev_manager: RevisionManager<Arc<ConnectionPool>>,
   ) -> FlowyResult<Self> {
   ) -> FlowyResult<Self> {
-    let cloud = Arc::new(GridBlockRevisionCloudService {
+    let cloud = Arc::new(DatabaseBlockRevisionCloudService {
       token: token.to_owned(),
       token: token.to_owned(),
     });
     });
     let block_revision_pad = rev_manager
     let block_revision_pad = rev_manager
@@ -165,8 +167,8 @@ impl DatabaseBlockRevisionEditor {
   async fn modify<F>(&self, f: F) -> FlowyResult<()>
   async fn modify<F>(&self, f: F) -> FlowyResult<()>
   where
   where
     F: for<'a> FnOnce(
     F: for<'a> FnOnce(
-      &'a mut GridBlockRevisionPad,
-    ) -> FlowyResult<Option<GridBlockRevisionChangeset>>,
+      &'a mut DatabaseBlockRevisionPad,
+    ) -> FlowyResult<Option<DatabaseBlockRevisionChangeset>>,
   {
   {
     let mut write_guard = self.pad.write().await;
     let mut write_guard = self.pad.write().await;
     let changeset = f(&mut write_guard)?;
     let changeset = f(&mut write_guard)?;
@@ -179,8 +181,8 @@ impl DatabaseBlockRevisionEditor {
     Ok(())
     Ok(())
   }
   }
 
 
-  async fn apply_change(&self, change: GridBlockRevisionChangeset) -> FlowyResult<()> {
-    let GridBlockRevisionChangeset {
+  async fn apply_change(&self, change: DatabaseBlockRevisionChangeset) -> FlowyResult<()> {
+    let DatabaseBlockRevisionChangeset {
       operations: delta,
       operations: delta,
       md5,
       md5,
     } = change;
     } = change;
@@ -190,12 +192,12 @@ impl DatabaseBlockRevisionEditor {
   }
   }
 }
 }
 
 
-struct GridBlockRevisionCloudService {
+struct DatabaseBlockRevisionCloudService {
   #[allow(dead_code)]
   #[allow(dead_code)]
   token: String,
   token: String,
 }
 }
 
 
-impl RevisionCloudService for GridBlockRevisionCloudService {
+impl RevisionCloudService for DatabaseBlockRevisionCloudService {
   #[tracing::instrument(level = "trace", skip(self))]
   #[tracing::instrument(level = "trace", skip(self))]
   fn fetch_object(
   fn fetch_object(
     &self,
     &self,
@@ -208,10 +210,13 @@ impl RevisionCloudService for GridBlockRevisionCloudService {
 
 
 struct DatabaseBlockRevisionSerde();
 struct DatabaseBlockRevisionSerde();
 impl RevisionObjectDeserializer for DatabaseBlockRevisionSerde {
 impl RevisionObjectDeserializer for DatabaseBlockRevisionSerde {
-  type Output = GridBlockRevisionPad;
+  type Output = DatabaseBlockRevisionPad;
 
 
-  fn deserialize_revisions(object_id: &str, revisions: Vec<Revision>) -> FlowyResult<Self::Output> {
-    let pad = GridBlockRevisionPad::from_revisions(object_id, revisions)?;
+  fn deserialize_revisions(
+    _object_id: &str,
+    revisions: Vec<Revision>,
+  ) -> FlowyResult<Self::Output> {
+    let pad = DatabaseBlockRevisionPad::from_revisions(revisions)?;
     Ok(pad)
     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<Revision>) -> FlowyResult<Bytes> {
   fn combine_revisions(&self, revisions: Vec<Revision>) -> FlowyResult<Bytes> {
     DatabaseBlockRevisionSerde::combine_revisions(revisions)
     DatabaseBlockRevisionSerde::combine_revisions(revisions)
   }
   }

+ 19 - 18
frontend/rust-lib/flowy-database/src/services/block_manager.rs → frontend/rust-lib/flowy-database/src/services/database/block_manager.rs

@@ -1,19 +1,19 @@
 use crate::entities::{CellChangesetPB, InsertedRowPB, UpdatedRowPB};
 use crate::entities::{CellChangesetPB, InsertedRowPB, UpdatedRowPB};
 use crate::manager::DatabaseUser;
 use crate::manager::DatabaseUser;
 use crate::notification::{send_notification, DatabaseNotification};
 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::block_index::BlockIndexCache;
 use crate::services::persistence::rev_sqlite::{
 use crate::services::persistence::rev_sqlite::{
   SQLiteDatabaseBlockRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence,
   SQLiteDatabaseBlockRevisionPersistence, SQLiteDatabaseRevisionSnapshotPersistence,
 };
 };
 use crate::services::row::{make_row_from_row_rev, DatabaseBlockRow, DatabaseBlockRowRevision};
 use crate::services::row::{make_row_from_row_rev, DatabaseBlockRow, DatabaseBlockRowRevision};
 use dashmap::DashMap;
 use dashmap::DashMap;
+use database_model::{
+  DatabaseBlockMetaRevision, DatabaseBlockMetaRevisionChangeset, RowChangeset, RowRevision,
+};
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
 use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration};
 use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration};
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
-use grid_model::{
-  GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowChangeset, RowRevision,
-};
 use std::borrow::Cow;
 use std::borrow::Cow;
 use std::collections::HashMap;
 use std::collections::HashMap;
 use std::sync::Arc;
 use std::sync::Arc;
@@ -51,7 +51,7 @@ pub(crate) struct DatabaseBlockManager {
 impl DatabaseBlockManager {
 impl DatabaseBlockManager {
   pub(crate) async fn new(
   pub(crate) async fn new(
     user: &Arc<dyn DatabaseUser>,
     user: &Arc<dyn DatabaseUser>,
-    block_meta_revs: Vec<Arc<GridBlockMetaRevision>>,
+    block_meta_revs: Vec<Arc<DatabaseBlockMetaRevision>>,
     persistence: Arc<BlockIndexCache>,
     persistence: Arc<BlockIndexCache>,
     event_notifier: broadcast::Sender<DatabaseBlockEvent>,
     event_notifier: broadcast::Sender<DatabaseBlockEvent>,
   ) -> FlowyResult<Self> {
   ) -> FlowyResult<Self> {
@@ -73,7 +73,7 @@ impl DatabaseBlockManager {
   }
   }
 
 
   // #[tracing::instrument(level = "trace", skip(self))]
   // #[tracing::instrument(level = "trace", skip(self))]
-  pub(crate) async fn get_block_editor(
+  pub(crate) async fn get_or_create_block_editor(
     &self,
     &self,
     block_id: &str,
     block_id: &str,
   ) -> FlowyResult<Arc<DatabaseBlockRevisionEditor>> {
   ) -> FlowyResult<Arc<DatabaseBlockRevisionEditor>> {
@@ -99,7 +99,7 @@ impl DatabaseBlockManager {
     row_id: &str,
     row_id: &str,
   ) -> FlowyResult<Arc<DatabaseBlockRevisionEditor>> {
   ) -> FlowyResult<Arc<DatabaseBlockRevisionEditor>> {
     let block_id = self.persistence.get_block_id(row_id)?;
     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)]
   #[tracing::instrument(level = "trace", skip(self, start_row_id), err)]
@@ -110,7 +110,7 @@ impl DatabaseBlockManager {
   ) -> FlowyResult<i32> {
   ) -> FlowyResult<i32> {
     let block_id = row_rev.block_id.clone();
     let block_id = row_rev.block_id.clone();
     self.persistence.insert(&row_rev.block_id, &row_rev.id)?;
     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 mut row = InsertedRowPB::from(&row_rev);
     let (number_of_rows, index) = editor.create_row(row_rev, start_row_id).await?;
     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(
   pub(crate) async fn insert_row(
     &self,
     &self,
     rows_by_block_id: HashMap<String, Vec<RowRevision>>,
     rows_by_block_id: HashMap<String, Vec<RowRevision>>,
-  ) -> FlowyResult<Vec<GridBlockMetaRevisionChangeset>> {
+  ) -> FlowyResult<Vec<DatabaseBlockMetaRevisionChangeset>> {
     let mut changesets = vec![];
     let mut changesets = vec![];
     for (block_id, row_revs) in rows_by_block_id {
     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 {
       for row_rev in row_revs {
         self.persistence.insert(&row_rev.block_id, &row_rev.id)?;
         self.persistence.insert(&row_rev.block_id, &row_rev.id)?;
         let mut row = InsertedRowPB::from(&row_rev);
         let mut row = InsertedRowPB::from(&row_rev);
@@ -138,7 +138,7 @@ impl DatabaseBlockManager {
           row,
           row,
         });
         });
       }
       }
-      changesets.push(GridBlockMetaRevisionChangeset::from_row_count(
+      changesets.push(DatabaseBlockMetaRevisionChangeset::from_row_count(
         block_id.clone(),
         block_id.clone(),
         editor.number_of_rows().await,
         editor.number_of_rows().await,
       ));
       ));
@@ -179,7 +179,7 @@ impl DatabaseBlockManager {
   pub async fn delete_row(&self, row_id: &str) -> FlowyResult<Option<Arc<RowRevision>>> {
   pub async fn delete_row(&self, row_id: &str) -> FlowyResult<Option<Arc<RowRevision>>> {
     let row_id = row_id.to_owned();
     let row_id = row_id.to_owned();
     let block_id = self.persistence.get_block_id(&row_id)?;
     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? {
     match editor.get_row_rev(&row_id).await? {
       None => Ok(None),
       None => Ok(None),
       Some((_, row_rev)) => {
       Some((_, row_rev)) => {
@@ -197,17 +197,18 @@ impl DatabaseBlockManager {
   pub(crate) async fn delete_rows(
   pub(crate) async fn delete_rows(
     &self,
     &self,
     block_rows: Vec<DatabaseBlockRow>,
     block_rows: Vec<DatabaseBlockRow>,
-  ) -> FlowyResult<Vec<GridBlockMetaRevisionChangeset>> {
+  ) -> FlowyResult<Vec<DatabaseBlockMetaRevisionChangeset>> {
     let mut changesets = vec![];
     let mut changesets = vec![];
     for block_row in block_rows {
     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
       let row_ids = block_row
         .row_ids
         .row_ids
         .into_iter()
         .into_iter()
         .map(Cow::Owned)
         .map(Cow::Owned)
         .collect::<Vec<Cow<String>>>();
         .collect::<Vec<Cow<String>>>();
       let row_count = editor.delete_rows(row_ids).await?;
       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);
       changesets.push(changeset);
     }
     }
 
 
@@ -285,7 +286,7 @@ impl DatabaseBlockManager {
       },
       },
       Some(block_ids) => {
       Some(block_ids) => {
         for block_id in 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?;
           let row_revs = editor.get_row_revs::<&str>(None).await?;
           blocks.push(DatabaseBlockRowRevision { block_id, row_revs });
           blocks.push(DatabaseBlockRowRevision { block_id, row_revs });
         }
         }
@@ -304,7 +305,7 @@ impl DatabaseBlockManager {
 /// Initialize each block editor
 /// Initialize each block editor
 async fn make_block_editors(
 async fn make_block_editors(
   user: &Arc<dyn DatabaseUser>,
   user: &Arc<dyn DatabaseUser>,
-  block_meta_revs: Vec<Arc<GridBlockMetaRevision>>,
+  block_meta_revs: Vec<Arc<DatabaseBlockMetaRevision>>,
 ) -> FlowyResult<DashMap<String, Arc<DatabaseBlockRevisionEditor>>> {
 ) -> FlowyResult<DashMap<String, Arc<DatabaseBlockRevisionEditor>>> {
   let editor_map = DashMap::new();
   let editor_map = DashMap::new();
   for block_meta_rev in block_meta_revs {
   for block_meta_rev in block_meta_revs {
@@ -343,7 +344,7 @@ pub fn make_database_block_rev_manager(
   let snapshot_persistence =
   let snapshot_persistence =
     SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool);
     SQLiteDatabaseRevisionSnapshotPersistence::new(&snapshot_object_id, pool);
 
 
-  let rev_compress = GridBlockRevisionMergeable();
+  let rev_compress = DatabaseBlockRevisionMergeable();
   let rev_manager = RevisionManager::new(
   let rev_manager = RevisionManager::new(
     &user_id,
     &user_id,
     block_id,
     block_id,

+ 168 - 125
frontend/rust-lib/flowy-database/src/services/grid_editor.rs → frontend/rust-lib/flowy-database/src/services/database/database_editor.rs

@@ -2,26 +2,28 @@ use crate::entities::CellIdParams;
 use crate::entities::*;
 use crate::entities::*;
 use crate::manager::DatabaseUser;
 use crate::manager::DatabaseUser;
 use crate::notification::{send_notification, DatabaseNotification};
 use crate::notification::{send_notification, DatabaseNotification};
-use crate::services::block_manager::DatabaseBlockManager;
 use crate::services::cell::{
 use crate::services::cell::{
   apply_cell_data_changeset, get_type_cell_protobuf, stringify_cell_data, AnyTypeCache,
   apply_cell_data_changeset, get_type_cell_protobuf, stringify_cell_data, AnyTypeCache,
   AtomicCellDataCache, CellProtobufBlob, ToCellChangesetString, TypeCellData,
   AtomicCellDataCache, CellProtobufBlob, ToCellChangesetString, TypeCellData,
 };
 };
+use crate::services::database::DatabaseBlockManager;
 use crate::services::field::{
 use crate::services::field::{
   default_type_option_builder_from_type, transform_type_option, type_option_builder_from_bytes,
   default_type_option_builder_from_type, transform_type_option, type_option_builder_from_bytes,
   FieldBuilder, RowSingleCellData,
   FieldBuilder, RowSingleCellData,
 };
 };
 
 
+use crate::services::database::DatabaseViewEditorDelegateImpl;
+use crate::services::database_view::{DatabaseViewChanged, DatabaseViewManager};
 use crate::services::filter::FilterType;
 use crate::services::filter::FilterType;
-use crate::services::grid_editor_trait_impl::GridViewEditorDelegateImpl;
 use crate::services::persistence::block_index::BlockIndexCache;
 use crate::services::persistence::block_index::BlockIndexCache;
 use crate::services::row::{DatabaseBlockRow, DatabaseBlockRowRevision, RowRevisionBuilder};
 use crate::services::row::{DatabaseBlockRow, DatabaseBlockRowRevision, RowRevisionBuilder};
-use crate::services::view_editor::{DatabaseViewChanged, DatabaseViewManager};
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::*;
 use flowy_client_sync::client_database::{
 use flowy_client_sync::client_database::{
   DatabaseRevisionChangeset, DatabaseRevisionPad, JsonDeserializer,
   DatabaseRevisionChangeset, DatabaseRevisionPad, JsonDeserializer,
 };
 };
 use flowy_client_sync::errors::{SyncError, SyncResult};
 use flowy_client_sync::errors::{SyncError, SyncResult};
+use flowy_client_sync::make_operations_from_revisions;
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_revision::{
 use flowy_revision::{
   RevisionCloudService, RevisionManager, RevisionMergeable, RevisionObjectDeserializer,
   RevisionCloudService, RevisionManager, RevisionMergeable, RevisionObjectDeserializer,
@@ -29,30 +31,25 @@ use flowy_revision::{
 };
 };
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
 use flowy_task::TaskDispatcher;
 use flowy_task::TaskDispatcher;
-use grid_model::*;
 use lib_infra::future::{to_fut, FutureResult};
 use lib_infra::future::{to_fut, FutureResult};
 use lib_ot::core::EmptyAttributes;
 use lib_ot::core::EmptyAttributes;
 use revision_model::Revision;
 use revision_model::Revision;
 use std::collections::HashMap;
 use std::collections::HashMap;
-
-use flowy_client_sync::make_operations_from_revisions;
 use std::sync::Arc;
 use std::sync::Arc;
 use tokio::sync::{broadcast, RwLock};
 use tokio::sync::{broadcast, RwLock};
 
 
 pub struct DatabaseRevisionEditor {
 pub struct DatabaseRevisionEditor {
   pub database_id: String,
   pub database_id: String,
-  #[allow(dead_code)]
-  user: Arc<dyn DatabaseUser>,
   database_pad: Arc<RwLock<DatabaseRevisionPad>>,
   database_pad: Arc<RwLock<DatabaseRevisionPad>>,
-  view_manager: Arc<DatabaseViewManager>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
-  block_manager: Arc<DatabaseBlockManager>,
+  database_view_manager: Arc<DatabaseViewManager>,
+  database_block_manager: Arc<DatabaseBlockManager>,
   cell_data_cache: AtomicCellDataCache,
   cell_data_cache: AtomicCellDataCache,
 }
 }
 
 
 impl Drop for DatabaseRevisionEditor {
 impl Drop for DatabaseRevisionEditor {
   fn drop(&mut self) {
   fn drop(&mut self) {
-    tracing::trace!("Drop GridRevisionEditor");
+    tracing::trace!("Drop DatabaseRevisionEditor");
   }
   }
 }
 }
 
 
@@ -71,18 +68,18 @@ impl DatabaseRevisionEditor {
     // Block manager
     // Block manager
     let (block_event_tx, block_event_rx) = broadcast::channel(100);
     let (block_event_tx, block_event_rx) = broadcast::channel(100);
     let block_meta_revs = database_pad.read().await.get_block_meta_revs();
     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?,
       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(),
       pad: database_pad.clone(),
-      block_manager: block_manager.clone(),
+      block_manager: database_block_manager.clone(),
       task_scheduler,
       task_scheduler,
       cell_data_cache: cell_data_cache.clone(),
       cell_data_cache: cell_data_cache.clone(),
     });
     });
 
 
     // View manager
     // View manager
-    let view_manager = Arc::new(
+    let database_view_manager = Arc::new(
       DatabaseViewManager::new(
       DatabaseViewManager::new(
         database_id.to_owned(),
         database_id.to_owned(),
         user.clone(),
         user.clone(),
@@ -95,23 +92,22 @@ impl DatabaseRevisionEditor {
 
 
     let editor = Arc::new(Self {
     let editor = Arc::new(Self {
       database_id: database_id.to_owned(),
       database_id: database_id.to_owned(),
-      user,
       database_pad,
       database_pad,
       rev_manager,
       rev_manager,
-      block_manager,
-      view_manager,
+      database_block_manager,
+      database_view_manager,
       cell_data_cache,
       cell_data_cache,
     });
     });
 
 
     Ok(editor)
     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) {
   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.generate_snapshot().await;
     self.rev_manager.close().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
   /// 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
   /// It will do nothing if the passed-in type_option_data is empty
   /// # Arguments
   /// # Arguments
   ///
   ///
-  /// * `grid_id`: the id of the grid
   /// * `field_id`: the id of the field
   /// * `field_id`: the id of the field
   /// * `type_option_data`: the updated type-option data. The `type-option` data might be empty
   /// * `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`.
   /// if there is no type-option config for that field. For example, the `RichTextTypeOptionPB`.
   ///  
   ///  
   pub async fn update_field_type_option(
   pub async fn update_field_type_option(
     &self,
     &self,
-    _grid_id: &str,
     field_id: &str,
     field_id: &str,
     type_option_data: Vec<u8>,
     type_option_data: Vec<u8>,
     old_field_rev: Option<Arc<FieldRevision>>,
     old_field_rev: Option<Arc<FieldRevision>>,
@@ -139,8 +133,8 @@ impl DatabaseRevisionEditor {
     }
     }
     let field_rev = result.unwrap();
     let field_rev = result.unwrap();
     self
     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());
           let deserializer = TypeOptionJsonDeserializer(field_rev.ty.into());
           match deserializer.deserialize(type_option_data) {
           match deserializer.deserialize(type_option_data) {
             Ok(json_str) => {
             Ok(json_str) => {
@@ -158,10 +152,10 @@ impl DatabaseRevisionEditor {
       .await?;
       .await?;
 
 
     self
     self
-      .view_manager
+      .database_view_manager
       .did_update_view_field_type_option(field_id, old_field_rev)
       .did_update_view_field_type_option(field_id, old_field_rev)
       .await?;
       .await?;
-    self.notify_did_update_grid_field(field_id).await?;
+    self.notify_did_update_database_field(field_id).await?;
     Ok(())
     Ok(())
   }
   }
 
 
@@ -179,9 +173,9 @@ impl DatabaseRevisionEditor {
   pub async fn create_new_field_rev(&self, field_rev: FieldRevision) -> FlowyResult<()> {
   pub async fn create_new_field_rev(&self, field_rev: FieldRevision) -> FlowyResult<()> {
     let field_id = field_rev.id.clone();
     let field_id = field_rev.id.clone();
     self
     self
-      .modify(|grid| Ok(grid.create_field_rev(field_rev, None)?))
+      .modify(|pad| Ok(pad.create_field_rev(field_rev, None)?))
       .await?;
       .await?;
-    self.notify_did_insert_grid_field(&field_id).await?;
+    self.notify_did_insert_database_field(&field_id).await?;
 
 
     Ok(())
     Ok(())
   }
   }
@@ -197,9 +191,9 @@ impl DatabaseRevisionEditor {
       field_rev.insert_type_option(type_option_builder.serializer());
       field_rev.insert_type_option(type_option_builder.serializer());
     }
     }
     self
     self
-      .modify(|grid| Ok(grid.create_field_rev(field_rev.clone(), None)?))
+      .modify(|pad| Ok(pad.create_field_rev(field_rev.clone(), None)?))
       .await?;
       .await?;
-    self.notify_did_insert_grid_field(&field_rev.id).await?;
+    self.notify_did_insert_database_field(&field_rev.id).await?;
 
 
     Ok(field_rev)
     Ok(field_rev)
   }
   }
@@ -211,8 +205,8 @@ impl DatabaseRevisionEditor {
   pub async fn update_field(&self, params: FieldChangesetParams) -> FlowyResult<()> {
   pub async fn update_field(&self, params: FieldChangesetParams) -> FlowyResult<()> {
     let field_id = params.field_id.clone();
     let field_id = params.field_id.clone();
     self
     self
-      .modify(|grid| {
-        let changeset = grid.modify_field(&params.field_id, |field| {
+      .modify(|pad| {
+        let changeset = pad.modify_field(&params.field_id, |field| {
           if let Some(name) = params.name {
           if let Some(name) = params.name {
             field.name = name;
             field.name = name;
           }
           }
@@ -236,7 +230,7 @@ impl DatabaseRevisionEditor {
         Ok(changeset)
         Ok(changeset)
       })
       })
       .await?;
       .await?;
-    self.notify_did_update_grid_field(&field_id).await?;
+    self.notify_did_update_database_field(&field_id).await?;
     Ok(())
     Ok(())
   }
   }
 
 
@@ -247,8 +241,8 @@ impl DatabaseRevisionEditor {
     let mut is_changed = false;
     let mut is_changed = false;
     let old_field_rev = self.get_field_rev(field_id).await;
     let old_field_rev = self.get_field_rev(field_id).await;
     self
     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))
           f(field_rev).map_err(|e| SyncError::internal().context(e))
         })?;
         })?;
         is_changed = changeset.is_some();
         is_changed = changeset.is_some();
@@ -258,30 +252,30 @@ impl DatabaseRevisionEditor {
 
 
     if is_changed {
     if is_changed {
       match self
       match self
-        .view_manager
+        .database_view_manager
         .did_update_view_field_type_option(field_id, old_field_rev)
         .did_update_view_field_type_option(field_id, old_field_rev)
         .await
         .await
       {
       {
         Ok(_) => {},
         Ok(_) => {},
         Err(e) => tracing::error!("View manager update field failed: {:?}", e),
         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(())
     Ok(())
   }
   }
 
 
   pub async fn delete_field(&self, field_id: &str) -> FlowyResult<()> {
   pub async fn delete_field(&self, field_id: &str) -> FlowyResult<()> {
     self
     self
-      .modify(|grid_pad| Ok(grid_pad.delete_field_rev(field_id)?))
+      .modify(|pad| Ok(pad.delete_field_rev(field_id)?))
       .await?;
       .await?;
     let field_order = FieldIdPB::from(field_id);
     let field_order = FieldIdPB::from(field_id);
     let notified_changeset = DatabaseFieldChangesetPB::delete(&self.database_id, vec![field_order]);
     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(())
     Ok(())
   }
   }
 
 
   pub async fn group_by_field(&self, field_id: &str) -> FlowyResult<()> {
   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(())
     Ok(())
   }
   }
 
 
@@ -321,8 +315,8 @@ impl DatabaseRevisionEditor {
     };
     };
 
 
     self
     self
-      .modify(|grid| {
-        Ok(grid.switch_to_field(
+      .modify(|pad| {
+        Ok(pad.switch_to_field(
           field_id,
           field_id,
           new_field_type.clone(),
           new_field_type.clone(),
           make_default_type_option,
           make_default_type_option,
@@ -331,7 +325,7 @@ impl DatabaseRevisionEditor {
       })
       })
       .await?;
       .await?;
 
 
-    self.notify_did_update_grid_field(field_id).await?;
+    self.notify_did_update_database_field(field_id).await?;
 
 
     Ok(())
     Ok(())
   }
   }
@@ -339,11 +333,11 @@ impl DatabaseRevisionEditor {
   pub async fn duplicate_field(&self, field_id: &str) -> FlowyResult<()> {
   pub async fn duplicate_field(&self, field_id: &str) -> FlowyResult<()> {
     let duplicated_field_id = gen_field_id();
     let duplicated_field_id = gen_field_id();
     self
     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?;
       .await?;
 
 
     self
     self
-      .notify_did_insert_grid_field(&duplicated_field_id)
+      .notify_did_insert_database_field(&duplicated_field_id)
       .await?;
       .await?;
     Ok(())
     Ok(())
   }
   }
@@ -385,16 +379,19 @@ impl DatabaseRevisionEditor {
     Ok(field_revs)
     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
     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?;
       .await?;
     Ok(())
     Ok(())
   }
   }
 
 
-  pub async fn update_block(&self, changeset: GridBlockMetaRevisionChangeset) -> FlowyResult<()> {
+  pub async fn update_block(
+    &self,
+    changeset: DatabaseBlockMetaRevisionChangeset,
+  ) -> FlowyResult<()> {
     self
     self
-      .modify(|grid_pad| Ok(grid_pad.update_block_rev(changeset)?))
+      .modify(|pad| Ok(pad.update_block_rev(changeset)?))
       .await?;
       .await?;
     Ok(())
     Ok(())
   }
   }
@@ -403,7 +400,7 @@ impl DatabaseRevisionEditor {
     let mut row_rev = self.create_row_rev().await?;
     let mut row_rev = self.create_row_rev().await?;
 
 
     self
     self
-      .view_manager
+      .database_view_manager
       .will_create_row(&mut row_rev, &params)
       .will_create_row(&mut row_rev, &params)
       .await;
       .await;
 
 
@@ -411,13 +408,16 @@ impl DatabaseRevisionEditor {
       .create_row_pb(row_rev, params.start_row_id.clone())
       .create_row_pb(row_rev, params.start_row_id.clone())
       .await?;
       .await?;
 
 
-    self.view_manager.did_create_row(&row_pb, &params).await;
+    self
+      .database_view_manager
+      .did_create_row(&row_pb, &params)
+      .await;
     Ok(row_pb)
     Ok(row_pb)
   }
   }
 
 
   #[tracing::instrument(level = "trace", skip_all, err)]
   #[tracing::instrument(level = "trace", skip_all, err)]
   pub async fn move_group(&self, params: MoveGroupParams) -> FlowyResult<()> {
   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(())
     Ok(())
   }
   }
 
 
@@ -432,7 +432,10 @@ impl DatabaseRevisionEditor {
         .or_insert_with(Vec::new)
         .or_insert_with(Vec::new)
         .push(row_rev);
         .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 {
     for changeset in changesets {
       self.update_block(changeset).await?;
       self.update_block(changeset).await?;
     }
     }
@@ -442,14 +445,20 @@ impl DatabaseRevisionEditor {
   pub async fn update_row(&self, changeset: RowChangeset) -> FlowyResult<()> {
   pub async fn update_row(&self, changeset: RowChangeset) -> FlowyResult<()> {
     let row_id = changeset.row_id.clone();
     let row_id = changeset.row_id.clone();
     let old_row = self.get_row_rev(&row_id).await?;
     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(())
     Ok(())
   }
   }
 
 
   /// Returns all the rows in this block.
   /// Returns all the rows in this block.
   pub async fn get_row_pbs(&self, view_id: &str, block_id: &str) -> FlowyResult<Vec<RowPB>> {
   pub async fn get_row_pbs(&self, view_id: &str, block_id: &str) -> FlowyResult<Vec<RowPB>> {
-    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
     let rows = rows
       .into_iter()
       .into_iter()
       .map(|row_rev| RowPB::from(&row_rev))
       .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<Vec<Arc<RowRevision>>> {
   pub async fn get_all_row_revs(&self, view_id: &str) -> FlowyResult<Vec<Arc<RowRevision>>> {
     let mut all_rows = vec![];
     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 {
     for block in blocks {
       let rows = self
       let rows = self
-        .view_manager
+        .database_view_manager
         .get_row_revs(view_id, &block.block_id)
         .get_row_revs(view_id, &block.block_id)
         .await?;
         .await?;
       all_rows.extend(rows);
       all_rows.extend(rows);
@@ -471,17 +480,17 @@ impl DatabaseRevisionEditor {
   }
   }
 
 
   pub async fn get_row_rev(&self, row_id: &str) -> FlowyResult<Option<Arc<RowRevision>>> {
   pub async fn get_row_rev(&self, row_id: &str) -> FlowyResult<Option<Arc<RowRevision>>> {
-    match self.block_manager.get_row_rev(row_id).await? {
+    match self.database_block_manager.get_row_rev(row_id).await? {
       None => Ok(None),
       None => Ok(None),
       Some((_, row_rev)) => Ok(Some(row_rev)),
       Some((_, row_rev)) => Ok(Some(row_rev)),
     }
     }
   }
   }
 
 
   pub async fn delete_row(&self, row_id: &str) -> FlowyResult<()> {
   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);
     tracing::trace!("Did delete row:{:?}", row_rev);
     if let Some(row_rev) = 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(())
     Ok(())
   }
   }
@@ -490,7 +499,10 @@ impl DatabaseRevisionEditor {
     &self,
     &self,
     view_id: &str,
     view_id: &str,
   ) -> FlowyResult<broadcast::Receiver<DatabaseViewChanged>> {
   ) -> FlowyResult<broadcast::Receiver<DatabaseViewChanged>> {
-    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<()> {
   pub async fn duplicate_row(&self, _row_id: &str) -> FlowyResult<()> {
@@ -545,7 +557,7 @@ impl DatabaseRevisionEditor {
   ) -> Option<(FieldType, CellProtobufBlob)> {
   ) -> Option<(FieldType, CellProtobufBlob)> {
     let field_rev = self.get_field_rev(&params.field_id).await?;
     let field_rev = self.get_field_rev(&params.field_id).await?;
     let (_, row_rev) = self
     let (_, row_rev) = self
-      .block_manager
+      .database_block_manager
       .get_row_rev(&params.row_id)
       .get_row_rev(&params.row_id)
       .await
       .await
       .ok()??;
       .ok()??;
@@ -562,7 +574,7 @@ impl DatabaseRevisionEditor {
     row_id: &str,
     row_id: &str,
     field_id: &str,
     field_id: &str,
   ) -> FlowyResult<Option<CellRevision>> {
   ) -> FlowyResult<Option<CellRevision>> {
-    match self.block_manager.get_row_rev(row_id).await? {
+    match self.database_block_manager.get_row_rev(row_id).await? {
       None => Ok(None),
       None => Ok(None),
       Some((_, row_rev)) => {
       Some((_, row_rev)) => {
         let cell_rev = row_rev.cells.get(field_id).cloned();
         let cell_rev = row_rev.cells.get(field_id).cloned();
@@ -577,7 +589,7 @@ impl DatabaseRevisionEditor {
     view_id: &str,
     view_id: &str,
     field_id: &str,
     field_id: &str,
   ) -> FlowyResult<Vec<RowSingleCellData>> {
   ) -> FlowyResult<Vec<RowSingleCellData>> {
-    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
     view_editor.get_cells_for_field(field_id).await
   }
   }
 
 
@@ -614,8 +626,14 @@ impl DatabaseRevisionEditor {
           field_id: field_id.to_owned(),
           field_id: field_id.to_owned(),
           type_cell_data,
           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(())
         Ok(())
       },
       },
     }
     }
@@ -633,7 +651,7 @@ impl DatabaseRevisionEditor {
       .await
       .await
   }
   }
 
 
-  pub async fn get_block_meta_revs(&self) -> FlowyResult<Vec<Arc<GridBlockMetaRevision>>> {
+  pub async fn get_block_meta_revs(&self) -> FlowyResult<Vec<Arc<DatabaseBlockMetaRevision>>> {
     let block_meta_revs = self.database_pad.read().await.get_block_meta_revs();
     let block_meta_revs = self.database_pad.read().await.get_block_meta_revs();
     Ok(block_meta_revs)
     Ok(block_meta_revs)
   }
   }
@@ -653,12 +671,15 @@ impl DatabaseRevisionEditor {
         .collect::<Vec<String>>(),
         .collect::<Vec<String>>(),
       Some(block_ids) => block_ids,
       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)
     Ok(blocks)
   }
   }
 
 
   pub async fn delete_rows(&self, block_rows: Vec<DatabaseBlockRow>) -> FlowyResult<()> {
   pub async fn delete_rows(&self, block_rows: Vec<DatabaseBlockRow>) -> 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 {
     for changeset in changesets {
       self.update_block(changeset).await?;
       self.update_block(changeset).await?;
     }
     }
@@ -687,13 +708,13 @@ impl DatabaseRevisionEditor {
   }
   }
 
 
   pub async fn get_setting(&self) -> FlowyResult<DatabaseViewSettingPB> {
   pub async fn get_setting(&self) -> FlowyResult<DatabaseViewSettingPB> {
-    self.view_manager.get_setting().await
+    self.database_view_manager.get_setting().await
   }
   }
 
 
   pub async fn get_all_filters(&self) -> FlowyResult<Vec<FilterPB>> {
   pub async fn get_all_filters(&self) -> FlowyResult<Vec<FilterPB>> {
     Ok(
     Ok(
       self
       self
-        .view_manager
+        .database_view_manager
         .get_all_filters()
         .get_all_filters()
         .await?
         .await?
         .into_iter()
         .into_iter()
@@ -703,23 +724,26 @@ impl DatabaseRevisionEditor {
   }
   }
 
 
   pub async fn get_filters(&self, filter_id: FilterType) -> FlowyResult<Vec<Arc<FilterRevision>>> {
   pub async fn get_filters(&self, filter_id: FilterType) -> FlowyResult<Vec<Arc<FilterRevision>>> {
-    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<()> {
   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(())
     Ok(())
   }
   }
 
 
   pub async fn delete_filter(&self, params: DeleteFilterParams) -> FlowyResult<()> {
   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(())
     Ok(())
   }
   }
 
 
   pub async fn get_all_sorts(&self, view_id: &str) -> FlowyResult<Vec<SortPB>> {
   pub async fn get_all_sorts(&self, view_id: &str) -> FlowyResult<Vec<SortPB>> {
     Ok(
     Ok(
       self
       self
-        .view_manager
+        .database_view_manager
         .get_all_sorts(view_id)
         .get_all_sorts(view_id)
         .await?
         .await?
         .into_iter()
         .into_iter()
@@ -729,25 +753,31 @@ impl DatabaseRevisionEditor {
   }
   }
 
 
   pub async fn delete_all_sorts(&self, view_id: &str) -> FlowyResult<()> {
   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<()> {
   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(())
     Ok(())
   }
   }
 
 
   pub async fn create_or_update_sort(&self, params: AlterSortParams) -> FlowyResult<SortRevision> {
   pub async fn create_or_update_sort(&self, params: AlterSortParams) -> FlowyResult<SortRevision> {
-    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)
     Ok(sort_rev)
   }
   }
 
 
   pub async fn insert_group(&self, params: InsertGroupParams) -> FlowyResult<()> {
   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<()> {
   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<()> {
   pub async fn move_row(&self, params: MoveRowParams) -> FlowyResult<()> {
@@ -757,17 +787,21 @@ impl DatabaseRevisionEditor {
       to_row_id,
       to_row_id,
     } = params;
     } = 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),
       None => tracing::warn!("Move row failed, can not find the row:{}", from_row_id),
       Some((_, row_rev)) => {
       Some((_, row_rev)) => {
         match (
         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)) => {
           (Some(from_index), Some(to_index)) => {
             tracing::trace!("Move row from {} to {}", from_index, to_index);
             tracing::trace!("Move row from {} to {}", from_index, to_index);
             self
             self
-              .block_manager
+              .database_block_manager
               .move_row(row_rev.clone(), from_index, to_index)
               .move_row(row_rev.clone(), from_index, to_index)
               .await?;
               .await?;
           },
           },
@@ -787,12 +821,16 @@ impl DatabaseRevisionEditor {
       to_row_id,
       to_row_id,
     } = params;
     } = 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),
       None => tracing::warn!("Move row failed, can not find the row:{}", from_row_id),
       Some((_, row_rev)) => {
       Some((_, row_rev)) => {
-        let block_manager = self.block_manager.clone();
+        let block_manager = self.database_block_manager.clone();
         self
         self
-          .view_manager
+          .database_view_manager
           .move_group_row(row_rev, to_group_id, to_row_id.clone(), |row_changeset| {
           .move_group_row(row_rev, to_group_id, to_row_id.clone(), |row_changeset| {
             to_fut(async move {
             to_fut(async move {
               tracing::trace!("Row data changed: {:?}", row_changeset);
               tracing::trace!("Row data changed: {:?}", row_changeset);
@@ -830,42 +868,40 @@ impl DatabaseRevisionEditor {
     } = params;
     } = params;
 
 
     self
     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?;
       .await?;
     if let Some((index, field_rev)) = self.database_pad.read().await.get_field_rev(&field_id) {
     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 delete_field_order = FieldIdPB::from(field_id);
       let insert_field = IndexFieldPB::from_field_rev(field_rev, index);
       let insert_field = IndexFieldPB::from_field_rev(field_rev, index);
       let notified_changeset = DatabaseFieldChangesetPB {
       let notified_changeset = DatabaseFieldChangesetPB {
-        database_id: self.database_id.clone(),
+        view_id: self.database_id.clone(),
         inserted_fields: vec![insert_field],
         inserted_fields: vec![insert_field],
         deleted_fields: vec![delete_field_order],
         deleted_fields: vec![delete_field_order],
         updated_fields: vec![],
         updated_fields: vec![],
       };
       };
 
 
-      self.notify_did_update_grid(notified_changeset).await?;
+      self.notify_did_update_database(notified_changeset).await?;
     }
     }
     Ok(())
     Ok(())
   }
   }
 
 
-  pub async fn duplicate_grid(&self) -> FlowyResult<BuildDatabaseContext> {
-    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<BuildDatabaseContext> {
+    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![];
     let mut blocks_meta_data = vec![];
     if original_blocks.len() == duplicated_blocks.len() {
     if original_blocks.len() == duplicated_blocks.len() {
       for (index, original_block_meta) in original_blocks.iter().enumerate() {
       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?;
           .await?;
         let duplicated_block_id = &duplicated_blocks[index].block_id;
         let duplicated_block_id = &duplicated_blocks[index].block_id;
 
 
         tracing::trace!("Duplicate block:{} meta data", duplicated_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)
           .duplicate_block(duplicated_block_id)
           .await;
           .await;
         blocks_meta_data.push(duplicated_block_meta_data);
         blocks_meta_data.push(duplicated_block_meta_data);
@@ -873,19 +909,19 @@ impl DatabaseRevisionEditor {
     } else {
     } else {
       debug_assert_eq!(original_blocks.len(), duplicated_blocks.len());
       debug_assert_eq!(original_blocks.len(), duplicated_blocks.len());
     }
     }
-    drop(grid_pad);
+    drop(database_pad);
 
 
     Ok(BuildDatabaseContext {
     Ok(BuildDatabaseContext {
       field_revs: duplicated_fields.into_iter().map(Arc::new).collect(),
       field_revs: duplicated_fields.into_iter().map(Arc::new).collect(),
       block_metas: duplicated_blocks,
       block_metas: duplicated_blocks,
       blocks: blocks_meta_data,
       blocks: blocks_meta_data,
-      grid_view_revision_data,
+      database_view_data,
     })
     })
   }
   }
 
 
   #[tracing::instrument(level = "trace", skip_all, err)]
   #[tracing::instrument(level = "trace", skip_all, err)]
   pub async fn load_groups(&self) -> FlowyResult<RepeatedGroupPB> {
   pub async fn load_groups(&self) -> FlowyResult<RepeatedGroupPB> {
-    self.view_manager.load_groups().await
+    self.database_view_manager.load_groups().await
   }
   }
 
 
   async fn create_row_rev(&self) -> FlowyResult<RowRevision> {
   async fn create_row_rev(&self) -> FlowyResult<RowRevision> {
@@ -906,10 +942,13 @@ impl DatabaseRevisionEditor {
     let block_id = row_rev.block_id.clone();
     let block_id = row_rev.block_id.clone();
 
 
     // insert the row
     // 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
     // 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?;
     self.update_block(changeset).await?;
     Ok(row_pb)
     Ok(row_pb)
   }
   }
@@ -938,24 +977,25 @@ impl DatabaseRevisionEditor {
 
 
   async fn block_id(&self) -> FlowyResult<String> {
   async fn block_id(&self) -> FlowyResult<String> {
     match self.database_pad.read().await.get_block_meta_revs().last() {
     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)]
   #[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) {
     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);
       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 =
       let notified_changeset =
         DatabaseFieldChangesetPB::insert(&self.database_id, vec![index_field]);
         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(())
     Ok(())
   }
   }
 
 
   #[tracing::instrument(level = "trace", skip_all, err)]
   #[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
     if let Some((_, field_rev)) = self
       .database_pad
       .database_pad
       .read()
       .read()
@@ -966,7 +1006,7 @@ impl DatabaseRevisionEditor {
       let updated_field = FieldPB::from(field_rev);
       let updated_field = FieldPB::from(field_rev);
       let notified_changeset =
       let notified_changeset =
         DatabaseFieldChangesetPB::update(&self.database_id, vec![updated_field.clone()]);
         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)
       send_notification(field_id, DatabaseNotification::DidUpdateField)
         .payload(updated_field)
         .payload(updated_field)
@@ -976,7 +1016,10 @@ impl DatabaseRevisionEditor {
     Ok(())
     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)
     send_notification(&self.database_id, DatabaseNotification::DidUpdateFields)
       .payload(changeset)
       .payload(changeset)
       .send();
       .send();
@@ -990,13 +1033,13 @@ impl DatabaseRevisionEditor {
     self.rev_manager.clone()
     self.rev_manager.clone()
   }
   }
 
 
-  pub fn grid_pad(&self) -> Arc<RwLock<DatabaseRevisionPad>> {
+  pub fn database_pad(&self) -> Arc<RwLock<DatabaseRevisionPad>> {
     self.database_pad.clone()
     self.database_pad.clone()
   }
   }
 }
 }
 
 
-pub struct GridRevisionSerde();
-impl RevisionObjectDeserializer for GridRevisionSerde {
+pub struct DatabaseRevisionSerde();
+impl RevisionObjectDeserializer for DatabaseRevisionSerde {
   type Output = DatabaseRevisionPad;
   type Output = DatabaseRevisionPad;
 
 
   fn deserialize_revisions(
   fn deserialize_revisions(
@@ -1011,25 +1054,25 @@ impl RevisionObjectDeserializer for GridRevisionSerde {
     None
     None
   }
   }
 }
 }
-impl RevisionObjectSerializer for GridRevisionSerde {
+impl RevisionObjectSerializer for DatabaseRevisionSerde {
   fn combine_revisions(revisions: Vec<Revision>) -> FlowyResult<Bytes> {
   fn combine_revisions(revisions: Vec<Revision>) -> FlowyResult<Bytes> {
     let operations = make_operations_from_revisions::<EmptyAttributes>(revisions)?;
     let operations = make_operations_from_revisions::<EmptyAttributes>(revisions)?;
     Ok(operations.json_bytes())
     Ok(operations.json_bytes())
   }
   }
 }
 }
 
 
-pub struct GridRevisionCloudService {
+pub struct DatabaseRevisionCloudService {
   #[allow(dead_code)]
   #[allow(dead_code)]
   token: String,
   token: String,
 }
 }
 
 
-impl GridRevisionCloudService {
+impl DatabaseRevisionCloudService {
   pub fn new(token: String) -> Self {
   pub fn new(token: String) -> Self {
     Self { token }
     Self { token }
   }
   }
 }
 }
 
 
-impl RevisionCloudService for GridRevisionCloudService {
+impl RevisionCloudService for DatabaseRevisionCloudService {
   #[tracing::instrument(level = "trace", skip(self))]
   #[tracing::instrument(level = "trace", skip(self))]
   fn fetch_object(
   fn fetch_object(
     &self,
     &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<Revision>) -> FlowyResult<Bytes> {
   fn combine_revisions(&self, revisions: Vec<Revision>) -> FlowyResult<Bytes> {
-    GridRevisionSerde::combine_revisions(revisions)
+    DatabaseRevisionSerde::combine_revisions(revisions)
   }
   }
 }
 }
 
 

+ 10 - 0
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::*;

+ 3 - 3
frontend/rust-lib/flowy-database/src/services/retry.rs → 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 flowy_error::FlowyError;
-use grid_model::RowRevision;
 use lib_infra::retry::Action;
 use lib_infra::retry::Action;
 use std::future::Future;
 use std::future::Future;
 use std::pin::Pin;
 use std::pin::Pin;
@@ -9,7 +9,7 @@ use tokio::sync::RwLock;
 
 
 pub struct GetRowDataRetryAction {
 pub struct GetRowDataRetryAction {
   pub row_id: String,
   pub row_id: String,
-  pub pad: Arc<RwLock<GridBlockRevisionPad>>,
+  pub pad: Arc<RwLock<DatabaseBlockRevisionPad>>,
 }
 }
 
 
 impl Action for GetRowDataRetryAction {
 impl Action for GetRowDataRetryAction {

+ 8 - 6
frontend/rust-lib/flowy-database/src/services/grid_editor_trait_impl.rs → frontend/rust-lib/flowy-database/src/services/database/trait_impl.rs

@@ -1,25 +1,26 @@
 use crate::entities::FieldType;
 use crate::entities::FieldType;
-use crate::services::block_manager::DatabaseBlockManager;
 use crate::services::cell::AtomicCellDataCache;
 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::field::{TypeOptionCellDataHandler, TypeOptionCellExt};
 use crate::services::row::DatabaseBlockRowRevision;
 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_client_sync::client_database::DatabaseRevisionPad;
 use flowy_task::TaskDispatcher;
 use flowy_task::TaskDispatcher;
-use grid_model::{FieldRevision, RowRevision};
 use lib_infra::future::{to_fut, Fut};
 use lib_infra::future::{to_fut, Fut};
+use std::any::type_name;
 use std::sync::Arc;
 use std::sync::Arc;
 use tokio::sync::RwLock;
 use tokio::sync::RwLock;
 
 
-pub(crate) struct GridViewEditorDelegateImpl {
+pub struct DatabaseViewEditorDelegateImpl {
   pub(crate) pad: Arc<RwLock<DatabaseRevisionPad>>,
   pub(crate) pad: Arc<RwLock<DatabaseRevisionPad>>,
   pub(crate) block_manager: Arc<DatabaseBlockManager>,
   pub(crate) block_manager: Arc<DatabaseBlockManager>,
   pub(crate) task_scheduler: Arc<RwLock<TaskDispatcher>>,
   pub(crate) task_scheduler: Arc<RwLock<TaskDispatcher>>,
   pub(crate) cell_data_cache: AtomicCellDataCache,
   pub(crate) cell_data_cache: AtomicCellDataCache,
 }
 }
 
 
-impl DatabaseViewEditorDelegate for GridViewEditorDelegateImpl {
+impl DatabaseViewEditorDelegate for DatabaseViewEditorDelegateImpl {
   fn get_field_revs(&self, field_ids: Option<Vec<String>>) -> Fut<Vec<Arc<FieldRevision>>> {
   fn get_field_revs(&self, field_ids: Option<Vec<String>>) -> Fut<Vec<Arc<FieldRevision>>> {
     let pad = self.pad.clone();
     let pad = self.pad.clone();
     to_fut(async move {
     to_fut(async move {
@@ -27,7 +28,8 @@ impl DatabaseViewEditorDelegate for GridViewEditorDelegateImpl {
         Ok(field_revs) => field_revs,
         Ok(field_revs) => field_revs,
         Err(e) => {
         Err(e) => {
           tracing::error!(
           tracing::error!(
-            "[GridViewRevisionDelegate] get field revisions failed: {}",
+            "[{}] get field revisions failed: {}",
+            type_name::<DatabaseViewEditorDelegateImpl>(),
             e
             e
           );
           );
           vec![]
           vec![]

+ 28 - 24
frontend/rust-lib/flowy-database/src/services/view_editor/editor.rs → frontend/rust-lib/flowy-database/src/services/database_view/editor.rs

@@ -1,7 +1,10 @@
 use crate::entities::*;
 use crate::entities::*;
 use crate::notification::{send_notification, DatabaseNotification};
 use crate::notification::{send_notification, DatabaseNotification};
-use crate::services::block_manager::DatabaseBlockEvent;
 use crate::services::cell::{AtomicCellDataCache, TypeCellData};
 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::field::{RowSingleCellData, TypeOptionCellDataHandler};
 use crate::services::filter::{
 use crate::services::filter::{
   FilterChangeset, FilterController, FilterTaskHandler, FilterType, UpdatedFilterType,
   FilterChangeset, FilterController, FilterTaskHandler, FilterType, UpdatedFilterType,
@@ -14,20 +17,17 @@ use crate::services::row::DatabaseBlockRowRevision;
 use crate::services::sort::{
 use crate::services::sort::{
   DeletedSortType, SortChangeset, SortController, SortTaskHandler, SortType,
   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::{
 use flowy_client_sync::client_database::{
-  make_grid_view_operations, GridViewRevisionChangeset, GridViewRevisionPad,
+  make_grid_view_operations, DatabaseViewRevisionPad, GridViewRevisionChangeset,
 };
 };
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
 use flowy_revision::RevisionManager;
 use flowy_revision::RevisionManager;
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
 use flowy_task::TaskDispatcher;
 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::async_trait::async_trait;
 use lib_infra::future::Fut;
 use lib_infra::future::Fut;
 use lib_infra::ref_map::RefCountValue;
 use lib_infra::ref_map::RefCountValue;
@@ -76,13 +76,13 @@ pub trait DatabaseViewEditorDelegate: Send + Sync + 'static {
 pub struct DatabaseViewRevisionEditor {
 pub struct DatabaseViewRevisionEditor {
   user_id: String,
   user_id: String,
   view_id: String,
   view_id: String,
-  pad: Arc<RwLock<GridViewRevisionPad>>,
+  pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   group_controller: Arc<RwLock<Box<dyn GroupController>>>,
   group_controller: Arc<RwLock<Box<dyn GroupController>>>,
   filter_controller: Arc<FilterController>,
   filter_controller: Arc<FilterController>,
   sort_controller: Arc<RwLock<SortController>>,
   sort_controller: Arc<RwLock<SortController>>,
-  pub notifier: GridViewChangedNotifier,
+  pub notifier: DatabaseViewChangedNotifier,
 }
 }
 
 
 impl DatabaseViewRevisionEditor {
 impl DatabaseViewRevisionEditor {
@@ -96,7 +96,7 @@ impl DatabaseViewRevisionEditor {
     mut rev_manager: RevisionManager<Arc<ConnectionPool>>,
     mut rev_manager: RevisionManager<Arc<ConnectionPool>>,
   ) -> FlowyResult<Self> {
   ) -> FlowyResult<Self> {
     let (notifier, _) = broadcast::channel(100);
     let (notifier, _) = broadcast::channel(100);
-    tokio::spawn(GridViewChangedReceiverRunner(Some(notifier.subscribe())).run());
+    tokio::spawn(DatabaseViewChangedReceiverRunner(Some(notifier.subscribe())).run());
     let cloud = Arc::new(GridViewRevisionCloudService {
     let cloud = Arc::new(GridViewRevisionCloudService {
       token: token.to_owned(),
       token: token.to_owned(),
     });
     });
@@ -109,8 +109,11 @@ impl DatabaseViewRevisionEditor {
       Err(err) => {
       Err(err) => {
         // It shouldn't be here, because the snapshot should come to recue.
         // It shouldn't be here, because the snapshot should come to recue.
         tracing::error!("Deserialize grid view revisions failed: {}", err);
         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 bytes = make_grid_view_operations(&view).json_bytes();
         let reset_revision = Revision::initial_revision(&view_id, bytes);
         let reset_revision = Revision::initial_revision(&view_id, bytes);
         let _ = rev_manager.reset_object(vec![reset_revision]).await;
         let _ = rev_manager.reset_object(vec![reset_revision]).await;
@@ -460,7 +463,7 @@ impl DatabaseViewRevisionEditor {
     let sort_type = SortType::from(&params);
     let sort_type = SortType::from(&params);
     let is_exist = params.sort_id.is_some();
     let is_exist = params.sort_id.is_some();
     let sort_id = match params.sort_id {
     let sort_id = match params.sort_id {
-      None => gen_grid_sort_id(),
+      None => gen_database_sort_id(),
       Some(sort_id) => sort_id,
       Some(sort_id) => sort_id,
     };
     };
 
 
@@ -559,7 +562,7 @@ impl DatabaseViewRevisionEditor {
     let filter_type = FilterType::from(&params);
     let filter_type = FilterType::from(&params);
     let is_exist = params.filter_id.is_some();
     let is_exist = params.filter_id.is_some();
     let filter_id = match params.filter_id {
     let filter_id = match params.filter_id {
-      None => gen_grid_filter_id(),
+      None => gen_database_filter_id(),
       Some(filter_id) => filter_id,
       Some(filter_id) => filter_id,
     };
     };
     let filter_rev = FilterRevision {
     let filter_rev = FilterRevision {
@@ -756,8 +759,9 @@ impl DatabaseViewRevisionEditor {
 
 
   async fn modify<F>(&self, f: F) -> FlowyResult<()>
   async fn modify<F>(&self, f: F) -> FlowyResult<()>
   where
   where
-    F:
-      for<'a> FnOnce(&'a mut GridViewRevisionPad) -> FlowyResult<Option<GridViewRevisionChangeset>>,
+    F: for<'a> FnOnce(
+      &'a mut DatabaseViewRevisionPad,
+    ) -> FlowyResult<Option<GridViewRevisionChangeset>>,
   {
   {
     let mut write_guard = self.pad.write().await;
     let mut write_guard = self.pad.write().await;
     match f(&mut write_guard)? {
     match f(&mut write_guard)? {
@@ -839,7 +843,7 @@ impl RefCountValue for DatabaseViewRevisionEditor {
 async fn new_group_controller(
 async fn new_group_controller(
   user_id: String,
   user_id: String,
   view_id: String,
   view_id: String,
-  view_rev_pad: Arc<RwLock<GridViewRevisionPad>>,
+  view_rev_pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
 ) -> FlowyResult<Box<dyn GroupController>> {
 ) -> FlowyResult<Box<dyn GroupController>> {
@@ -879,7 +883,7 @@ async fn new_group_controller(
 async fn new_group_controller_with_field_rev(
 async fn new_group_controller_with_field_rev(
   user_id: String,
   user_id: String,
   view_id: String,
   view_id: String,
-  view_rev_pad: Arc<RwLock<GridViewRevisionPad>>,
+  view_rev_pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   field_rev: Arc<FieldRevision>,
   field_rev: Arc<FieldRevision>,
   row_revs: Vec<Arc<RowRevision>>,
   row_revs: Vec<Arc<RowRevision>>,
@@ -903,9 +907,9 @@ async fn new_group_controller_with_field_rev(
 async fn make_filter_controller(
 async fn make_filter_controller(
   view_id: &str,
   view_id: &str,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
-  notifier: GridViewChangedNotifier,
+  notifier: DatabaseViewChangedNotifier,
   cell_data_cache: AtomicCellDataCache,
   cell_data_cache: AtomicCellDataCache,
-  pad: Arc<RwLock<GridViewRevisionPad>>,
+  pad: Arc<RwLock<DatabaseViewRevisionPad>>,
 ) -> Arc<FilterController> {
 ) -> Arc<FilterController> {
   let field_revs = delegate.get_field_revs(None).await;
   let field_revs = delegate.get_field_revs(None).await;
   let filter_revs = pad.read().await.get_all_filters(&field_revs);
   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(
 async fn make_sort_controller(
   view_id: &str,
   view_id: &str,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
-  notifier: GridViewChangedNotifier,
+  notifier: DatabaseViewChangedNotifier,
   filter_controller: Arc<FilterController>,
   filter_controller: Arc<FilterController>,
-  pad: Arc<RwLock<GridViewRevisionPad>>,
+  pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   cell_data_cache: AtomicCellDataCache,
   cell_data_cache: AtomicCellDataCache,
 ) -> Arc<RwLock<SortController>> {
 ) -> Arc<RwLock<SortController>> {
   let handler_id = gen_handler_id();
   let handler_id = gen_handler_id();

+ 9 - 9
frontend/rust-lib/flowy-database/src/services/view_editor/editor_manager.rs → 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,
   DeleteGroupParams, DeleteSortParams, InsertGroupParams, MoveGroupParams, RepeatedGroupPB, RowPB,
 };
 };
 use crate::manager::DatabaseUser;
 use crate::manager::DatabaseUser;
-use crate::services::block_manager::DatabaseBlockEvent;
 use crate::services::cell::AtomicCellDataCache;
 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::filter::FilterType;
 use crate::services::persistence::rev_sqlite::{
 use crate::services::persistence::rev_sqlite::{
   SQLiteDatabaseRevisionSnapshotPersistence, SQLiteGridViewRevisionPersistence,
   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_error::FlowyResult;
 use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration};
 use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration};
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
-use grid_model::{FieldRevision, FilterRevision, RowChangeset, RowRevision, SortRevision};
 use lib_infra::future::Fut;
 use lib_infra::future::Fut;
 use lib_infra::ref_map::RefCountHashMap;
 use lib_infra::ref_map::RefCountHashMap;
 use std::borrow::Cow;
 use std::borrow::Cow;
@@ -23,7 +23,7 @@ use std::sync::Arc;
 use tokio::sync::{broadcast, RwLock};
 use tokio::sync::{broadcast, RwLock};
 
 
 pub struct DatabaseViewManager {
 pub struct DatabaseViewManager {
-  view_id: String,
+  database_id: String,
   user: Arc<dyn DatabaseUser>,
   user: Arc<dyn DatabaseUser>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   delegate: Arc<dyn DatabaseViewEditorDelegate>,
   view_editors: Arc<RwLock<RefCountHashMap<Arc<DatabaseViewRevisionEditor>>>>,
   view_editors: Arc<RwLock<RefCountHashMap<Arc<DatabaseViewRevisionEditor>>>>,
@@ -32,7 +32,7 @@ pub struct DatabaseViewManager {
 
 
 impl DatabaseViewManager {
 impl DatabaseViewManager {
   pub async fn new(
   pub async fn new(
-    view_id: String,
+    database_id: String,
     user: Arc<dyn DatabaseUser>,
     user: Arc<dyn DatabaseUser>,
     delegate: Arc<dyn DatabaseViewEditorDelegate>,
     delegate: Arc<dyn DatabaseViewEditorDelegate>,
     cell_data_cache: AtomicCellDataCache,
     cell_data_cache: AtomicCellDataCache,
@@ -41,7 +41,7 @@ impl DatabaseViewManager {
     let view_editors = Arc::new(RwLock::new(RefCountHashMap::default()));
     let view_editors = Arc::new(RwLock::new(RefCountHashMap::default()));
     listen_on_database_block_event(block_event_rx, view_editors.clone());
     listen_on_database_block_event(block_event_rx, view_editors.clone());
     Ok(Self {
     Ok(Self {
-      view_id,
+      database_id,
       user,
       user,
       delegate,
       delegate,
       cell_data_cache,
       cell_data_cache,
@@ -260,7 +260,7 @@ impl DatabaseViewManager {
   }
   }
 
 
   async fn get_default_view_editor(&self) -> FlowyResult<Arc<DatabaseViewRevisionEditor>> {
   async fn get_default_view_editor(&self) -> FlowyResult<Arc<DatabaseViewRevisionEditor>> {
-    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<DatabaseViewRevisionEditor> {
   async fn make_view_editor(&self, view_id: &str) -> FlowyResult<DatabaseViewRevisionEditor> {

+ 2 - 2
frontend/rust-lib/flowy-database/src/services/view_editor/mod.rs → frontend/rust-lib/flowy-database/src/services/database_view/mod.rs

@@ -1,8 +1,8 @@
-mod changed_notifier;
 mod editor;
 mod editor;
 mod editor_manager;
 mod editor_manager;
+mod notifier;
 mod trait_impl;
 mod trait_impl;
 
 
-pub use changed_notifier::*;
 pub use editor::*;
 pub use editor::*;
 pub use editor_manager::*;
 pub use editor_manager::*;
+pub use notifier::*;

+ 4 - 3
frontend/rust-lib/flowy-database/src/services/view_editor/changed_notifier.rs → frontend/rust-lib/flowy-database/src/services/database_view/notifier.rs

@@ -13,12 +13,13 @@ pub enum DatabaseViewChanged {
   ReorderSingleRowNotification(ReorderSingleRowResult),
   ReorderSingleRowNotification(ReorderSingleRowResult),
 }
 }
 
 
-pub type GridViewChangedNotifier = broadcast::Sender<DatabaseViewChanged>;
+pub type DatabaseViewChangedNotifier = broadcast::Sender<DatabaseViewChanged>;
 
 
-pub(crate) struct GridViewChangedReceiverRunner(
+pub(crate) struct DatabaseViewChangedReceiverRunner(
   pub(crate) Option<broadcast::Receiver<DatabaseViewChanged>>,
   pub(crate) Option<broadcast::Receiver<DatabaseViewChanged>>,
 );
 );
-impl GridViewChangedReceiverRunner {
+
+impl DatabaseViewChangedReceiverRunner {
   pub(crate) async fn run(mut self) {
   pub(crate) async fn run(mut self) {
     let mut receiver = self.0.take().expect("Only take once");
     let mut receiver = self.0.take().expect("Only take once");
     let stream = stream! {
     let stream = stream! {

+ 17 - 14
frontend/rust-lib/flowy-database/src/services/view_editor/trait_impl.rs → frontend/rust-lib/flowy-database/src/services/database_view/trait_impl.rs

@@ -1,12 +1,16 @@
 use crate::entities::{DatabaseViewSettingPB, LayoutTypePB, ViewLayoutPB};
 use crate::entities::{DatabaseViewSettingPB, LayoutTypePB, ViewLayoutPB};
+use crate::services::database_view::{get_cells_for_field, DatabaseViewEditorDelegate};
 use crate::services::field::RowSingleCellData;
 use crate::services::field::RowSingleCellData;
 use crate::services::filter::{FilterController, FilterDelegate, FilterType};
 use crate::services::filter::{FilterController, FilterDelegate, FilterType};
 use crate::services::group::{GroupConfigurationReader, GroupConfigurationWriter};
 use crate::services::group::{GroupConfigurationReader, GroupConfigurationWriter};
 use crate::services::row::DatabaseBlockRowRevision;
 use crate::services::row::DatabaseBlockRowRevision;
 use crate::services::sort::{SortDelegate, SortType};
 use crate::services::sort::{SortDelegate, SortType};
-use crate::services::view_editor::{get_cells_for_field, DatabaseViewEditorDelegate};
 use bytes::Bytes;
 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_client_sync::make_operations_from_revisions;
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_revision::{
 use flowy_revision::{
@@ -14,10 +18,6 @@ use flowy_revision::{
   RevisionObjectSerializer,
   RevisionObjectSerializer,
 };
 };
 use flowy_sqlite::ConnectionPool;
 use flowy_sqlite::ConnectionPool;
-use grid_model::{
-  FieldRevision, FieldTypeRevision, FilterRevision, GroupConfigurationRevision, RowRevision,
-  SortRevision,
-};
 use lib_infra::future::{to_fut, Fut, FutureResult};
 use lib_infra::future::{to_fut, Fut, FutureResult};
 use lib_ot::core::EmptyAttributes;
 use lib_ot::core::EmptyAttributes;
 use revision_model::Revision;
 use revision_model::Revision;
@@ -41,10 +41,13 @@ impl RevisionCloudService for GridViewRevisionCloudService {
 
 
 pub(crate) struct GridViewRevisionSerde();
 pub(crate) struct GridViewRevisionSerde();
 impl RevisionObjectDeserializer for GridViewRevisionSerde {
 impl RevisionObjectDeserializer for GridViewRevisionSerde {
-  type Output = GridViewRevisionPad;
+  type Output = DatabaseViewRevisionPad;
 
 
-  fn deserialize_revisions(object_id: &str, revisions: Vec<Revision>) -> FlowyResult<Self::Output> {
-    let pad = GridViewRevisionPad::from_revisions(object_id, revisions)?;
+  fn deserialize_revisions(
+    _object_id: &str,
+    revisions: Vec<Revision>,
+  ) -> FlowyResult<Self::Output> {
+    let pad = DatabaseViewRevisionPad::from_revisions(revisions)?;
     Ok(pad)
     Ok(pad)
   }
   }
 
 
@@ -68,7 +71,7 @@ impl RevisionMergeable for GridViewRevisionMergeable {
 }
 }
 
 
 pub(crate) struct GroupConfigurationReaderImpl {
 pub(crate) struct GroupConfigurationReaderImpl {
-  pub(crate) pad: Arc<RwLock<GridViewRevisionPad>>,
+  pub(crate) pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   pub(crate) view_editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
   pub(crate) view_editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
 }
 }
 
 
@@ -96,7 +99,7 @@ impl GroupConfigurationReader for GroupConfigurationReaderImpl {
 pub(crate) struct GroupConfigurationWriterImpl {
 pub(crate) struct GroupConfigurationWriterImpl {
   pub(crate) user_id: String,
   pub(crate) user_id: String,
   pub(crate) rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
   pub(crate) rev_manager: Arc<RevisionManager<Arc<ConnectionPool>>>,
-  pub(crate) view_pad: Arc<RwLock<GridViewRevisionPad>>,
+  pub(crate) view_pad: Arc<RwLock<DatabaseViewRevisionPad>>,
 }
 }
 
 
 impl GroupConfigurationWriter for GroupConfigurationWriterImpl {
 impl GroupConfigurationWriter for GroupConfigurationWriterImpl {
@@ -140,7 +143,7 @@ pub(crate) async fn apply_change(
 }
 }
 
 
 pub fn make_grid_setting(
 pub fn make_grid_setting(
-  view_pad: &GridViewRevisionPad,
+  view_pad: &DatabaseViewRevisionPad,
   field_revs: &[Arc<FieldRevision>],
   field_revs: &[Arc<FieldRevision>],
 ) -> DatabaseViewSettingPB {
 ) -> DatabaseViewSettingPB {
   let layout_type: LayoutTypePB = view_pad.layout.clone().into();
   let layout_type: LayoutTypePB = view_pad.layout.clone().into();
@@ -158,7 +161,7 @@ pub fn make_grid_setting(
 
 
 pub(crate) struct GridViewFilterDelegateImpl {
 pub(crate) struct GridViewFilterDelegateImpl {
   pub(crate) editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
   pub(crate) editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
-  pub(crate) view_revision_pad: Arc<RwLock<GridViewRevisionPad>>,
+  pub(crate) view_revision_pad: Arc<RwLock<DatabaseViewRevisionPad>>,
 }
 }
 
 
 impl FilterDelegate for GridViewFilterDelegateImpl {
 impl FilterDelegate for GridViewFilterDelegateImpl {
@@ -198,7 +201,7 @@ impl FilterDelegate for GridViewFilterDelegateImpl {
 
 
 pub(crate) struct GridViewSortDelegateImpl {
 pub(crate) struct GridViewSortDelegateImpl {
   pub(crate) editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
   pub(crate) editor_delegate: Arc<dyn DatabaseViewEditorDelegate>,
-  pub(crate) view_revision_pad: Arc<RwLock<GridViewRevisionPad>>,
+  pub(crate) view_revision_pad: Arc<RwLock<DatabaseViewRevisionPad>>,
   pub(crate) filter_controller: Arc<FilterController>,
   pub(crate) filter_controller: Arc<FilterController>,
 }
 }
 
 

+ 1 - 1
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 crate::services::field::{default_type_option_builder_from_type, TypeOptionBuilder};
 
 
-use grid_model::FieldRevision;
+use database_model::FieldRevision;
 use indexmap::IndexMap;
 use indexmap::IndexMap;
 
 
 pub struct FieldBuilder {
 pub struct FieldBuilder {

+ 3 - 3
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::field::{MultiSelectTypeOptionPB, SingleSelectTypeOptionPB};
-use crate::services::grid_editor::DatabaseRevisionEditor;
+use database_model::{TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use std::sync::Arc;
 use std::sync::Arc;
 
 
 pub async fn edit_field_type_option<T>(
 pub async fn edit_field_type_option<T>(
@@ -23,7 +23,7 @@ where
     action(&mut type_option);
     action(&mut type_option);
     let bytes = type_option.protobuf_bytes().to_vec();
     let bytes = type_option.protobuf_bytes().to_vec();
     editor
     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?;
       .await?;
   }
   }
 
 

+ 1 - 1
frontend/rust-lib/flowy-database/src/services/field/type_option_builder.rs

@@ -1,7 +1,7 @@
 use crate::entities::FieldType;
 use crate::entities::FieldType;
 use crate::services::field::type_options::*;
 use crate::services::field::type_options::*;
 use bytes::Bytes;
 use bytes::Bytes;
-use grid_model::TypeOptionDataSerializer;
+use database_model::TypeOptionDataSerializer;
 
 
 pub trait TypeOptionBuilder {
 pub trait TypeOptionBuilder {
   /// Returns the type of the type-option data
   /// Returns the type of the type-option data

+ 1 - 1
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::type_options::checkbox_type_option::*;
   use crate::services::field::FieldBuilder;
   use crate::services::field::FieldBuilder;
 
 
-  use grid_model::FieldRevision;
+  use database_model::FieldRevision;
 
 
   #[test]
   #[test]
   fn checkout_box_description_test() {
   fn checkout_box_description_test() {

+ 1 - 1
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,
   TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 use std::cmp::Ordering;
 use std::cmp::Ordering;
 use std::str::FromStr;
 use std::str::FromStr;

+ 1 - 1
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 crate::services::field::{DateCellChangeset, DateCellData, DateFormat, DateTypeOptionPB, TimeFormat};
   use chrono::format::strftime::StrftimeItems;
   use chrono::format::strftime::StrftimeItems;
   use chrono::{FixedOffset, NaiveDateTime};
   use chrono::{FixedOffset, NaiveDateTime};
-  use grid_model::FieldRevision;
+  use database_model::FieldRevision;
   use strum::IntoEnumIterator;
   use strum::IntoEnumIterator;
 
 
   #[test]
   #[test]

+ 1 - 1
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 bytes::Bytes;
 use chrono::format::strftime::StrftimeItems;
 use chrono::format::strftime::StrftimeItems;
 use chrono::{NaiveDateTime, Timelike};
 use chrono::{NaiveDateTime, Timelike};
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
 use flowy_error::{ErrorCode, FlowyError, FlowyResult};
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 use std::cmp::Ordering;
 use std::cmp::Ordering;
 
 

+ 1 - 1
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::FieldBuilder;
 
 
   use crate::services::field::{strip_currency_symbol, NumberFormat, NumberTypeOptionPB};
   use crate::services::field::{strip_currency_symbol, NumberFormat, NumberTypeOptionPB};
-  use grid_model::FieldRevision;
+  use database_model::FieldRevision;
   use strum::IntoEnumIterator;
   use strum::IntoEnumIterator;
 
 
   /// Testing when the input is not a number.
   /// Testing when the input is not a number.

+ 1 - 1
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,
   TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use fancy_regex::Regex;
 use fancy_regex::Regex;
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use lazy_static::lazy_static;
 use lazy_static::lazy_static;
 use rust_decimal::Decimal;
 use rust_decimal::Decimal;
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};

+ 1 - 1
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,
   TypeOptionBuilder, TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 use std::cmp::Ordering;
 use std::cmp::Ordering;
 
 

+ 1 - 1
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,
   TypeOptionBuilder, TypeOptionCellData, TypeOptionCellDataCompare, TypeOptionCellDataFilter,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 
 
 // Multiple select
 // Multiple select

+ 1 - 1
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,
   TypeOption, TypeOptionCellData, TypeOptionTransform,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataSerializer};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
 use flowy_error::{internal_error, ErrorCode, FlowyResult};
 use flowy_error::{internal_error, ErrorCode, FlowyResult};
-use grid_model::{FieldRevision, TypeOptionDataSerializer};
 use nanoid::nanoid;
 use nanoid::nanoid;
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 
 

+ 1 - 1
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,
   SelectOptionCellChangeset, SelectOptionIds, SelectOptionPB, SelectTypeOptionSharedAction,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 
 
 // Single select
 // Single select

+ 1 - 1
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,
   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
 /// Handles how to transform the cell data when switching between different field types
 pub(crate) struct SelectOptionTypeOptionTransformHelper();
 pub(crate) struct SelectOptionTypeOptionTransformHelper();

+ 1 - 1
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,
   TypeOptionCellDataCompare, TypeOptionCellDataFilter, TypeOptionTransform,
 };
 };
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use flowy_derive::ProtoBuf;
 use flowy_derive::ProtoBuf;
 use flowy_error::{FlowyError, FlowyResult};
 use flowy_error::{FlowyError, FlowyResult};
-use grid_model::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataSerializer};
 use protobuf::ProtobufError;
 use protobuf::ProtobufError;
 use serde::{Deserialize, Serialize};
 use serde::{Deserialize, Serialize};
 use std::cmp::Ordering;
 use std::cmp::Ordering;

+ 1 - 1
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 crate::services::filter::FromFilterString;
 use bytes::Bytes;
 use bytes::Bytes;
+use database_model::FieldRevision;
 use flowy_error::FlowyResult;
 use flowy_error::FlowyResult;
-use grid_model::FieldRevision;
 use protobuf::ProtobufError;
 use protobuf::ProtobufError;
 use std::cmp::Ordering;
 use std::cmp::Ordering;
 use std::fmt::Debug;
 use std::fmt::Debug;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است