diff --git a/rsky-pds/src/apis/app/bsky/actor/get_profile.rs b/rsky-pds/src/apis/app/bsky/actor/get_profile.rs index 46041951..0a1718ea 100644 --- a/rsky-pds/src/apis/app/bsky/actor/get_profile.rs +++ b/rsky-pds/src/apis/app/bsky/actor/get_profile.rs @@ -96,7 +96,7 @@ pub fn get_profile_munge( if original.did != requester { return Ok(original); } - Ok(local_viewer.update_profile_detailed(original, profile.record)) + Ok(local_viewer.update_profile_detailed(original, profile.record, local.posts.len())) } } } diff --git a/rsky-pds/src/apis/app/bsky/actor/get_profiles.rs b/rsky-pds/src/apis/app/bsky/actor/get_profiles.rs index f974ccc5..477c5f7f 100644 --- a/rsky-pds/src/apis/app/bsky/actor/get_profiles.rs +++ b/rsky-pds/src/apis/app/bsky/actor/get_profiles.rs @@ -92,7 +92,11 @@ pub fn get_profiles_munge( if prof.did != requester { prof } else { - local_viewer.update_profile_detailed(prof, profile.record.clone()) + local_viewer.update_profile_detailed( + prof, + profile.record.clone(), + local.posts.len(), + ) } }) .collect::>(); diff --git a/rsky-pds/src/read_after_write/viewer.rs b/rsky-pds/src/read_after_write/viewer.rs index 0e2e5f06..43fcce1b 100644 --- a/rsky-pds/src/read_after_write/viewer.rs +++ b/rsky-pds/src/read_after_write/viewer.rs @@ -565,6 +565,7 @@ impl LocalViewer { &self, view: ProfileViewDetailed, record: Profile, + local_posts_count: usize, ) -> ProfileViewDetailed { let ProfileViewDetailed { did, @@ -620,7 +621,7 @@ impl LocalViewer { }, followers_count, follows_count, - posts_count, + posts_count: apply_local_posts_count(posts_count, local_posts_count), associated, joined_via_starter_pack, viewer, @@ -653,6 +654,32 @@ impl LocalViewer { } } +/// Adds locally written posts to an upstream posts_count. +/// Returns None if the upstream count is unknown. +pub fn apply_local_posts_count(upstream: Option, local_posts: usize) -> Option { + upstream.map(|c| c + local_posts) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn local_posts_added_to_upstream_count() { + assert_eq!(apply_local_posts_count(Some(5), 3), Some(8)); + } + + #[test] + fn zero_local_posts_leaves_count_unchanged() { + assert_eq!(apply_local_posts_count(Some(10), 0), Some(10)); + } + + #[test] + fn unknown_upstream_count_stays_none() { + assert_eq!(apply_local_posts_count(None, 5), None); + } +} + pub async fn get_records_since_rev(actor_store: &ActorStore, rev: String) -> Result { use crate::schema::pds::record::dsl as RecordSchema; use crate::schema::pds::repo_block::dsl as RepoBlockSchema;