chore: reuse get collab folder

This commit is contained in:
khorshuheng 2024-09-03 15:40:33 +08:00
parent 89f43bb24a
commit a7a1a2f8a4
2 changed files with 24 additions and 22 deletions

View File

@ -169,26 +169,33 @@ pub async fn get_user_workspace_structure(
depth, depth_limit 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); let folder_view: FolderView = collab_folder_to_folder_view(&folder, depth);
Ok(folder_view) Ok(folder_view)
} }
pub async fn get_latest_collab_folder( pub async fn get_latest_collab_folder(
collab_storage: Arc<CollabAccessControlStorage>, collab_storage: Arc<CollabAccessControlStorage>,
uid: &i64, collab_origin: GetCollabOrigin,
workspace_id: &str, workspace_id: &str,
) -> Result<Folder, AppError> { ) -> Result<Folder, AppError> {
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( let encoded_collab = get_latest_collab_encoded(
collab_storage, collab_storage,
uid, collab_origin,
workspace_id, workspace_id,
workspace_id, workspace_id,
CollabType::Folder, CollabType::Folder,
) )
.await?; .await?;
let folder = Folder::from_collab_doc_state( let folder = Folder::from_collab_doc_state(
uid, folder_uid,
CollabOrigin::Server, CollabOrigin::Server,
encoded_collab.into(), encoded_collab.into(),
workspace_id, workspace_id,
@ -200,14 +207,14 @@ pub async fn get_latest_collab_folder(
pub async fn get_latest_collab_encoded( pub async fn get_latest_collab_encoded(
collab_storage: Arc<CollabAccessControlStorage>, collab_storage: Arc<CollabAccessControlStorage>,
uid: &i64, collab_origin: GetCollabOrigin,
workspace_id: &str, workspace_id: &str,
oid: &str, oid: &str,
collab_type: CollabType, collab_type: CollabType,
) -> Result<EncodedCollab, AppError> { ) -> Result<EncodedCollab, AppError> {
collab_storage collab_storage
.get_encode_collab( .get_encode_collab(
GetCollabOrigin::User { uid: *uid }, collab_origin,
QueryCollabParams { QueryCollabParams {
workspace_id: workspace_id.to_string(), workspace_id: workspace_id.to_string(),
inner: QueryCollab { inner: QueryCollab {
@ -226,22 +233,12 @@ pub async fn get_published_view(
pg_pool: &PgPool, pg_pool: &PgPool,
) -> Result<PublishedView, AppError> { ) -> Result<PublishedView, AppError> {
let workspace_id = select_workspace_id_for_publish_namespace(pg_pool, &publish_namespace).await?; let workspace_id = select_workspace_id_for_publish_namespace(pg_pool, &publish_namespace).await?;
let query_collab_params = QueryCollabParams::new( let folder = get_latest_collab_folder(
workspace_id, collab_storage,
collab_entity::CollabType::Folder, GetCollabOrigin::Server,
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(),
&workspace_id.to_string(), &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 = select_published_view_ids_for_workspace(pg_pool, workspace_id).await?;
let publish_view_ids: HashSet<String> = publish_view_ids let publish_view_ids: HashSet<String> = publish_view_ids
.into_iter() .into_iter()

View File

@ -12,6 +12,7 @@ use collab_entity::CollabType;
use collab_folder::{CollabOrigin, Folder, RepeatedViewIdentifier, View}; use collab_folder::{CollabOrigin, Folder, RepeatedViewIdentifier, View};
use collab_rt_entity::{ClientCollabMessage, UpdateSync}; use collab_rt_entity::{ClientCollabMessage, UpdateSync};
use collab_rt_protocol::{Message, SyncMessage}; use collab_rt_protocol::{Message, SyncMessage};
use database::collab::GetCollabOrigin;
use database::collab::{select_workspace_database_oid, CollabStorage}; use database::collab::{select_workspace_database_oid, CollabStorage};
use database::publish::select_published_data_for_view_id; use database::publish::select_published_data_for_view_id;
use database_entity::dto::CollabParams; use database_entity::dto::CollabParams;
@ -165,7 +166,9 @@ impl PublishCollabDuplicator {
let mut ws_db_collab = { let mut ws_db_collab = {
let ws_database_ec = get_latest_collab_encoded( let ws_database_ec = get_latest_collab_encoded(
collab_storage.clone(), collab_storage.clone(),
&duplicator_uid, GetCollabOrigin::User {
uid: duplicator_uid,
},
&dest_workspace_id, &dest_workspace_id,
&ws_db_oid, &ws_db_oid,
CollabType::WorkspaceDatabase, CollabType::WorkspaceDatabase,
@ -207,7 +210,9 @@ impl PublishCollabDuplicator {
let collab_folder_encoded = get_latest_collab_encoded( let collab_folder_encoded = get_latest_collab_encoded(
collab_storage.clone(), collab_storage.clone(),
&duplicator_uid, GetCollabOrigin::User {
uid: duplicator_uid,
},
&dest_workspace_id, &dest_workspace_id,
&dest_workspace_id, &dest_workspace_id,
CollabType::Folder, CollabType::Folder,