diff options
author | Julio Capote <jcapote@gmail.com> | 2023-01-06 19:31:20 +0000 |
---|---|---|
committer | Julio Capote <jcapote@gmail.com> | 2023-01-06 19:31:20 +0000 |
commit | ea69d02af6e691a1b32e5198a1143aa142ba82ac (patch) | |
tree | e3f78254c84e02cda30402fa6a179547f5d38f97 | |
parent | fa52883f424c95dcde16e9056631041af4c479c7 (diff) | |
download | communique-ea69d02af6e691a1b32e5198a1143aa142ba82ac.tar.gz |
subscription lookup on outbox item create
Diffstat (limited to '')
-rw-r--r-- | cgi/servers.go | 13 | ||||
-rw-r--r-- | models/persister.go | 17 |
2 files changed, 29 insertions, 1 deletions
diff --git a/cgi/servers.go b/cgi/servers.go index 9d08b6c..a419417 100644 --- a/cgi/servers.go +++ b/cgi/servers.go @@ -116,7 +116,18 @@ func processTick(h config.Handler, output []byte, persister *models.Persister, l log.Debugf("extracted content '%s'", extractedContent) outboxItem := models.CreateOutboxItem(h, []byte(extractedContent)) err = persister.StoreWithCallback(outboxItem, func() { - log.With("handler", h.Name).Debug("callback for save") + logger := log.With("handler", h.Name).With("type", "subscription") + // go through handler subscriptions and deliver signed outbox items + logger.Debug("callback for save") + sub := models.NewSubscription(h) + keys, err := persister.CollectKeys(sub) + if err != nil { + logger.Error(err) + return + } + for _, v := range keys { + logger.Debugf("found subscription %s", string(v)) + } }) if err != nil { return err diff --git a/models/persister.go b/models/persister.go index f877488..b4b9c49 100644 --- a/models/persister.go +++ b/models/persister.go @@ -98,6 +98,23 @@ func (p *Persister) Collect(model model) ([][]byte, error) { return result, err } +// Much faster, "keys only" version of Collect() +func (p *Persister) CollectKeys(model model) ([][]byte, error) { + var keys [][]byte + err := p.db.View(func(txn *badger.Txn) error { + opts := badger.DefaultIteratorOptions + opts.PrefetchValues = false + it := txn.NewIterator(opts) + defer it.Close() + prefix := []byte(model.Keybase()) + for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + keys = append(keys, it.Item().Key()) + } + return nil + }) + return keys, err +} + func (p *Persister) Find(model model) ([]byte, error) { var result []byte var item *badger.Item |