forked from coracle/zooid
Avoid accidentally nuking replaceable events
This commit is contained in:
+10
-6
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user