Avoid accidentally nuking replaceable events

This commit is contained in:
Jon Staab
2025-11-13 16:48:52 -08:00
parent d30d33bb33
commit 87dd485efc
+10 -6
View File
@@ -300,23 +300,27 @@ func (events *EventStore) ReplaceEvent(evt nostr.Event) error {
filter.Tags = nostr.TagMap{"d": []string{evt.Tags.GetD()}} 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) { for previous := range events.QueryEvents(filter, 1) {
if previous.CreatedAt <= evt.CreatedAt { if previous.CreatedAt <= evt.CreatedAt {
if err := events.DeleteEvent(previous.ID); err != nil { shouldDelete = append(shouldDelete, previous.ID)
return fmt.Errorf("failed to delete event for replacing: %w", err)
}
} else { } else {
shouldStore = false shouldSave = false
} }
} }
if shouldStore { if shouldSave {
if err := events.SaveEvent(evt); err != nil && err != eventstore.ErrDupEvent { if err := events.SaveEvent(evt); err != nil && err != eventstore.ErrDupEvent {
return fmt.Errorf("failed to save: %w", err) 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 return nil
} }