use std::sync::Arc;
use chrono::Duration;
use fistinc_diesel_utils::database_pool::DBConnectionPool;
use crate::application::services::{LoginHistoryServiceImpl, PasswordHistoryServiceImpl, UserAuthServiceImpl, UserSecurityServiceImpl, UserServiceImpl};
use crate::domain::{LoginHistoryRepository, PasswordHistoryRepository, UserRepository};
use crate::domain::services::{LoginHistoryService, PasswordHistoryService, UserAuthService, UserSecurityService, UserService};
use crate::infrastructure::repository::{LoginHistoryRepositoryImpl, PasswordHistoryRepositoryImpl, UserRepositoryImpl};
pub struct AuthContainer {
pub auth_service: Arc<dyn UserAuthService>,
pub security_service: Arc<dyn UserSecurityService>,
pub user_service: Arc<dyn UserService>,
login_history_service: Arc<dyn LoginHistoryService>,
password_history_service: Arc<dyn PasswordHistoryService>,
}
impl AuthContainer {
pub fn new(pool: Arc<DBConnectionPool>) -> Self {
let user_repository: Arc<dyn UserRepository> =
Arc::new(UserRepositoryImpl::new(pool.clone()));
let security_service: Arc<dyn UserSecurityService> =
Arc::new(UserSecurityServiceImpl::new(
"fuck1234",
"you",
Duration::days(10),
));
let auth_service: Arc<dyn UserAuthService> =
Arc::new(UserAuthServiceImpl::new(user_repository.clone(), security_service.clone()));
let user_service =
Arc::new(UserServiceImpl::new(user_repository.clone(), security_service.clone()));
let login_history_repository: Arc<dyn LoginHistoryRepository> =
Arc::new(LoginHistoryRepositoryImpl::new(pool.clone()));
let login_history_service =
Arc::new(LoginHistoryServiceImpl::new(login_history_repository.clone()));
let password_history_repository: Arc<dyn PasswordHistoryRepository> =
Arc::new(PasswordHistoryRepositoryImpl::new(pool.clone()));
let password_history_service =
Arc::new(PasswordHistoryServiceImpl::new(password_history_repository));
Self {
auth_service,
security_service,
user_service,
login_history_service,
password_history_service,
}
}
}