package bluge import ( "fmt" "fiatjaf.com/nostr" "fiatjaf.com/nostr/eventstore" "fiatjaf.com/nostr/eventstore/internal" ) func (b *BlugeBackend) ReplaceEvent(evt nostr.Event) error { b.Lock() defer b.Unlock() filter := nostr.Filter{Kinds: []nostr.Kind{evt.Kind}, Authors: []nostr.PubKey{evt.PubKey}} if evt.Kind.IsAddressable() { filter.Tags = nostr.TagMap{"d": []string{evt.Tags.GetD()}} } shouldStore := true for previous := range b.QueryEvents(filter, 1) { if internal.IsOlder(previous, evt) { if err := b.DeleteEvent(previous.ID); err != nil { return fmt.Errorf("failed to delete event for replacing: %w", err) } } else { shouldStore = false } } if shouldStore { if err := b.SaveEvent(evt); err != nil && err != eventstore.ErrDupEvent { return fmt.Errorf("failed to save: %w", err) } } return nil }