Skip to content

Commit

Permalink
Add support for more webhook events
Browse files Browse the repository at this point in the history
  • Loading branch information
AchoArnold committed Jul 26, 2023
1 parent 7c338c9 commit bae83ae
Show file tree
Hide file tree
Showing 4 changed files with 14,806 additions and 42,668 deletions.
82 changes: 81 additions & 1 deletion api/pkg/listeners/webhook_listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@ func NewWebhookListener(
}

return l, map[string]events.EventListener{
events.EventTypeMessagePhoneReceived: l.OnMessagePhoneReceived,
events.EventTypeMessagePhoneReceived: l.OnMessagePhoneReceived,
events.EventTypeMessageSendExpired: l.OnMessageSendExpired,
events.EventTypeMessagePhoneDelivered: l.OnMessagePhoneDelivered,
events.EventTypeMessageSendFailed: l.OnMessageSendFailed,
events.EventTypeMessagePhoneSent: l.OnMessagePhoneSent,
}
}

Expand All @@ -53,3 +57,79 @@ func (listener *WebhookListener) OnMessagePhoneReceived(ctx context.Context, eve

return nil
}

// OnMessageSendExpired handles the events.EventTypeMessageSendExpired event
func (listener *WebhookListener) OnMessageSendExpired(ctx context.Context, event cloudevents.Event) error {
ctx, span := listener.tracer.Start(ctx)
defer span.End()

var payload events.MessageSendExpiredPayload
if err := event.DataAs(&payload); err != nil {
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

return nil
}

// OnMessageSendFailed handles the events.EventTypeMessageSendFailed event
func (listener *WebhookListener) OnMessageSendFailed(ctx context.Context, event cloudevents.Event) error {
ctx, span := listener.tracer.Start(ctx)
defer span.End()

var payload events.MessageSendFailedPayload
if err := event.DataAs(&payload); err != nil {
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

return nil
}

// OnMessagePhoneSent handles the events.EventTypeMessagePhoneSent event
func (listener *WebhookListener) OnMessagePhoneSent(ctx context.Context, event cloudevents.Event) error {
ctx, span := listener.tracer.Start(ctx)
defer span.End()

var payload events.MessagePhoneSentPayload
if err := event.DataAs(&payload); err != nil {
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

return nil
}

// OnMessagePhoneDelivered handles the events.EventTypeMessagePhoneDelivered event
func (listener *WebhookListener) OnMessagePhoneDelivered(ctx context.Context, event cloudevents.Event) error {
ctx, span := listener.tracer.Start(ctx)
defer span.End()

var payload events.MessagePhoneDeliveredPayload
if err := event.DataAs(&payload); err != nil {
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
}

return nil
}
Loading

0 comments on commit bae83ae

Please sign in to comment.