@@ -68,10 +68,6 @@ async def _is_workspace_active(
6868 async def activate_workspace (self , workspace_name : str ):
6969 """
7070 Activate a workspace
71-
72- Will return:
73- - True if the workspace was activated
74- - False if the workspace is already active or does not exist
7571 """
7672 is_active , session , workspace = await self ._is_workspace_active (workspace_name )
7773 if is_active :
@@ -100,6 +96,31 @@ async def update_workspace_system_prompt(
10096 updated_workspace = await db_recorder .update_workspace (workspace_update )
10197 return updated_workspace
10298
99+ async def soft_delete_workspace (self , workspace_name : str ):
100+ """
101+ Soft delete a workspace
102+ """
103+ if workspace_name == "" :
104+ raise WorkspaceCrudError ("Workspace name cannot be empty." )
105+ if workspace_name == "default" :
106+ raise WorkspaceCrudError ("Cannot delete default workspace." )
107+
108+ selected_workspace = await self ._db_reader .get_workspace_by_name (workspace_name )
109+ if not selected_workspace :
110+ raise WorkspaceDoesNotExistError (f"Workspace { workspace_name } does not exist." )
111+
112+ # Check if workspace is active, if it is, make the default workspace active
113+ active_workspace = await self ._db_reader .get_active_workspace ()
114+ if active_workspace and active_workspace .id == selected_workspace .id :
115+ raise WorkspaceCrudError ("Cannot delete active workspace." )
116+
117+ db_recorder = DbRecorder ()
118+ try :
119+ _ = await db_recorder .soft_delete_workspace (selected_workspace )
120+ except Exception :
121+ raise WorkspaceCrudError (f"Error deleting workspace { workspace_name } " )
122+ return
123+
103124 async def get_workspace_by_name (self , workspace_name : str ) -> Workspace :
104125 workspace = await self ._db_reader .get_workspace_by_name (workspace_name )
105126 if not workspace :
0 commit comments