chore: add flakes to gitignore

This commit is contained in:
Zack Fu Zi Xiang 2024-01-28 02:01:15 +08:00
parent f238e60cf1
commit f849f39133
No known key found for this signature in database
GPG Key ID: 39DE600AFEEED522
4 changed files with 54 additions and 64 deletions

3
.gitignore vendored
View File

@ -13,6 +13,7 @@ node_modules
data/
.env
.logs
shell.nix
flake.nix
flake.lock
.envrc
.direnv/

View File

@ -1,58 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "\n SELECT * FROM public.af_workspace WHERE owner_uid = (\n SELECT uid FROM public.af_user WHERE uuid = $1\n )\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "workspace_id",
"type_info": "Uuid"
},
{
"ordinal": 1,
"name": "database_storage_id",
"type_info": "Uuid"
},
{
"ordinal": 2,
"name": "owner_uid",
"type_info": "Int8"
},
{
"ordinal": 3,
"name": "created_at",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "workspace_type",
"type_info": "Int4"
},
{
"ordinal": 5,
"name": "deleted_at",
"type_info": "Timestamptz"
},
{
"ordinal": 6,
"name": "workspace_name",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Uuid"
]
},
"nullable": [
false,
false,
false,
true,
false,
true,
true
]
},
"hash": "030b315f14742d266f545d6db37cc8cb083f9d52ebecd252311c4faf6fb5ab22"
}

View File

@ -409,19 +409,23 @@ pub async fn select_user_workspace<'a, E: Executor<'a, Database = Postgres>>(
Ok(workspaces)
}
/// Returns a list of workspaces that the user is part of.
/// User may owner or non-owner.
#[inline]
pub async fn select_all_user_workspaces(
pool: &PgPool,
owner_uuid: &Uuid,
user_uuid: &Uuid,
) -> Result<Vec<AFWorkspaceRow>, AppError> {
let workspaces = sqlx::query_as!(
AFWorkspaceRow,
r#"
SELECT * FROM public.af_workspace WHERE owner_uid = (
SELECT uid FROM public.af_user WHERE uuid = $1
)
SELECT * FROM public.af_workspace
WHERE workspace_id IN (
SELECT workspace_id FROM public.af_workspace_member
WHERE af_workspace_member.uid = (SELECT uid FROM public.af_user WHERE uuid = $1)
);
"#,
owner_uuid
user_uuid
)
.fetch_all(pool)
.await?;

View File

@ -1,4 +1,6 @@
use client_api_test_util::generate_unique_registered_user_client;
use database_entity::dto::AFRole;
use shared_entity::dto::workspace_dto::CreateWorkspaceMember;
use shared_entity::dto::workspace_dto::CreateWorkspaceParam;
#[tokio::test]
@ -29,3 +31,44 @@ async fn add_and_delete_workspace_for_user() {
let workspaces = c.get_workspaces().await.unwrap();
assert_eq!(workspaces.0.len(), 1);
}
#[tokio::test]
async fn add_and_delete_workspace_for_non_owner_user() {
let (member, member_user) = generate_unique_registered_user_client().await;
// Owner added member to workspace
let (owner, _user) = generate_unique_registered_user_client().await;
let owner_workspace = owner
.create_workspace(CreateWorkspaceParam {
workspace_name: Some("owner_workspace".to_string()),
})
.await
.unwrap();
owner
.add_workspace_members(
owner_workspace.workspace_id.to_string(),
vec![CreateWorkspaceMember {
email: member_user.email.clone(),
role: AFRole::Member,
}],
)
.await
.unwrap();
// Member should have 2 workspaces
let member_workspaces = member.get_workspaces().await.unwrap();
assert_eq!(member_workspaces.0.len(), 2);
owner
.remove_workspace_members(
owner_workspace.workspace_id.to_string(),
vec![member_user.email],
)
.await
.unwrap();
// Member should have 1 workspaces, because owner removed him
let member_workspaces = member.get_workspaces().await.unwrap();
assert_eq!(member_workspaces.0.len(), 1);
}