sdk: fix default Publisher to work with any store.
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
package wrappers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"iter"
|
||||||
|
|
||||||
|
"fiatjaf.com/nostr"
|
||||||
|
"fiatjaf.com/nostr/eventstore"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ nostr.Publisher = DynamicPublisher{}
|
||||||
|
|
||||||
|
type DynamicPublisher struct {
|
||||||
|
GetStore func() eventstore.Store
|
||||||
|
MaxLimit int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w DynamicPublisher) QueryEvents(filter nostr.Filter) iter.Seq[nostr.Event] {
|
||||||
|
return w.GetStore().QueryEvents(filter, w.MaxLimit)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w DynamicPublisher) Publish(ctx context.Context, evt nostr.Event) error {
|
||||||
|
if evt.Kind.IsEphemeral() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
if evt.Kind.IsRegular() {
|
||||||
|
if err := w.GetStore().SaveEvent(evt); err != nil && err != eventstore.ErrDupEvent {
|
||||||
|
return fmt.Errorf("failed to save: %w", err)
|
||||||
|
} else {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return w.GetStore().ReplaceEvent(evt)
|
||||||
|
}
|
||||||
+2
-2
@@ -72,7 +72,7 @@ type System struct {
|
|||||||
NoteSearchRelays *RelayStream
|
NoteSearchRelays *RelayStream
|
||||||
Store eventstore.Store
|
Store eventstore.Store
|
||||||
|
|
||||||
Publisher wrappers.StorePublisher
|
Publisher nostr.Publisher
|
||||||
|
|
||||||
replaceableLoaders []*dataloader.Loader[nostr.PubKey, nostr.Event]
|
replaceableLoaders []*dataloader.Loader[nostr.PubKey, nostr.Event]
|
||||||
addressableLoaders []*dataloader.Loader[nostr.PubKey, []nostr.Event]
|
addressableLoaders []*dataloader.Loader[nostr.PubKey, []nostr.Event]
|
||||||
@@ -178,7 +178,7 @@ func NewSystem() *System {
|
|||||||
sys.Store = &nullstore.NullStore{}
|
sys.Store = &nullstore.NullStore{}
|
||||||
sys.Store.Init()
|
sys.Store.Init()
|
||||||
}
|
}
|
||||||
sys.Publisher = wrappers.StorePublisher{Store: sys.Store, MaxLimit: 1000}
|
sys.Publisher = wrappers.DynamicPublisher{GetStore: func() eventstore.Store { return sys.Store }, MaxLimit: 1000}
|
||||||
|
|
||||||
sys.initializeReplaceableDataloaders()
|
sys.initializeReplaceableDataloaders()
|
||||||
sys.initializeAddressableDataloaders()
|
sys.initializeAddressableDataloaders()
|
||||||
|
|||||||
Reference in New Issue
Block a user