use crate::application::error::ApplicationError;
use crate::domain::aggregates::resource_usage::entity::ResourceUsage;
use crate::domain::common::EmailAddress;
use crate::domain::ports::repositories::ResourceUsageRepository;
use std::sync::Arc;
pub struct ListUserResourceUsagesUseCase<R: ResourceUsageRepository> {
repository: Arc<R>,
}
impl<R: ResourceUsageRepository> ListUserResourceUsagesUseCase<R> {
pub fn new(repository: Arc<R>) -> Self {
Self { repository }
}
pub async fn execute(
&self,
owner_email: &EmailAddress,
) -> Result<Vec<ResourceUsage>, ApplicationError> {
let mut usages = self.repository.find_by_owner(owner_email).await?;
usages.sort_by_key(|a| a.time_period().start());
Ok(usages)
}
}