diff --git a/src/biz/collab/ops.rs b/src/biz/collab/ops.rs index 8e50c1c0..266110ad 100644 --- a/src/biz/collab/ops.rs +++ b/src/biz/collab/ops.rs @@ -169,26 +169,33 @@ pub async fn get_user_workspace_structure( depth, depth_limit ))); } - let folder = get_latest_collab_folder(collab_storage, &uid, &workspace_id).await?; + let folder = + get_latest_collab_folder(collab_storage, GetCollabOrigin::User { uid }, &workspace_id).await?; let folder_view: FolderView = collab_folder_to_folder_view(&folder, depth); Ok(folder_view) } pub async fn get_latest_collab_folder( collab_storage: Arc, - uid: &i64, + collab_origin: GetCollabOrigin, workspace_id: &str, ) -> Result { + let folder_uid = if let GetCollabOrigin::User { uid } = collab_origin { + uid + } else { + // Dummy uid to open the collab folder if the request does not originate from user + 0 + }; let encoded_collab = get_latest_collab_encoded( collab_storage, - uid, + collab_origin, workspace_id, workspace_id, CollabType::Folder, ) .await?; let folder = Folder::from_collab_doc_state( - uid, + folder_uid, CollabOrigin::Server, encoded_collab.into(), workspace_id, @@ -200,14 +207,14 @@ pub async fn get_latest_collab_folder( pub async fn get_latest_collab_encoded( collab_storage: Arc, - uid: &i64, + collab_origin: GetCollabOrigin, workspace_id: &str, oid: &str, collab_type: CollabType, ) -> Result { collab_storage .get_encode_collab( - GetCollabOrigin::User { uid: *uid }, + collab_origin, QueryCollabParams { workspace_id: workspace_id.to_string(), inner: QueryCollab { @@ -226,22 +233,12 @@ pub async fn get_published_view( pg_pool: &PgPool, ) -> Result { let workspace_id = select_workspace_id_for_publish_namespace(pg_pool, &publish_namespace).await?; - let query_collab_params = QueryCollabParams::new( - workspace_id, - collab_entity::CollabType::Folder, - workspace_id, - ); - let encoded_collab = collab_storage - .get_encode_collab(GetCollabOrigin::Server, query_collab_params, true) - .await?; - let folder = Folder::from_collab_doc_state( - 0, - CollabOrigin::Server, - encoded_collab.into(), + let folder = get_latest_collab_folder( + collab_storage, + GetCollabOrigin::Server, &workspace_id.to_string(), - vec![], ) - .map_err(|e| AppError::Unhandled(e.to_string()))?; + .await?; let publish_view_ids = select_published_view_ids_for_workspace(pg_pool, workspace_id).await?; let publish_view_ids: HashSet = publish_view_ids .into_iter() diff --git a/src/biz/workspace/publish_dup.rs b/src/biz/workspace/publish_dup.rs index db43c09e..d72ef1fa 100644 --- a/src/biz/workspace/publish_dup.rs +++ b/src/biz/workspace/publish_dup.rs @@ -12,6 +12,7 @@ use collab_entity::CollabType; use collab_folder::{CollabOrigin, Folder, RepeatedViewIdentifier, View}; use collab_rt_entity::{ClientCollabMessage, UpdateSync}; use collab_rt_protocol::{Message, SyncMessage}; +use database::collab::GetCollabOrigin; use database::collab::{select_workspace_database_oid, CollabStorage}; use database::publish::select_published_data_for_view_id; use database_entity::dto::CollabParams; @@ -165,7 +166,9 @@ impl PublishCollabDuplicator { let mut ws_db_collab = { let ws_database_ec = get_latest_collab_encoded( collab_storage.clone(), - &duplicator_uid, + GetCollabOrigin::User { + uid: duplicator_uid, + }, &dest_workspace_id, &ws_db_oid, CollabType::WorkspaceDatabase, @@ -207,7 +210,9 @@ impl PublishCollabDuplicator { let collab_folder_encoded = get_latest_collab_encoded( collab_storage.clone(), - &duplicator_uid, + GetCollabOrigin::User { + uid: duplicator_uid, + }, &dest_workspace_id, &dest_workspace_id, CollabType::Folder,