use std::sync::Arc; use domain::{ entities::{Asset, AssetFilters}, errors::DomainError, ports::AssetRepository, value_objects::SystemId, }; pub struct SearchAssetsQuery { pub owner_id: SystemId, pub filters: AssetFilters, pub limit: u32, pub offset: u32, } pub struct SearchResult { pub items: Vec, pub total: u64, } pub struct SearchAssetsHandler { asset_repo: Arc, } impl SearchAssetsHandler { pub fn new(asset_repo: Arc) -> Self { Self { asset_repo } } pub async fn execute(&self, query: SearchAssetsQuery) -> Result { let total = self .asset_repo .count_search(&query.owner_id, &query.filters) .await?; let items = self .asset_repo .search(&query.owner_id, &query.filters, query.limit, query.offset) .await?; Ok(SearchResult { items, total }) } }