lmrc-cli 0.3.16

CLI tool for scaffolding LMRC Stack infrastructure projects
Documentation
//! Application state

use sea_orm::DatabaseConnection;
use std::sync::Arc;

use crate::auth::{AuthProvider, InfraAuthProvider, UserAuthProvider};
use crate::config::Config;

#[derive(Clone)]
pub struct AppState {
    pub config: Config,
    pub infra_db: DatabaseConnection,
    pub user_db: Option<DatabaseConnection>,
    pub infra_auth: Arc<dyn AuthProvider>,
    pub user_auth: Option<Arc<dyn AuthProvider>>,
}

impl AppState {
    pub fn new(config: Config, infra_db: DatabaseConnection) -> Self {
        let infra_auth = Arc::new(InfraAuthProvider::new(
            infra_db.clone(),
            config.auth.session_expiration_hours,
        )) as Arc<dyn AuthProvider>;

        Self {
            config,
            infra_db,
            user_db: None, // Will be set if USER_DATABASE_URL is provided
            infra_auth,
            user_auth: None, // Will be set if user database is configured
        }
    }

    pub fn with_user_db(mut self, user_db: DatabaseConnection) -> Self {
        let user_auth = Arc::new(UserAuthProvider::new(
            user_db.clone(),
            self.config.auth.session_expiration_hours,
        )) as Arc<dyn AuthProvider>;

        self.user_db = Some(user_db);
        self.user_auth = Some(user_auth);
        self
    }
}