From e5f76f280fbabbd54b6901b7b326865c64386791 Mon Sep 17 00:00:00 2001 From: tompro Date: Wed, 22 Oct 2025 15:02:40 +0200 Subject: [PATCH 1/3] Cleanup replaceable events --- src/postgres.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/postgres.rs b/src/postgres.rs index 5aeb29a..3e54ab6 100644 --- a/src/postgres.rs +++ b/src/postgres.rs @@ -109,7 +109,17 @@ impl NostrDatabase for NostrPostgres { &'a self, event: &'a Event, ) -> BoxedFuture<'a, Result> { - Box::pin(async move { self.save(EventDataDb::try_from(event)?).await }) + Box::pin(async move { + let result = self.save(EventDataDb::try_from(event)?).await; + if event.kind.is_replaceable() + && let Err(e) = self + .delete(Filter::new().author(event.pubkey).kind(event.kind)) + .await + { + warn!("Failed to delete old replaceable events: {e}"); + } + result + }) } /// Check event status by ID From 3be5b796531b26839449c4540f4d9982966a4ae1 Mon Sep 17 00:00:00 2001 From: tompro Date: Wed, 22 Oct 2025 15:10:18 +0200 Subject: [PATCH 2/3] Ensure only old replaceable events are deleted --- src/postgres.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/postgres.rs b/src/postgres.rs index 3e54ab6..8952415 100644 --- a/src/postgres.rs +++ b/src/postgres.rs @@ -3,6 +3,7 @@ use deadpool_postgres::Pool; use deadpool_postgres::{Manager, ManagerConfig, RecyclingMethod}; use nostr::event::*; use nostr::filter::Filter; +use nostr::types::Timestamp; use nostr_database::*; use prelude::BoxedFuture; use tokio_postgres::NoTls; @@ -113,7 +114,12 @@ impl NostrDatabase for NostrPostgres { let result = self.save(EventDataDb::try_from(event)?).await; if event.kind.is_replaceable() && let Err(e) = self - .delete(Filter::new().author(event.pubkey).kind(event.kind)) + .delete( + Filter::new() + .author(event.pubkey) + .kind(event.kind) + .until(Timestamp::from_secs(event.created_at.as_u64() - 1)), + ) .await { warn!("Failed to delete old replaceable events: {e}"); From 955482e058978a12421fcab2850b0ddcfe7bdfef Mon Sep 17 00:00:00 2001 From: tompro Date: Wed, 22 Oct 2025 15:19:31 +0200 Subject: [PATCH 3/3] Review fixes --- src/postgres.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/postgres.rs b/src/postgres.rs index 8952415..ae2cf60 100644 --- a/src/postgres.rs +++ b/src/postgres.rs @@ -112,13 +112,19 @@ impl NostrDatabase for NostrPostgres { ) -> BoxedFuture<'a, Result> { Box::pin(async move { let result = self.save(EventDataDb::try_from(event)?).await; + let until = if event.created_at.is_zero() { + event.created_at + } else { + Timestamp::from_secs(event.created_at.as_u64() - 1) + }; if event.kind.is_replaceable() + && matches!(result, Ok(SaveEventStatus::Success)) && let Err(e) = self .delete( Filter::new() .author(event.pubkey) .kind(event.kind) - .until(Timestamp::from_secs(event.created_at.as_u64() - 1)), + .until(until), ) .await {