From d2ca41c8f5964b2a40c3e8cd731929a2183a0efc Mon Sep 17 00:00:00 2001 From: Zack Date: Mon, 24 Jun 2024 14:19:36 +0800 Subject: [PATCH] Remove deprecated add member (#5611) * chore: remove deprecated add member directly * chore: cargo clippy * chore: cargo clippy * chore: cargo clippy --- frontend/rust-lib/Cargo.toml | 2 +- .../src/folder_event.rs | 37 +++++++++++-------- .../af_cloud_test/file_upload_test.rs | 20 ++++------ .../tests/user/af_cloud_test/member_test.rs | 6 +-- .../user/af_cloud_test/workspace_test.rs | 2 +- .../af_cloud/impls/user/cloud_service_impl.rs | 25 +------------ frontend/rust-lib/flowy-sqlite/src/schema.rs | 18 ++++----- .../rust-lib/flowy-storage/src/manager.rs | 29 ++++++++------- .../tests/multiple_part_upload_test.rs | 12 +++--- frontend/rust-lib/flowy-user-pub/src/cloud.rs | 9 ----- .../flowy-user/src/entities/workspace.rs | 1 + .../rust-lib/flowy-user/src/event_handler.rs | 13 ------- frontend/rust-lib/flowy-user/src/event_map.rs | 4 +- .../user_manager/manager_user_workspace.rs | 14 ------- 14 files changed, 65 insertions(+), 127 deletions(-) diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index 2734218319..590bf9fb73 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -94,7 +94,7 @@ validator = { version = "0.16.1", features = ["derive"] } # Please using the following command to update the revision id # Current directory: frontend -# Run the script.add_workspace_members: +# Run the script: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "6262816043efeede8823d7a7ea252083adf407e9" } diff --git a/frontend/rust-lib/event-integration-test/src/folder_event.rs b/frontend/rust-lib/event-integration-test/src/folder_event.rs index af4de3f5d0..359f9188cb 100644 --- a/frontend/rust-lib/event-integration-test/src/folder_event.rs +++ b/frontend/rust-lib/event-integration-test/src/folder_event.rs @@ -7,7 +7,7 @@ use flowy_folder::event_map::FolderEvent::*; use flowy_folder::{entities::*, ViewLayout}; use flowy_search::services::manager::{SearchHandler, SearchType}; use flowy_user::entities::{ - AcceptWorkspaceInvitationPB, AddWorkspaceMemberPB, QueryWorkspacePB, RemoveWorkspaceMemberPB, + AcceptWorkspaceInvitationPB, QueryWorkspacePB, RemoveWorkspaceMemberPB, RepeatedWorkspaceInvitationPB, RepeatedWorkspaceMemberPB, WorkspaceMemberInvitationPB, WorkspaceMemberPB, }; @@ -19,21 +19,6 @@ use crate::event_builder::EventBuilder; use crate::EventIntegrationTest; impl EventIntegrationTest { - pub async fn add_workspace_member(&self, workspace_id: &str, email: &str) { - if let Some(err) = EventBuilder::new(self.clone()) - .event(UserEvent::AddWorkspaceMember) - .payload(AddWorkspaceMemberPB { - workspace_id: workspace_id.to_string(), - email: email.to_string(), - }) - .async_send() - .await - .error() - { - panic!("Add workspace member failed: {:?}", err); - } - } - pub async fn invite_workspace_member(&self, workspace_id: &str, email: &str, role: Role) { EventBuilder::new(self.clone()) .event(UserEvent::InviteWorkspaceMember) @@ -46,6 +31,26 @@ impl EventIntegrationTest { .await; } + // convenient function to add workspace member by inviting and accepting the invitation + pub async fn add_workspace_member(&self, workspace_id: &str, other: &EventIntegrationTest) { + let other_email = other.get_user_profile().await.unwrap().email; + + self + .invite_workspace_member(workspace_id, &other_email, Role::Member) + .await; + + let invitations = other.list_workspace_invitations().await; + let target_invi = invitations + .items + .into_iter() + .find(|i| i.workspace_id == workspace_id) + .unwrap(); + + other + .accept_workspace_invitation(&target_invi.invite_id) + .await; + } + pub async fn list_workspace_invitations(&self) -> RepeatedWorkspaceInvitationPB { EventBuilder::new(self.clone()) .event(UserEvent::ListWorkspaceInvitations) diff --git a/frontend/rust-lib/event-integration-test/tests/document/af_cloud_test/file_upload_test.rs b/frontend/rust-lib/event-integration-test/tests/document/af_cloud_test/file_upload_test.rs index 4b2702469c..ba9e2023fe 100644 --- a/frontend/rust-lib/event-integration-test/tests/document/af_cloud_test/file_upload_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/document/af_cloud_test/file_upload_test.rs @@ -26,10 +26,8 @@ async fn af_cloud_upload_file_test() { .unwrap(); while let Ok(result) = rx.recv().await { - if result.file_id == created_upload.file_id { - if result.status == UploadStatus::Finish { - break; - } + if result.file_id == created_upload.file_id && result.status == UploadStatus::Finish { + break; } } @@ -54,10 +52,8 @@ async fn af_cloud_upload_big_file_test() { let mut rx = test.storage_manager.subscribe_upload_result(); while let Ok(result) = rx.recv().await { - if result.file_id == created_upload.file_id { - if result.status == UploadStatus::InProgress { - break; - } + if result.file_id == created_upload.file_id && result.status == UploadStatus::InProgress { + break; } } @@ -71,10 +67,8 @@ async fn af_cloud_upload_big_file_test() { let test = EventIntegrationTest::new_with_config(config).await; let mut rx = test.storage_manager.subscribe_upload_result(); while let Ok(result) = rx.recv().await { - if result.file_id == created_upload.file_id { - if result.status == UploadStatus::Finish { - break; - } + if result.file_id == created_upload.file_id && result.status == UploadStatus::Finish { + break; } } @@ -101,7 +95,7 @@ async fn af_cloud_upload_6_files_test() { let mut rx = test.storage_manager.subscribe_upload_result(); let mut created_uploads = vec![]; - for file_size in vec![1, 2, 5, 8, 12, 20] { + for file_size in [1, 2, 5, 8, 12, 20] { let file_path = generate_file_with_bytes_len(file_size * 1024 * 1024) .await .0; diff --git a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/member_test.rs b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/member_test.rs index c5fc2479bb..9eba50b404 100644 --- a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/member_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/member_test.rs @@ -47,7 +47,7 @@ async fn af_cloud_add_workspace_member_test() { assert_eq!(members[0].email, user_1.email); test_1 - .add_workspace_member(&user_1.workspace_id, &user_2.email) + .add_workspace_member(&user_1.workspace_id, &test_2) .await; let members = test_1.get_workspace_members(&user_1.workspace_id).await; @@ -66,7 +66,7 @@ async fn af_cloud_delete_workspace_member_test() { let user_2 = test_2.af_cloud_sign_up().await; test_1 - .add_workspace_member(&user_1.workspace_id, &user_2.email) + .add_workspace_member(&user_1.workspace_id, &test_2) .await; test_1 @@ -88,7 +88,7 @@ async fn af_cloud_leave_workspace_test() { let user_2 = test_2.af_cloud_sign_up().await; test_1 - .add_workspace_member(&user_1.workspace_id, &user_2.email) + .add_workspace_member(&user_1.workspace_id, &test_2) .await; // test_2 should have 2 workspace diff --git a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/workspace_test.rs b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/workspace_test.rs index af743e7ced..b72ceba33f 100644 --- a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/workspace_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/workspace_test.rs @@ -182,7 +182,7 @@ async fn af_cloud_different_open_same_workspace_test() { } client_1 - .add_workspace_member(&owner_profile.workspace_id, &client_profile.email) + .add_workspace_member(&owner_profile.workspace_id, &client) .await; clients.push((client, client_profile)); } diff --git a/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs b/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs index a7928a9747..cbb006ce8c 100644 --- a/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs +++ b/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs @@ -6,8 +6,7 @@ use client_api::entity::billing_dto::{ SubscriptionPlan, SubscriptionStatus, WorkspaceSubscriptionPlan, WorkspaceSubscriptionStatus, }; use client_api::entity::workspace_dto::{ - CreateWorkspaceMember, CreateWorkspaceParam, PatchWorkspaceParam, WorkspaceMemberChangeset, - WorkspaceMemberInvitation, + CreateWorkspaceParam, PatchWorkspaceParam, WorkspaceMemberChangeset, WorkspaceMemberInvitation, }; use client_api::entity::{ AFRole, AFWorkspace, AFWorkspaceInvitation, AuthProvider, CollabParams, CreateCollabParams, @@ -222,28 +221,6 @@ where }) } - #[allow(deprecated)] - fn add_workspace_member( - &self, - user_email: String, - workspace_id: String, - ) -> FutureResult<(), FlowyError> { - let try_get_client = self.server.try_get_client(); - FutureResult::new(async move { - // TODO(zack): add_workspace_members will be deprecated after finishing the invite logic. Don't forget to remove the #[allow(deprecated)] - try_get_client? - .add_workspace_members( - workspace_id, - vec![CreateWorkspaceMember { - email: user_email, - role: AFRole::Member, - }], - ) - .await?; - Ok(()) - }) - } - fn invite_workspace_member( &self, invitee_email: String, diff --git a/frontend/rust-lib/flowy-sqlite/src/schema.rs b/frontend/rust-lib/flowy-sqlite/src/schema.rs index 49fcc254d1..f23eb029ea 100644 --- a/frontend/rust-lib/flowy-sqlite/src/schema.rs +++ b/frontend/rust-lib/flowy-sqlite/src/schema.rs @@ -102,13 +102,13 @@ diesel::table! { } diesel::allow_tables_to_appear_in_same_query!( - chat_message_table, - chat_table, - collab_snapshot, - upload_file_part, - upload_file_table, - user_data_migration_records, - user_table, - user_workspace_table, - workspace_members_table, + chat_message_table, + chat_table, + collab_snapshot, + upload_file_part, + upload_file_table, + user_data_migration_records, + user_table, + user_workspace_table, + workspace_members_table, ); diff --git a/frontend/rust-lib/flowy-storage/src/manager.rs b/frontend/rust-lib/flowy-storage/src/manager.rs index 8375b12f66..43017419c3 100644 --- a/frontend/rust-lib/flowy-storage/src/manager.rs +++ b/frontend/rust-lib/flowy-storage/src/manager.rs @@ -314,12 +314,12 @@ impl StorageService for StorageServiceImpl { // When resuming an upload, check if the upload_id is empty. // If the upload_id is empty, the upload has likely not been created yet. // If the upload_id is not empty, verify which parts have already been uploaded. - select_upload_file(conn, &workspace_id, &parent_dir, &file_id)?.and_then(|record| { + select_upload_file(conn, workspace_id, parent_dir, file_id)?.map(|record| { if record.upload_id.is_empty() { - Some((record, vec![])) + (record, vec![]) } else { let parts = select_upload_parts(conn, &record.upload_id).unwrap_or_default(); - Some((record, parts)) + (record, parts) } }), ) @@ -358,7 +358,7 @@ async fn create_upload_record( let content_type = mime_guess::from_path(&local_file_path) .first_or_octet_stream() .to_string(); - let file_id = format!("{}.{}", fxhash::hash(&chunked_bytes.data).to_string(), ext); + let file_id = format!("{}.{}", fxhash::hash(&chunked_bytes.data), ext); let record = UploadFileTable { workspace_id, file_id, @@ -430,10 +430,10 @@ async fn start_upload( upload_file.file_id, chunked_bytes.iter().count() ); - let mut iter = chunked_bytes.iter().enumerate(); + let iter = chunked_bytes.iter().enumerate(); let mut completed_parts = Vec::new(); - while let Some((index, chunk_bytes)) = iter.next() { + for (index, chunk_bytes) in iter { let part_number = index as i32 + 1; trace!( "[File] {} uploading part: {}, len:{}KB", @@ -443,8 +443,8 @@ async fn start_upload( ); // start uploading parts match upload_part( - &cloud_service, - &user_service, + cloud_service, + user_service, &upload_file.workspace_id, &upload_file.parent_dir, &upload_file.upload_id, @@ -476,8 +476,8 @@ async fn start_upload( // mark it as completed complete_upload( - &cloud_service, - &user_service, + cloud_service, + user_service, temp_storage, &upload_file, completed_parts, @@ -540,6 +540,7 @@ async fn resume_upload( Ok(()) } +#[allow(clippy::too_many_arguments)] #[instrument(level = "debug", skip_all)] async fn upload_part( cloud_service: &Arc, @@ -553,10 +554,10 @@ async fn upload_part( ) -> Result { let resp = cloud_service .upload_part( - &workspace_id, - &parent_dir, - &upload_id, - &file_id, + workspace_id, + parent_dir, + upload_id, + file_id, part_number, body, ) diff --git a/frontend/rust-lib/flowy-storage/tests/multiple_part_upload_test.rs b/frontend/rust-lib/flowy-storage/tests/multiple_part_upload_test.rs index 42facd25a4..64ab83b076 100644 --- a/frontend/rust-lib/flowy-storage/tests/multiple_part_upload_test.rs +++ b/frontend/rust-lib/flowy-storage/tests/multiple_part_upload_test.rs @@ -13,7 +13,7 @@ use std::path::PathBuf; use std::time::Duration; pub fn test_database() -> (Database, PathBuf) { - let db_path = temp_dir().join(&format!("test-{}.db", generate_random_string(8))); + let db_path = temp_dir().join(format!("test-{}.db", generate_random_string(8))); (flowy_sqlite::init(&db_path).unwrap(), db_path) } @@ -102,7 +102,7 @@ async fn test_upload_part_test() { // get all existing parts let mut conn = db.get_connection().unwrap(); - let parts = select_upload_parts(&mut *conn, &upload_id).unwrap(); + let parts = select_upload_parts(&mut conn, &upload_id).unwrap(); assert_eq!(parts.len(), 2); assert_eq!(parts[0].part_num, 1); assert_eq!(parts[1].part_num, 2); @@ -112,7 +112,7 @@ async fn test_upload_part_test() { delete_upload_file(conn, &upload_id).unwrap(); let mut conn = db.get_connection().unwrap(); - let parts = select_upload_parts(&mut *conn, &upload_id).unwrap(); + let parts = select_upload_parts(&mut conn, &upload_id).unwrap(); assert!(parts.is_empty()) } @@ -165,7 +165,7 @@ pub async fn create_upload_file_record( let file_id = fxhash::hash(&chunked_bytes.data).to_string(); // Create UploadFileTable record - let upload_file = UploadFileTable { + UploadFileTable { workspace_id, file_id, upload_id, @@ -175,7 +175,5 @@ pub async fn create_upload_file_record( chunk_size: MIN_CHUNK_SIZE as i32, num_chunk: chunked_bytes.offsets.len() as i32, created_at: chrono::Utc::now().timestamp(), - }; - - upload_file + } } diff --git a/frontend/rust-lib/flowy-user-pub/src/cloud.rs b/frontend/rust-lib/flowy-user-pub/src/cloud.rs index a97f7b28e1..0508e5c40e 100644 --- a/frontend/rust-lib/flowy-user-pub/src/cloud.rs +++ b/frontend/rust-lib/flowy-user-pub/src/cloud.rs @@ -178,15 +178,6 @@ pub trait UserCloudService: Send + Sync + 'static { /// Deletes a workspace owned by the user. fn delete_workspace(&self, workspace_id: &str) -> FutureResult<(), FlowyError>; - // Deprecated, use invite instead - fn add_workspace_member( - &self, - user_email: String, - workspace_id: String, - ) -> FutureResult<(), FlowyError> { - FutureResult::new(async { Ok(()) }) - } - fn invite_workspace_member( &self, invitee_email: String, diff --git a/frontend/rust-lib/flowy-user/src/entities/workspace.rs b/frontend/rust-lib/flowy-user/src/entities/workspace.rs index d860385de0..96660bdea2 100644 --- a/frontend/rust-lib/flowy-user/src/entities/workspace.rs +++ b/frontend/rust-lib/flowy-user/src/entities/workspace.rs @@ -98,6 +98,7 @@ pub struct AcceptWorkspaceInvitationPB { pub invite_id: String, } +// Deprecated #[derive(ProtoBuf, Default, Clone, Validate)] pub struct AddWorkspaceMemberPB { #[pb(index = 1)] diff --git a/frontend/rust-lib/flowy-user/src/event_handler.rs b/frontend/rust-lib/flowy-user/src/event_handler.rs index b2c36d8c6b..831289d1b9 100644 --- a/frontend/rust-lib/flowy-user/src/event_handler.rs +++ b/frontend/rust-lib/flowy-user/src/event_handler.rs @@ -623,19 +623,6 @@ pub async fn update_reminder_event_handler( Ok(()) } -#[tracing::instrument(level = "debug", skip_all, err)] -pub async fn add_workspace_member_handler( - data: AFPluginData, - manager: AFPluginState>, -) -> Result<(), FlowyError> { - let data = data.try_into_inner()?; - let manager = upgrade_manager(manager)?; - manager - .add_workspace_member(data.email, data.workspace_id) - .await?; - Ok(()) -} - #[tracing::instrument(level = "debug", skip_all, err)] pub async fn delete_workspace_member_handler( data: AFPluginData, diff --git a/frontend/rust-lib/flowy-user/src/event_map.rs b/frontend/rust-lib/flowy-user/src/event_map.rs index 42be2a256b..387f1deaa2 100644 --- a/frontend/rust-lib/flowy-user/src/event_map.rs +++ b/frontend/rust-lib/flowy-user/src/event_map.rs @@ -54,9 +54,6 @@ pub fn init(user_manager: Weak) -> AFPlugin { .event(UserEvent::SetNotificationSettings, set_notification_settings) .event(UserEvent::GetNotificationSettings, get_notification_settings) .event(UserEvent::ImportAppFlowyDataFolder, import_appflowy_data_folder_handler) - // Workspace member - .event(UserEvent::AddWorkspaceMember, add_workspace_member_handler) // deprecated, use invite - // instead .event(UserEvent::GetMemberInfo, get_workspace_member_info) .event(UserEvent::RemoveWorkspaceMember, delete_workspace_member_handler) .event(UserEvent::GetWorkspaceMembers, get_workspace_members_handler) @@ -196,6 +193,7 @@ pub enum UserEvent { #[event(output = "NotificationSettingsPB")] GetNotificationSettings = 36, + // Deprecated #[event(input = "AddWorkspaceMemberPB")] AddWorkspaceMember = 37, diff --git a/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs b/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs index cee00fecd4..0c22d28d43 100644 --- a/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs +++ b/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs @@ -327,20 +327,6 @@ impl UserManager { Ok(()) } - // deprecated, use invite instead - pub async fn add_workspace_member( - &self, - user_email: String, - workspace_id: String, - ) -> FlowyResult<()> { - self - .cloud_services - .get_user_service()? - .add_workspace_member(user_email, workspace_id) - .await?; - Ok(()) - } - pub async fn remove_workspace_member( &self, user_email: String,