You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

50 lines
1.4 KiB

package routing
import (
"context"
"git.mleku.dev/mleku/nostr/encoders/event"
)
// DeleteProcessor handles event deletion operations.
type DeleteProcessor interface {
// SaveDeleteEvent saves the delete event itself.
SaveDeleteEvent(ctx context.Context, ev *event.E) error
// ProcessDeletion removes the target events.
ProcessDeletion(ctx context.Context, ev *event.E) error
// DeliverEvent sends the delete event to subscribers.
DeliverEvent(ev *event.E)
}
// MakeDeleteHandler creates a handler for delete events (kind 5).
// Delete events:
// - Save the delete event itself first
// - Process target event deletions
// - Deliver the delete event to subscribers
func MakeDeleteHandler(processor DeleteProcessor) Handler {
return func(ev *event.E, authedPubkey []byte) Result {
ctx := context.Background()
// Save delete event first
if err := processor.SaveDeleteEvent(ctx, ev); err != nil {
return ErrorResult(err)
}
// Process the deletion (remove target events)
if err := processor.ProcessDeletion(ctx, ev); err != nil {
// Log but don't fail - delete event was saved
// Some targets may not exist or may be owned by others
}
// Deliver the delete event to subscribers
cloned := ev.Clone()
go processor.DeliverEvent(cloned)
return HandledResult("")
}
}
// IsDeleteKind returns true if the kind is a delete event (kind 5).
func IsDeleteKind(k uint16) bool {
return k == 5
}