FederationRepository (34 methods) → 4 focused traits:
ActivityRepository (2) — idempotency tracking
FollowRepository (18) — follower/following graph + migration
ActorRepository (6) — keypairs, remote actor cache, announce tracking
BlocklistRepository (8) — domain + actor blocklists
ApObjectHandler (10 methods) → 2 traits:
ApContentReader (3) — get_local_objects_for_user/page, count_local_posts
ApObjectHandler (9) — all inbox callbacks (on_create, on_mention, etc.)
Builder changes from positional args to named setters:
ActivityPubService::builder(base_url)
.activity_repo(arc)
.follow_repo(arc)
.actor_repo(arc)
.blocklist_repo(arc)
.user_repo(arc)
.content_reader(arc)
.object_handler(arc)
.build()
No behaviour changes.
35 lines
1.4 KiB
Rust
35 lines
1.4 KiB
Rust
use anyhow::Result;
|
|
use async_trait::async_trait;
|
|
|
|
use super::RemoteActor;
|
|
|
|
/// Manages local actor keypairs, remote actor cache, and Announce tracking.
|
|
#[async_trait]
|
|
pub trait ActorRepository: Send + Sync {
|
|
// ── Local keypairs ──────────────────────────────────────────────────────
|
|
async fn get_local_actor_keypair(
|
|
&self,
|
|
user_id: uuid::Uuid,
|
|
) -> Result<Option<(String, String)>>;
|
|
async fn save_local_actor_keypair(
|
|
&self,
|
|
user_id: uuid::Uuid,
|
|
public_key: String,
|
|
private_key: String,
|
|
) -> Result<()>;
|
|
|
|
// ── Remote actor cache ──────────────────────────────────────────────────
|
|
async fn upsert_remote_actor(&self, actor: RemoteActor) -> Result<()>;
|
|
async fn get_remote_actor(&self, actor_url: &str) -> Result<Option<RemoteActor>>;
|
|
|
|
// ── Boost (Announce) tracking ───────────────────────────────────────────
|
|
async fn add_announce(
|
|
&self,
|
|
activity_id: &str,
|
|
object_url: &str,
|
|
actor_url: &str,
|
|
announced_at: chrono::DateTime<chrono::Utc>,
|
|
) -> Result<()>;
|
|
async fn count_announces(&self, object_url: &str) -> Result<usize>;
|
|
}
|