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, infra_auth,
user_auth: None, }
}
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
}
}