fistinc-auth 0.1.0

Paging types for Fist Inc bank
Documentation
use std::sync::Arc;

use async_trait::async_trait;
use fistinc_errors::ServiceResult;
use fistinc_paging::{Paging, QueryParams};
use uuid::Uuid;

use crate::domain::entity::LoginAction;
use crate::domain::LoginHistoryRepository;
use crate::domain::services::LoginHistoryService;

pub struct LoginHistoryServiceImpl {
    pub repository: Arc<dyn LoginHistoryRepository>,
}

impl LoginHistoryServiceImpl {
    pub fn new(repository: Arc<dyn LoginHistoryRepository>) -> Self {
        LoginHistoryServiceImpl { repository }
    }
}

#[async_trait]
impl LoginHistoryService for LoginHistoryServiceImpl {
    async fn get_all_user_logins(&self, user_id: Uuid) -> ServiceResult<Vec<LoginAction>> {
        Ok(
            self.repository
                .find_all_user_logins(user_id).await?
        )
    }

    async fn get_all_user_logins_paged(
        &self, user_id: Uuid,
        params: &dyn QueryParams,
    ) -> ServiceResult<Paging<LoginAction>> {
        Ok(
            self.repository
                .find_all_user_logins_paged(user_id, params).await?
        )
    }

    async fn save_login(&self, action: LoginAction) -> ServiceResult<LoginAction> {
        self.repository
            .save_user_login(&action).await?;
        Ok(action)
    }
}