pub mod event_handler; pub mod objects; pub mod port; pub mod remote_review_repository; pub mod review_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, user_repo: std::sync::Arc, movie_repo: std::sync::Arc, review_repo: std::sync::Arc, diary_repo: std::sync::Arc, base_url: String, ) -> anyhow::Result { let concrete = std::sync::Arc::new( ActivityPubService::new( federation_repo, std::sync::Arc::new(DomainUserRepoAdapter(user_repo)), std::sync::Arc::new(ReviewObjectHandler { movie_repository: std::sync::Arc::clone(&movie_repo), diary_repository: diary_repo, review_store, base_url: base_url.clone(), }), base_url.clone(), 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, }) }