systemprompt_cli/session/
api.rs1use anyhow::{Context, Result};
7use chrono::Duration;
8use std::sync::Arc;
9use systemprompt_database::DbPool;
10use systemprompt_identifiers::{SessionId, SessionSource, UserId};
11use systemprompt_oauth::services::SessionCreationService;
12use systemprompt_traits::{SessionAnalytics, SessionProvider, UserProvider};
13use systemprompt_users::{UserRepository, UserService};
14
15pub const DEFAULT_CLI_SESSION_HOURS: i64 = 24;
16
17pub async fn create_local_session_row(
18 db_pool: &DbPool,
19 user: &UserId,
20 ttl: Duration,
21) -> Result<SessionId> {
22 let sessions: Arc<dyn SessionProvider> =
23 Arc::new(systemprompt_users::SessionRepository::new(db_pool)?);
24 let user_repository =
25 Arc::new(UserRepository::new(db_pool).context("Failed to construct user repository")?);
26 let users: Arc<dyn UserProvider> = Arc::new(UserService::new(user_repository));
27
28 SessionCreationService::new(sessions, users)
29 .create_authenticated_session_with_ttl(
30 user,
31 &SessionAnalytics::default(),
32 SessionSource::Cli,
33 ttl,
34 )
35 .await
36 .context("Failed to insert CLI session row")
37}