Skip to content

Commit

Permalink
Merge pull request #1237 from AppFlowy-IO/get-workspace-member-uuid
Browse files Browse the repository at this point in the history
feat: fetch workspace member via uuid
  • Loading branch information
khorshuheng authored Feb 17, 2025
2 parents 603faf3 + 6721183 commit 954266f
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 0 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 23 additions & 0 deletions libs/database/src/workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,29 @@ pub async fn select_workspace_member<'a, E: Executor<'a, Database = Postgres>>(
Ok(member)
}

#[inline]
pub async fn select_workspace_member_by_uuid<'a, E: Executor<'a, Database = Postgres>>(
executor: E,
uuid: Uuid,
workspace_id: Uuid,
) -> Result<AFWorkspaceMemberRow, AppError> {
let member = sqlx::query_as!(
AFWorkspaceMemberRow,
r#"
SELECT af_user.uid, af_user.name, af_user.email, af_workspace_member.role_id AS role
FROM public.af_workspace_member
JOIN public.af_user ON af_workspace_member.uid = af_user.uid
WHERE af_workspace_member.workspace_id = $1
AND af_user.uuid = $2
"#,
workspace_id,
uuid,
)
.fetch_one(executor)
.await?;
Ok(member)
}

#[inline]
pub async fn select_user_profile<'a, E: Executor<'a, Database = Postgres>>(
executor: E,
Expand Down
41 changes: 41 additions & 0 deletions src/api/workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,15 @@ pub fn workspace_scope() -> Scope {
.route(web::put().to(update_workspace_member_handler))
.route(web::delete().to(remove_workspace_member_handler)),
)
// Deprecated since v0.9.24
.service(
web::resource("/{workspace_id}/member/user/{user_id}")
.route(web::get().to(get_workspace_member_handler)),
)
.service(
web::resource("v1/{workspace_id}/member/user/{user_id}")
.route(web::get().to(get_workspace_member_v1_handler)),
)
.service(
web::resource("/{workspace_id}/collab/{object_id}")
.app_data(
Expand Down Expand Up @@ -615,6 +620,42 @@ async fn get_workspace_member_handler(
Ok(AppResponse::Ok().with_data(member).into())
}

// This use user uuid as opposed to uid
#[instrument(skip_all, err)]
async fn get_workspace_member_v1_handler(
user_uuid: UserUuid,
state: Data<AppState>,
path: web::Path<(Uuid, Uuid)>,
) -> Result<JsonAppResponse<AFWorkspaceMember>> {
let (workspace_id, member_uuid) = path.into_inner();
let uid = state.user_cache.get_user_uid(&user_uuid).await?;
// Guest users can not get workspace members
state
.workspace_access_control
.enforce_role(&uid, &workspace_id.to_string(), AFRole::Member)
.await?;
let member_row =
workspace::ops::get_workspace_member_by_uuid(member_uuid, &state.pg_pool, workspace_id)
.await
.map_err(|_| {
AppResponseError::new(
ErrorCode::MemberNotFound,
format!(
"requested member uid {} is not present in workspace {}",
member_uuid, workspace_id
),
)
})?;
let member = AFWorkspaceMember {
name: member_row.name,
email: member_row.email,
role: member_row.role,
avatar_url: None,
};

Ok(AppResponse::Ok().with_data(member).into())
}

#[instrument(level = "debug", skip_all, err)]
async fn open_workspace_handler(
user_uuid: UserUuid,
Expand Down
8 changes: 8 additions & 0 deletions src/biz/workspace/ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,14 @@ pub async fn get_workspace_member(
Ok(select_workspace_member(pg_pool, uid, workspace_id).await?)
}

pub async fn get_workspace_member_by_uuid(
member_uuid: Uuid,
pg_pool: &PgPool,
workspace_id: Uuid,
) -> Result<AFWorkspaceMemberRow, AppResponseError> {
Ok(select_workspace_member_by_uuid(pg_pool, member_uuid, workspace_id).await?)
}

pub async fn update_workspace_member(
uid: &i64,
pg_pool: &PgPool,
Expand Down

0 comments on commit 954266f

Please sign in to comment.