Migrate package imports from next.orly.dev to new orly domain structure; add new varint and binary encoders with comprehensive tests; enhance existing tag and envelope implementations with additional methods, validations, and test coverage; introduce shared test.sh script for streamlined testing across modules.
This commit is contained in:
76
pkg/database/delete-event.go
Normal file
76
pkg/database/delete-event.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
|
||||
"database.orly/indexes"
|
||||
"database.orly/indexes/types"
|
||||
"encoders.orly/event"
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"lol.mleku.dev/chk"
|
||||
)
|
||||
|
||||
// DeleteEvent removes an event from the database identified by `eid`. If
|
||||
// noTombstone is false or not provided, a tombstone is created for the event.
|
||||
func (d *D) DeleteEvent(c context.Context, eid []byte) (err error) {
|
||||
d.Logger.Warningf("deleting event %0x", eid)
|
||||
|
||||
// Get the serial number for the event ID
|
||||
var ser *types.Uint40
|
||||
ser, err = d.GetSerialById(eid)
|
||||
if chk.E(err) {
|
||||
return
|
||||
}
|
||||
if ser == nil {
|
||||
// Event wasn't found, nothing to delete
|
||||
return
|
||||
}
|
||||
// Fetch the event to get its data
|
||||
var ev *event.E
|
||||
ev, err = d.FetchEventBySerial(ser)
|
||||
if chk.E(err) {
|
||||
return
|
||||
}
|
||||
if ev == nil {
|
||||
// Event wasn't found, nothing to delete. this shouldn't happen.
|
||||
return
|
||||
}
|
||||
if err = d.DeleteEventBySerial(c, ser, ev); chk.E(err) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (d *D) DeleteEventBySerial(
|
||||
c context.Context, ser *types.Uint40, ev *event.E,
|
||||
) (err error) {
|
||||
// Get all indexes for the event
|
||||
var idxs [][]byte
|
||||
idxs, err = GetIndexesForEvent(ev, ser.Get())
|
||||
if chk.E(err) {
|
||||
return
|
||||
}
|
||||
// Get the event key
|
||||
eventKey := new(bytes.Buffer)
|
||||
if err = indexes.EventEnc(ser).MarshalWrite(eventKey); chk.E(err) {
|
||||
return
|
||||
}
|
||||
// Delete the event and all its indexes in a transaction
|
||||
err = d.Update(
|
||||
func(txn *badger.Txn) (err error) {
|
||||
// Delete the event
|
||||
if err = txn.Delete(eventKey.Bytes()); chk.E(err) {
|
||||
return
|
||||
}
|
||||
// Delete all indexes
|
||||
for _, key := range idxs {
|
||||
if err = txn.Delete(key); chk.E(err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
},
|
||||
)
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user