diff --git a/libs/client-api/src/http.rs b/libs/client-api/src/http.rs index 9d5662bc..1685177a 100644 --- a/libs/client-api/src/http.rs +++ b/libs/client-api/src/http.rs @@ -2,6 +2,7 @@ use crate::notify::{ClientToken, TokenStateReceiver}; use anyhow::Context; use brotli::CompressorReader; use gotrue_entity::dto::AuthProvider; +use shared_entity::dto::workspace_dto::CreateWorkspaceParam; use std::io::Read; use app_error::AppError; @@ -503,12 +504,15 @@ impl Client { } #[instrument(level = "debug", skip_all, err)] - pub async fn add_workspace(&self) -> Result { + pub async fn create_workspace( + &self, + params: CreateWorkspaceParam, + ) -> Result { let url = format!("{}/api/workspace", self.base_url); let resp = self .http_client_with_auth(Method::POST, &url) .await? - .json(&()) + .json(¶ms) .send() .await?; log_request_id(&resp); diff --git a/libs/database-entity/src/dto.rs b/libs/database-entity/src/dto.rs index 45463e94..faec5fc8 100644 --- a/libs/database-entity/src/dto.rs +++ b/libs/database-entity/src/dto.rs @@ -416,7 +416,7 @@ pub struct AFUserProfile { pub updated_at: i64, } -#[derive(Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] pub struct AFWorkspace { pub workspace_id: Uuid, pub database_storage_id: Uuid, diff --git a/libs/shared-entity/src/dto/workspace_dto.rs b/libs/shared-entity/src/dto/workspace_dto.rs index 3218505d..e25655d3 100644 --- a/libs/shared-entity/src/dto/workspace_dto.rs +++ b/libs/shared-entity/src/dto/workspace_dto.rs @@ -29,11 +29,6 @@ impl From> for CreateWorkspaceMembers { } } -#[derive(Deserialize)] -pub struct CreateWorkspace { - pub name: Option, -} - #[derive(Deserialize, Serialize)] pub struct CreateWorkspaceMember { pub email: String, @@ -82,3 +77,8 @@ pub struct BlobMetadata { pub file_size: i64, pub modified_at: DateTime, } + +#[derive(Serialize, Deserialize)] +pub struct CreateWorkspaceParam { + pub workspace_name: Option, +} diff --git a/src/api/workspace.rs b/src/api/workspace.rs index 475bf2f1..bcd426eb 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -119,11 +119,11 @@ pub fn collab_scope() -> Scope { async fn create_workpace_handler( uuid: UserUuid, state: Data, - create_workspace_param: Json, + create_workspace_param: Json, ) -> Result>> { let workspace_name = create_workspace_param .into_inner() - .name + .workspace_name .unwrap_or_else(|| format!("workspace_{}", chrono::Utc::now().timestamp())); let new_workspace = workspace::ops::create_workspace_for_user(&state.pg_pool, &uuid, &workspace_name).await?; @@ -140,6 +140,7 @@ async fn delete_workspace_handler( Ok(AppResponse::Ok().into()) } +// TODO: also get shared workspaces #[instrument(skip_all, err)] async fn list_workspace_handler( uuid: UserUuid, diff --git a/tests/workspace/workspace_crud.rs b/tests/workspace/workspace_crud.rs index b8e7647d..b6c59b60 100644 --- a/tests/workspace/workspace_crud.rs +++ b/tests/workspace/workspace_crud.rs @@ -1,14 +1,28 @@ use client_api_test_util::generate_unique_registered_user_client; +use shared_entity::dto::workspace_dto::CreateWorkspaceParam; #[tokio::test] async fn add_and_delete_workspace_for_user() { let (c, _user) = generate_unique_registered_user_client().await; let workspaces = c.get_workspaces().await.unwrap(); assert_eq!(workspaces.0.len(), 1); - let newly_addad_workspace = c.add_workspace().await.unwrap(); + let newly_addad_workspace = c + .create_workspace(CreateWorkspaceParam { + workspace_name: Some("my_workspace".to_string()), + }) + .await + .unwrap(); let workspaces = c.get_workspaces().await.unwrap(); assert_eq!(workspaces.0.len(), 2); + let _ = workspaces + .0 + .iter() + .find(|w| { + w.workspace_name == "my_workspace" && w.workspace_id == newly_addad_workspace.workspace_id + }) + .unwrap(); + c.delete_workspace(&newly_addad_workspace.workspace_id.to_string()) .await .unwrap();