unify usage and export nostr.IsOlder() helper.

This commit is contained in:
fiatjaf
2026-01-22 22:54:44 -03:00
parent f1fdb0788a
commit 0cb0d1ccb0
9 changed files with 16 additions and 25 deletions

View File

@@ -56,6 +56,11 @@ func (b *BleveBackend) Init() error {
return nil 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") return 0, errors.New("not supported")
} }

View File

@@ -5,7 +5,6 @@ import (
"fiatjaf.com/nostr" "fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore" "fiatjaf.com/nostr/eventstore"
"fiatjaf.com/nostr/eventstore/internal"
) )
func (b *BleveBackend) ReplaceEvent(evt nostr.Event) error { func (b *BleveBackend) ReplaceEvent(evt nostr.Event) error {
@@ -19,7 +18,7 @@ func (b *BleveBackend) ReplaceEvent(evt nostr.Event) error {
shouldStore := true shouldStore := true
for previous := range b.QueryEvents(filter, 1) { 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 { if err := b.DeleteEvent(previous.ID); err != nil {
return fmt.Errorf("failed to delete event for replacing: %w", err) return fmt.Errorf("failed to delete event for replacing: %w", err)
} }

View File

@@ -5,7 +5,6 @@ import (
"iter" "iter"
"fiatjaf.com/nostr" "fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore/internal"
"go.etcd.io/bbolt" "go.etcd.io/bbolt"
) )
@@ -36,7 +35,7 @@ func (b *BoltBackend) ReplaceEvent(evt nostr.Event) error {
shouldStore := true shouldStore := true
for previous := range results { for previous := range results {
if internal.IsOlder(previous, evt) { if nostr.IsOlder(previous, evt) {
if err := b.delete(txn, previous.ID); err != nil { if err := b.delete(txn, previous.ID); err != nil {
return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err) return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err)
} }

View File

@@ -1,17 +1,11 @@
package internal package internal
import ( import (
"bytes"
"math" "math"
"fiatjaf.com/nostr" "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) { func ChooseNarrowestTag(filter nostr.Filter) (key string, values []string, goodness int) {
var tagKey string var tagKey string
var tagValues []string var tagValues []string

View File

@@ -5,7 +5,6 @@ import (
"iter" "iter"
"fiatjaf.com/nostr" "fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore/internal"
"github.com/PowerDNS/lmdb-go/lmdb" "github.com/PowerDNS/lmdb-go/lmdb"
) )
@@ -37,7 +36,7 @@ func (b *LMDBBackend) ReplaceEvent(evt nostr.Event) error {
shouldStore := true shouldStore := true
for previous := range results { for previous := range results {
if internal.IsOlder(previous, evt) { if nostr.IsOlder(previous, evt) {
if err := b.delete(txn, previous.ID); err != nil { if err := b.delete(txn, previous.ID); err != nil {
return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err) return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err)
} }

View File

@@ -6,7 +6,6 @@ import (
"runtime" "runtime"
"fiatjaf.com/nostr" "fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore/internal"
"github.com/PowerDNS/lmdb-go/lmdb" "github.com/PowerDNS/lmdb-go/lmdb"
) )
@@ -72,7 +71,7 @@ func (il *IndexingLayer) ReplaceEvent(evt nostr.Event) error {
var acquiredFreeRangeFromDelete *position var acquiredFreeRangeFromDelete *position
shouldStore := true shouldStore := true
for previous := range results { 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 { 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) return fmt.Errorf("failed to delete event %s for replacing: %w", previous.ID, err)
} else if shouldPurge { } else if shouldPurge {

View File

@@ -10,7 +10,6 @@ import (
"fiatjaf.com/nostr" "fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore" "fiatjaf.com/nostr/eventstore"
"fiatjaf.com/nostr/eventstore/internal"
) )
var _ eventstore.Store = (*SliceStore)(nil) var _ eventstore.Store = (*SliceStore)(nil)
@@ -134,7 +133,7 @@ func (b *SliceStore) ReplaceEvent(evt nostr.Event) error {
shouldStore := true shouldStore := true
for previous := range b.QueryEvents(filter, 1) { 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 { if err := b.delete(previous.ID); err != nil {
return fmt.Errorf("failed to delete event for replacing: %w", err) return fmt.Errorf("failed to delete event for replacing: %w", err)
} }

View File

@@ -1,19 +1,11 @@
package khatru package khatru
import ( import (
"bytes"
"net" "net"
"net/http" "net/http"
"strings" "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 { var privateMasks = func() []net.IPNet {
privateCIDRs := []string{ privateCIDRs := []string{
"127.0.0.0/8", "127.0.0.0/8",

View File

@@ -82,3 +82,8 @@ func AppendUnique[I comparable](arr []I, item ...I) []I {
} }
return arr return arr
} }
func IsOlder(previous, next Event) bool {
return previous.CreatedAt < next.CreatedAt ||
(previous.CreatedAt == next.CreatedAt && bytes.Compare(previous.ID[:], next.ID[:]) == 1)
}