use std::sync::Arc; use adapters_postgres::{ PgPool, PostgresShareRepository, PostgresVisibilityFilterRepository, }; use application::sharing::{ AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler, ShareResourceHandler, }; use domain::ports::EventPublisher; use presentation::state::SharingHandlers; pub fn build(pool: &PgPool, event_publisher: Arc) -> SharingHandlers { let share_repo = Arc::new(PostgresShareRepository::new(pool.clone())); let _visibility_filter_repo = Arc::new(PostgresVisibilityFilterRepository::new(pool.clone())); let share_resource = Arc::new(ShareResourceHandler::new( share_repo.clone(), event_publisher.clone(), )); let generate_link = Arc::new(GenerateShareLinkHandler::new(share_repo.clone())); let revoke = Arc::new(RevokeShareHandler::new(share_repo.clone(), event_publisher)); let access = Arc::new(AccessSharedResourceHandler::new(share_repo)); SharingHandlers { share_resource, generate_link, revoke, access, } }