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