Files
Oxicloud/src/common/auth_factory.rs
T

47 lines
1.6 KiB
Rust
Raw Normal View History

2025-03-20 09:22:31 +01:00
use std::sync::Arc;
use anyhow::Result;
use sqlx::PgPool;
use crate::domain::services::auth_service::AuthService;
use crate::application::services::auth_application_service::AuthApplicationService;
2025-03-23 22:44:18 +01:00
use crate::application::services::folder_service::FolderService;
2025-03-20 09:22:31 +01:00
use crate::infrastructure::repositories::{UserPgRepository, SessionPgRepository};
use crate::common::config::AppConfig;
use crate::common::di::AuthServices;
2025-03-23 22:44:18 +01:00
pub async fn create_auth_services(
config: &AppConfig,
pool: Arc<PgPool>,
folder_service: Option<Arc<FolderService>>
) -> Result<AuthServices> {
2025-03-20 09:22:31 +01:00
// Crear servicio de dominio de autenticación
let auth_service = Arc::new(AuthService::new(
config.auth.jwt_secret.clone(),
config.auth.access_token_expiry_secs,
config.auth.refresh_token_expiry_secs,
));
// Crear repositorios PostgreSQL
let user_repository = Arc::new(UserPgRepository::new(pool.clone()));
let session_repository = Arc::new(SessionPgRepository::new(pool.clone()));
// Crear servicio de aplicación de autenticación
2025-03-23 22:44:18 +01:00
let mut auth_app_service = AuthApplicationService::new(
2025-03-20 09:22:31 +01:00
user_repository,
session_repository,
auth_service.clone(),
2025-03-23 22:44:18 +01:00
);
// Configurar servicio de carpetas si está disponible
if let Some(folder_svc) = folder_service {
auth_app_service = auth_app_service.with_folder_service(folder_svc);
}
// Empaquetar servicio en Arc
let auth_application_service = Arc::new(auth_app_service);
2025-03-20 09:22:31 +01:00
Ok(AuthServices {
auth_service,
auth_application_service,
})
}