From b502aa1a7e986b7fef09dc44af7d9d58f6bf46d4 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Tue, 7 Nov 2023 14:13:02 -0300 Subject: [PATCH] fix RelayInterface.Publish() to not try to delete things all the time. --- relay_interface.go | 6 +++--- utils.go | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 utils.go diff --git a/relay_interface.go b/relay_interface.go index ca168ad..c79515a 100644 --- a/relay_interface.go +++ b/relay_interface.go @@ -29,7 +29,7 @@ func (w RelayWrapper) Publish(ctx context.Context, evt nostr.Event) (nostr.Statu if err != nil { return nostr.PublishStatusFailed, fmt.Errorf("failed to query before replacing: %w", err) } - if previous := <-ch; previous != nil { + if previous := <-ch; previous != nil && isOlder(previous, &evt) { if err := w.Store.DeleteEvent(ctx, previous); err != nil { return nostr.PublishStatusFailed, fmt.Errorf("failed to delete event for replacing: %w", err) } @@ -42,7 +42,7 @@ func (w RelayWrapper) Publish(ctx context.Context, evt nostr.Event) (nostr.Statu if err != nil { return nostr.PublishStatusFailed, fmt.Errorf("failed to query before parameterized replacing: %w", err) } - if previous := <-ch; previous != nil { + if previous := <-ch; previous != nil && isOlder(previous, &evt) { if err := w.Store.DeleteEvent(ctx, previous); err != nil { return nostr.PublishStatusFailed, fmt.Errorf("failed to delete event for parameterized replacing: %w", err) @@ -51,7 +51,7 @@ func (w RelayWrapper) Publish(ctx context.Context, evt nostr.Event) (nostr.Statu } } - if err := w.SaveEvent(ctx, &evt); err != nil { + if err := w.SaveEvent(ctx, &evt); err != nil && err != ErrDupEvent { return nostr.PublishStatusFailed, fmt.Errorf("failed to save: %w", err) } diff --git a/utils.go b/utils.go new file mode 100644 index 0000000..665ae10 --- /dev/null +++ b/utils.go @@ -0,0 +1,8 @@ +package eventstore + +import "github.com/nbd-wtf/go-nostr" + +func isOlder(previous, next *nostr.Event) bool { + return previous.CreatedAt < next.CreatedAt || + (previous.CreatedAt == next.CreatedAt && previous.ID > next.ID) +}