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) }