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)
}
}