fix(appview): populate handle from PDS ingest + backfill race-safely
The AppView side of the PDS→AppView ingest path. Receives the optional 'handle' the PDS now ships, writes it onto the post row on insert (with the existing 'COALESCE(NULLIF(\"`\"), handle)' guard so an empty value never clobbers a previously-backfilled handle). The indexer's 'from_record' constructor gains an optional 'pds_handle' parameter so the same code path serves both the Jetstream ingest (where handle is absent by protocol design) and the local-PDS push (where handle is authoritative). Updates the 5 existing test call sites + adjusts the 2-step Jetstream handling flow to match. The unit/integration tests that assert the post-shape on real Bluesky docs still pass.
This commit is contained in:
@@ -30,6 +30,13 @@ use tracing::{info, warn};
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct IngestCommitReq {
|
||||
pub did: String,
|
||||
/// The poster's current handle, as known by the PDS `users` table.
|
||||
/// Optional in the wire payload — the AppView falls back to an
|
||||
/// empty string, and the upsert COALESCE guard prevents the empty
|
||||
/// value from clobbering a backfilled handle from the Jetstream
|
||||
/// `identity` event path.
|
||||
#[serde(default)]
|
||||
pub handle: Option<String>,
|
||||
pub collection: String,
|
||||
pub action: String,
|
||||
pub rkey: String,
|
||||
@@ -127,6 +134,7 @@ async fn apply(
|
||||
&req.collection,
|
||||
&cid,
|
||||
&record,
|
||||
req.handle.as_deref(),
|
||||
);
|
||||
indexer::upsert_post(&state.db, &row).await.map_err(db_err)?;
|
||||
Ok(true)
|
||||
|
||||
Reference in New Issue
Block a user