mirror of
https://github.com/AppFlowy-IO/AppFlowy-Cloud.git
synced 2025-04-19 03:24:42 -04:00
feat: fetch workspace member via uuid
This commit is contained in:
parent
603faf3631
commit
672118355e
4 changed files with 113 additions and 0 deletions
41
.sqlx/query-ee059aca8fba787658ad095f44bd0075aef1abc6eb0f34d11905765da9fd38e5.json
generated
Normal file
41
.sqlx/query-ee059aca8fba787658ad095f44bd0075aef1abc6eb0f34d11905765da9fd38e5.json
generated
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT af_user.uid, af_user.name, af_user.email, af_workspace_member.role_id AS role\n FROM public.af_workspace_member\n JOIN public.af_user ON af_workspace_member.uid = af_user.uid\n WHERE af_workspace_member.workspace_id = $1\n AND af_user.uuid = $2\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "uid",
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "name",
|
||||
"type_info": "Text"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "email",
|
||||
"type_info": "Text"
|
||||
},
|
||||
{
|
||||
"ordinal": 3,
|
||||
"name": "role",
|
||||
"type_info": "Int4"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Uuid",
|
||||
"Uuid"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "ee059aca8fba787658ad095f44bd0075aef1abc6eb0f34d11905765da9fd38e5"
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue