From 2ab59e79a3f2232feb0a441603910d1d02c2ccfb Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Sat, 15 Jun 2024 21:20:59 +0800 Subject: [PATCH] feat: get published collab meta data --- libs/database/src/workspace.rs | 22 ++++++++++++++++++++++ src/api/workspace.rs | 13 ++++++++++++- src/biz/workspace/ops.rs | 24 +++++++++++++++++------- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/libs/database/src/workspace.rs b/libs/database/src/workspace.rs index 0d2c2bdc..ce30fbd3 100644 --- a/libs/database/src/workspace.rs +++ b/libs/database/src/workspace.rs @@ -878,6 +878,28 @@ pub async fn insert_or_replace_publish_collab_meta<'a, E: Executor<'a, Database Ok(()) } +#[inline] +pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = Postgres>>( + executor: E, + workspace_id: &Uuid, + doc_name: &str, +) -> Result { + let res = sqlx::query_scalar!( + r#" + SELECT metadata + FROM af_published_collab + WHERE workspace_id = $1 + AND doc_name = $2 + "#, + workspace_id, + doc_name, + ) + .fetch_one(executor) + .await?; + + Ok(res) +} + #[inline] pub async fn delete_published_collab<'a, E: Executor<'a, Database = Postgres>>( executor: E, diff --git a/src/api/workspace.rs b/src/api/workspace.rs index 1152af73..0ac45aa9 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -140,6 +140,7 @@ pub fn workspace_scope() -> Scope { .service( web::resource("/{workspace_id}/publish/{doc_name}") .route(web::put().to(put_publish_collab_handler)) + .route(web::get().to(get_publish_collab_handler)) .route(web::delete().to(delete_publish_collab_handler)) ) .service( @@ -977,7 +978,7 @@ async fn put_publish_collab_handler( ) -> Result>> { let (workspace_id, doc_name) = path_param.into_inner(); let metadata = serde_json::Value::from(payload); - biz::workspace::ops::publish_workspace_collab( + biz::workspace::ops::publish_collab( &state.pg_pool, &workspace_id, &doc_name, @@ -988,6 +989,16 @@ async fn put_publish_collab_handler( Ok(Json(AppResponse::Ok())) } +async fn get_publish_collab_handler( + path_param: web::Path<(Uuid, String)>, + state: Data, +) -> Result>> { + let (workspace_id, doc_name) = path_param.into_inner(); + let metadata = + biz::workspace::ops::get_publish_collab(&state.pg_pool, &workspace_id, &doc_name).await?; + Ok(Json(AppResponse::Ok().with_data(metadata))) +} + async fn put_publish_collab_blob_handler( path_param: web::Path<(Uuid, String)>, user_uuid: UserUuid, diff --git a/src/biz/workspace/ops.rs b/src/biz/workspace/ops.rs index b6c6d8b0..31b5ae80 100644 --- a/src/biz/workspace/ops.rs +++ b/src/biz/workspace/ops.rs @@ -20,12 +20,13 @@ use database::workspace::{ change_workspace_icon, delete_from_workspace, delete_published_collab, delete_workspace_members, get_invitation_by_id, insert_or_replace_publish_collab_meta, insert_or_replace_published_collab_blob, insert_user_workspace, insert_workspace_invitation, - rename_workspace, select_all_user_workspaces, select_published_collab_blob, - select_user_is_collab_publisher, select_user_is_workspace_owner, select_workspace, - select_workspace_invitations_for_user, select_workspace_member, select_workspace_member_list, - select_workspace_settings, select_workspace_total_collab_bytes, update_updated_at_of_workspace, - update_workspace_invitation_set_status_accepted, update_workspace_publish_namespace, - upsert_workspace_member, upsert_workspace_member_with_txn, upsert_workspace_settings, + rename_workspace, select_all_user_workspaces, select_publish_collab_meta, + select_published_collab_blob, select_user_is_collab_publisher, select_user_is_workspace_owner, + select_workspace, select_workspace_invitations_for_user, select_workspace_member, + select_workspace_member_list, select_workspace_settings, select_workspace_total_collab_bytes, + update_updated_at_of_workspace, update_workspace_invitation_set_status_accepted, + update_workspace_publish_namespace, upsert_workspace_member, upsert_workspace_member_with_txn, + upsert_workspace_settings, }; use database_entity::dto::{ AFAccessLevel, AFRole, AFWorkspace, AFWorkspaceInvitation, AFWorkspaceInvitationStatus, @@ -128,7 +129,7 @@ pub async fn update_workspace_namespace( Ok(()) } -pub async fn publish_workspace_collab( +pub async fn publish_collab( pg_pool: &PgPool, workspace_id: &Uuid, doc_name: &str, @@ -152,6 +153,15 @@ pub async fn put_published_collab_blob( Ok(()) } +pub async fn get_publish_collab( + pg_pool: &PgPool, + workspace_id: &Uuid, + doc_name: &str, +) -> Result { + let metadata = select_publish_collab_meta(pg_pool, workspace_id, doc_name).await?; + Ok(metadata) +} + pub async fn get_published_collab_blob( pg_pool: &PgPool, workspace_id: &Uuid,