From c83c9bb1c373f682e0dd57bb78e9bb1d680a90e7 Mon Sep 17 00:00:00 2001 From: Brad Seiler Date: Sun, 11 Oct 2026 20:13:06 -0400 Subject: [PATCH] fix(db): log transactional claim denials Co-authored-by: Codex Signed-off-by: Brad Seiler Signed-off-by: Local Builder <1c476cb1127ea270cb900bdc3891060140bdd1173f91498030ee9b4db01c2f20@buzz.block.builderlab.xyz> --- crates/buzz-db/src/store/relay_invite.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/crates/buzz-db/src/store/relay_invite.rs b/crates/buzz-db/src/store/relay_invite.rs index 22167b85ac..f6df89c81e 100644 --- a/crates/buzz-db/src/store/relay_invite.rs +++ b/crates/buzz-db/src/store/relay_invite.rs @@ -361,6 +361,8 @@ pub async fn claim_relay_invite_with_owner( lock_admission(&mut tx, community).await?; if claim_owner::claimant_restricted(&mut tx, community, claimer_pubkey, verified_owner).await? { + tx.rollback().await?; + log_claim_outcome(community, None, "restricted", None, None); return Ok(ClaimOutcome::Restricted.into()); } @@ -405,11 +407,17 @@ pub async fn claim_relay_invite_with_owner( let revoked_at: Option> = invite.try_get("revoked_at")?; let issuer: String = invite.try_get("created_by")?; - if revoked_at.is_some() { - return Ok(ClaimOutcome::Revoked.into()); - } - if principal_restricted(&mut tx, community, &issuer).await? { - return Ok(ClaimOutcome::IssuerRestricted.into()); + let denial = if revoked_at.is_some() { + Some((ClaimOutcome::Revoked, "revoked")) + } else if principal_restricted(&mut tx, community, &issuer).await? { + Some((ClaimOutcome::IssuerRestricted, "issuer_restricted")) + } else { + None + }; + if let Some((outcome, label)) = denial { + tx.rollback().await?; + log_claim_outcome(community, Some(invite_id), label, max_uses, Some(use_count)); + return Ok(outcome.into()); } let uses_remaining = || max_uses.map(|mu| mu - use_count);