orchflow_core/manager/handlers/
session.rs

1use crate::error::Result;
2use crate::manager::Manager;
3use serde_json::Value;
4
5pub async fn create_session(manager: &Manager, name: String) -> Result<Value> {
6    // Create session in state manager
7    let session = manager.state_manager.create_session(name.clone()).await?;
8
9    // Create backend session
10    manager.mux_backend.create_session(&session.id).await?;
11
12    Ok(serde_json::to_value(&session).unwrap())
13}
14
15pub async fn delete_session(manager: &Manager, session_id: String) -> Result<Value> {
16    // Get session first
17    let _session = manager
18        .state_manager
19        .get_session(&session_id)
20        .await
21        .ok_or_else(|| {
22            crate::error::OrchflowError::NotFound(format!("Session not found: {session_id}"))
23        })?;
24
25    // Kill backend session
26    if let Err(e) = manager.mux_backend.kill_session(&session_id).await {
27        tracing::error!("Failed to kill backend session: {}", e);
28    }
29
30    // Delete from state manager
31    manager.state_manager.delete_session(&session_id).await?;
32
33    Ok(serde_json::json!({
34        "status": "ok",
35        "session_id": session_id
36    }))
37}