From ca12c0d26c987e67deade02bdf645fda8af30016 Mon Sep 17 00:00:00 2001 From: Julio Capote Date: Fri, 6 Jan 2023 13:48:12 -0500 Subject: start of subscriptions --- models/persister.go | 10 +++++++++ models/subscription.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 models/subscription.go (limited to 'models') diff --git a/models/persister.go b/models/persister.go index c6e0c72..5f79e4e 100644 --- a/models/persister.go +++ b/models/persister.go @@ -43,6 +43,16 @@ func (p *Persister) Store(model model) error { return err } +func (p *Persister) Delete(model model) error { + log := p.log.With("model", model.Name()).With("DedupKey", model.DedupKey()).With("Key", model.Key()) + log.Debug("Delete()") + err := p.db.Update(func(txn *badger.Txn) error { + txn.Delete([]byte(model.Key())) + return nil + }) + return err +} + func (p *Persister) Count(model model) (int, error) { opts := badger.DefaultIteratorOptions opts.PrefetchValues = false diff --git a/models/subscription.go b/models/subscription.go new file mode 100644 index 0000000..191ffc6 --- /dev/null +++ b/models/subscription.go @@ -0,0 +1,57 @@ +package models + +import ( + "fmt" + "time" + + "git.capotej.com/capotej/communique/config" + "github.com/dgraph-io/badger/v3" +) + +type Subscription struct { + Handler config.Handler + InboxUrl string + CreatedAt time.Time +} + +// used for lookup purposes (count, collect, find) +func NewSubscription(h config.Handler) *Subscription { + aso := &Subscription{Handler: h} + return aso +} + +func CreateSubscription(h config.Handler, inboxUrl string) (*Subscription, error) { + aso := &Subscription{ + Handler: h, + InboxUrl: inboxUrl, + CreatedAt: time.Now(), + } + return aso, nil +} + +func (a *Subscription) Name() string { + return "Subscription" +} + +func (a *Subscription) Keybase() string { + keyBase := fmt.Sprintf("sub:%s", a.Handler.Name) + return keyBase +} + +func (a *Subscription) DedupKey() string { + return a.Key() +} + +func (a *Subscription) Key() string { + return fmt.Sprintf("sub:%s:%s", a.Handler.Name, a.InboxUrl) +} + +func (a *Subscription) SaveDedup(txn *badger.Txn) error { + txn.Discard() // nothing to do here + return nil +} + +func (a *Subscription) Save(txn *badger.Txn) error { + e := badger.NewEntry([]byte(a.Key()), []byte{}) + return txn.SetEntry(e) +} -- cgit v1.2.3