fix: pre-release improvements — scale, correctness, API clarity
#1 count_accepted_followers / get_accepted_followers_page: new DB-side methods on FollowRepository — no more loading all followers into memory to count or page them. #2 Move re-follows are now non-blocking: tokio::spawn instead of awaiting each sign_and_send inside receive() — inbox handler no longer stalls for slow remote servers during account migration. #3 Remove get_local_objects_for_user from ApContentReader (dead code). Backfill and outbox both use the paginated get_local_objects_page. #6 Rename backfill_outbox → import_remote_outbox with a clear doc explaining the direction (import FROM a remote server, not to a follower). #7 also_known_as: Option<String> → Vec<String> on ApUser, LookedUpActor, and DbActor. from_json now stores all aliases; move_act.rs checks all. Mentions: broadcast_create_note / broadcast_update_note now accept mentioned_inboxes: Vec<Url> — delivery goes to followers + mentioned actors who aren't already followers. Deduplication is done before sending. Pass vec![] if note has no external mentions. Docs: ApObjectHandler and ApContentReader now have complete doc comments with contracts, idempotency guidance, and error-handling semantics.
This commit is contained in:
@@ -209,6 +209,21 @@ impl ActivityPubService {
|
||||
data.follow_repo.get_pending_followers(local_user_id).await
|
||||
}
|
||||
|
||||
/// Returns one page of accepted followers. Prefer this over `get_accepted_followers`
|
||||
/// for large accounts — the DB does the filtering rather than loading everything.
|
||||
pub async fn get_accepted_followers_page(
|
||||
&self,
|
||||
local_user_id: uuid::Uuid,
|
||||
offset: u32,
|
||||
limit: usize,
|
||||
) -> anyhow::Result<Vec<RemoteActor>> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
data.follow_repo
|
||||
.get_accepted_followers_page(local_user_id, offset, limit)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Returns ALL accepted followers. For large accounts use `get_accepted_followers_page`.
|
||||
pub async fn get_accepted_followers(
|
||||
&self,
|
||||
local_user_id: uuid::Uuid,
|
||||
@@ -224,18 +239,15 @@ impl ActivityPubService {
|
||||
.collect())
|
||||
}
|
||||
|
||||
/// Count of accepted followers — DB-side query, no in-memory filtering.
|
||||
pub async fn count_accepted_followers(
|
||||
&self,
|
||||
local_user_id: uuid::Uuid,
|
||||
) -> anyhow::Result<usize> {
|
||||
let data = self.federation_config.to_request_data();
|
||||
Ok(data
|
||||
.follow_repo
|
||||
.get_followers(local_user_id)
|
||||
.await?
|
||||
.into_iter()
|
||||
.filter(|f| f.status == FollowerStatus::Accepted)
|
||||
.count())
|
||||
data.follow_repo
|
||||
.count_accepted_followers(local_user_id)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn get_following(
|
||||
|
||||
Reference in New Issue
Block a user