pub mod composite_handler; pub mod event_handler; pub mod objects; pub mod port; pub mod remote_review_repository; pub mod review_handler; pub mod watchlist_handler; pub(crate) mod urls; pub mod user_adapter; // Re-export the generic base types that callers need pub use activitypub_base::{ ActivityPubService, ApFederationConfig, ApObjectHandler, ApUser, ApUserRepository, FederationData, FederationRepository, Follower, FollowerStatus, FollowingStatus, RemoteActor, }; pub use event_handler::ActivityPubEventHandler; pub use port::{ActivityPubPort, NoopActivityPubService}; pub use remote_review_repository::RemoteReviewRepository; pub use review_handler::ReviewObjectHandler; pub use user_adapter::DomainUserRepoAdapter; pub struct ActivityPubWire { pub service: std::sync::Arc, pub router: axum::Router, pub event_handler: std::sync::Arc, } pub async fn wire( federation_repo: std::sync::Arc, review_store: std::sync::Arc, remote_watchlist_repo: std::sync::Arc, user_repo: std::sync::Arc, movie_repo: std::sync::Arc, review_repo: std::sync::Arc, diary_repo: std::sync::Arc, base_url: String, allow_registration: bool, ) -> anyhow::Result { let review_handler = std::sync::Arc::new(ReviewObjectHandler { movie_repository: std::sync::Arc::clone(&movie_repo), diary_repository: std::sync::Arc::clone(&diary_repo), review_store, base_url: base_url.clone(), }); let watchlist_handler = std::sync::Arc::new(watchlist_handler::WatchlistObjectHandler { remote_watchlist_repo, }); let composite = std::sync::Arc::new(composite_handler::CompositeObjectHandler { review: review_handler, watchlist: watchlist_handler, }); let concrete = std::sync::Arc::new( ActivityPubService::new( federation_repo, std::sync::Arc::new(DomainUserRepoAdapter::new(user_repo, base_url.clone())), composite, base_url.clone(), allow_registration, "movies-diary".to_string(), cfg!(debug_assertions), ) .await?, ); let router = concrete.router(); let event_handler = std::sync::Arc::new(ActivityPubEventHandler::new( std::sync::Arc::clone(&concrete), movie_repo, review_repo, base_url, )) as std::sync::Arc; Ok(ActivityPubWire { service: concrete as std::sync::Arc, router, event_handler, }) }