eventstore: boltdb (copied from lmdb)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package bolt
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"fiatjaf.com/nostr"
|
||||
"fiatjaf.com/nostr/eventstore/codec/betterbinary"
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
func (b *BoltBackend) DeleteEvent(id nostr.ID) error {
|
||||
return b.DB.Update(func(txn *bbolt.Tx) error {
|
||||
return b.delete(txn, id)
|
||||
})
|
||||
}
|
||||
|
||||
func (b *BoltBackend) delete(txn *bbolt.Tx, id nostr.ID) error {
|
||||
rawBucket := txn.Bucket(rawEventStore)
|
||||
|
||||
// check if we have this actually
|
||||
bin := rawBucket.Get(id[16:24])
|
||||
if bin == nil {
|
||||
// we already do not have this
|
||||
return nil
|
||||
}
|
||||
|
||||
var evt nostr.Event
|
||||
if err := betterbinary.Unmarshal(bin, &evt); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal raw event %x to delete: %w", id, err)
|
||||
}
|
||||
|
||||
// calculate all index keys we have for this event and delete them
|
||||
for k := range b.getIndexKeysForEvent(evt) {
|
||||
err := txn.Bucket(k.bucket).Delete(k.key)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to delete index entry %s for %x: %w", b.keyName(k), evt.ID[0:8], err)
|
||||
}
|
||||
}
|
||||
|
||||
// delete the raw event
|
||||
if err := rawBucket.Delete(id[16:24]); err != nil {
|
||||
return fmt.Errorf("failed to delete raw event %x: %w", evt.ID[16:24], err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user