From 87dd485efcf1586155464599ed63cfe07094d463 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Thu, 13 Nov 2025 16:48:52 -0800 Subject: [PATCH] Avoid accidentally nuking replaceable events --- zooid/events.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/zooid/events.go b/zooid/events.go index c3534b4..52c3db7 100644 --- a/zooid/events.go +++ b/zooid/events.go @@ -300,23 +300,27 @@ func (events *EventStore) ReplaceEvent(evt nostr.Event) error { filter.Tags = nostr.TagMap{"d": []string{evt.Tags.GetD()}} } - shouldStore := true + shouldSave := true + shouldDelete := make([]nostr.ID, 0) for previous := range events.QueryEvents(filter, 1) { if previous.CreatedAt <= evt.CreatedAt { - if err := events.DeleteEvent(previous.ID); err != nil { - return fmt.Errorf("failed to delete event for replacing: %w", err) - } + shouldDelete = append(shouldDelete, previous.ID) } else { - shouldStore = false + shouldSave = false } } - if shouldStore { + if shouldSave { if err := events.SaveEvent(evt); err != nil && err != eventstore.ErrDupEvent { return fmt.Errorf("failed to save: %w", err) } } + // Wait until the end to delete old events, just in case our new one doesn't save + for _, id := range shouldDelete { + events.DeleteEvent(id) + } + return nil }