diff --git a/eventstore/bleve/lib.go b/eventstore/bleve/lib.go index 6ae0c81..10138c9 100644 --- a/eventstore/bleve/lib.go +++ b/eventstore/bleve/lib.go @@ -56,6 +56,11 @@ func (b *BleveBackend) Init() error { return nil } -func (b *BleveBackend) CountEvents(nostr.Filter) (uint32, error) { +func (b *BleveBackend) CountEvents(filter nostr.Filter) (uint32, error) { + if filter.String() == "{}" { + count, err := b.index.DocCount() + return uint32(count), err + } + return 0, errors.New("not supported") } diff --git a/eventstore/bleve/replace.go b/eventstore/bleve/replace.go index 0d9e5e2..21163b7 100644 --- a/eventstore/bleve/replace.go +++ b/eventstore/bleve/replace.go @@ -5,7 +5,6 @@ import ( "fiatjaf.com/nostr" "fiatjaf.com/nostr/eventstore" - "fiatjaf.com/nostr/eventstore/internal" ) func (b *BleveBackend) ReplaceEvent(evt nostr.Event) error { @@ -19,7 +18,7 @@ func (b *BleveBackend) ReplaceEvent(evt nostr.Event) error { shouldStore := true for previous := range b.QueryEvents(filter, 1) { - if internal.IsOlder(previous, evt) { + if nostr.IsOlder(previous, evt) { if err := b.DeleteEvent(previous.ID); err != nil { return fmt.Errorf("failed to delete event for replacing: %w", err) } diff --git a/eventstore/boltdb/replace.go b/eventstore/boltdb/replace.go index 2f3588b..fd3b924 100644 --- a/eventstore/boltdb/replace.go +++ b/eventstore/boltdb/replace.go @@ -5,7 +5,6 @@ import ( "iter" "fiatjaf.com/nostr" - "fiatjaf.com/nostr/eventstore/internal" "go.etcd.io/bbolt" ) @@ -36,7 +35,7 @@ func (b *BoltBackend) ReplaceEvent(evt nostr.Event) error { shouldStore := true for previous := range results { - if internal.IsOlder(previous, evt) { + if nostr.IsOlder(previous, evt) { if err := b.delete(txn, previous.ID); err != nil { return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err) } diff --git a/eventstore/internal/helpers.go b/eventstore/internal/helpers.go index 6e5b2aa..ebc9acb 100644 --- a/eventstore/internal/helpers.go +++ b/eventstore/internal/helpers.go @@ -1,17 +1,11 @@ package internal import ( - "bytes" "math" "fiatjaf.com/nostr" ) -func IsOlder(previous, next nostr.Event) bool { - return previous.CreatedAt < next.CreatedAt || - (previous.CreatedAt == next.CreatedAt && bytes.Compare(previous.ID[:], next.ID[:]) == 1) -} - func ChooseNarrowestTag(filter nostr.Filter) (key string, values []string, goodness int) { var tagKey string var tagValues []string diff --git a/eventstore/lmdb/replace.go b/eventstore/lmdb/replace.go index 4931540..d47ac94 100644 --- a/eventstore/lmdb/replace.go +++ b/eventstore/lmdb/replace.go @@ -5,7 +5,6 @@ import ( "iter" "fiatjaf.com/nostr" - "fiatjaf.com/nostr/eventstore/internal" "github.com/PowerDNS/lmdb-go/lmdb" ) @@ -37,7 +36,7 @@ func (b *LMDBBackend) ReplaceEvent(evt nostr.Event) error { shouldStore := true for previous := range results { - if internal.IsOlder(previous, evt) { + if nostr.IsOlder(previous, evt) { if err := b.delete(txn, previous.ID); err != nil { return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err) } diff --git a/eventstore/mmm/replace.go b/eventstore/mmm/replace.go index 57657b3..8e11ea5 100644 --- a/eventstore/mmm/replace.go +++ b/eventstore/mmm/replace.go @@ -6,7 +6,6 @@ import ( "runtime" "fiatjaf.com/nostr" - "fiatjaf.com/nostr/eventstore/internal" "github.com/PowerDNS/lmdb-go/lmdb" ) @@ -72,7 +71,7 @@ func (il *IndexingLayer) ReplaceEvent(evt nostr.Event) error { var acquiredFreeRangeFromDelete *position shouldStore := true for previous := range results { - if internal.IsOlder(previous, evt) { + if nostr.IsOlder(previous, evt) { if pos, shouldPurge, err := il.delete(mmmtxn, iltxn, previous.ID); err != nil { return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err) } else if shouldPurge { diff --git a/eventstore/slicestore/lib.go b/eventstore/slicestore/lib.go index f25c62d..fd5ff8c 100644 --- a/eventstore/slicestore/lib.go +++ b/eventstore/slicestore/lib.go @@ -10,7 +10,6 @@ import ( "fiatjaf.com/nostr" "fiatjaf.com/nostr/eventstore" - "fiatjaf.com/nostr/eventstore/internal" ) var _ eventstore.Store = (*SliceStore)(nil) @@ -134,7 +133,7 @@ func (b *SliceStore) ReplaceEvent(evt nostr.Event) error { shouldStore := true for previous := range b.QueryEvents(filter, 1) { - if internal.IsOlder(previous, evt) { + if nostr.IsOlder(previous, evt) { if err := b.delete(previous.ID); err != nil { return fmt.Errorf("failed to delete event for replacing: %w", err) } diff --git a/khatru/helpers.go b/khatru/helpers.go index 2229160..b2c1405 100644 --- a/khatru/helpers.go +++ b/khatru/helpers.go @@ -1,19 +1,11 @@ package khatru import ( - "bytes" "net" "net/http" "strings" - - "fiatjaf.com/nostr" ) -func isOlder(previous, next *nostr.Event) bool { - return previous.CreatedAt < next.CreatedAt || - (previous.CreatedAt == next.CreatedAt && bytes.Compare(previous.ID[:], next.ID[:]) == 1) -} - var privateMasks = func() []net.IPNet { privateCIDRs := []string{ "127.0.0.0/8", diff --git a/utils.go b/utils.go index e8bea0a..0766515 100644 --- a/utils.go +++ b/utils.go @@ -82,3 +82,8 @@ func AppendUnique[I comparable](arr []I, item ...I) []I { } return arr } + +func IsOlder(previous, next Event) bool { + return previous.CreatedAt < next.CreatedAt || + (previous.CreatedAt == next.CreatedAt && bytes.Compare(previous.ID[:], next.ID[:]) == 1) +}