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