fistinc-auth 0.1.0

Paging types for Fist Inc bank
Documentation
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()));

        //todo make it private
        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,
        }
    }
}