From 39865c08a53ac25018ad60488eb7e3a7c34cd59e Mon Sep 17 00:00:00 2001 From: bthari Date: Wed, 13 Nov 2024 13:47:43 +0700 Subject: [PATCH] chore: change webhook payload structure (#397) --- api/turing/webhook/request.go | 26 ++++++++++++++++++++++++-- api/turing/webhook/webhook.go | 8 +------- api/turing/webhook/webhook_test.go | 14 ++++---------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/api/turing/webhook/request.go b/api/turing/webhook/request.go index 7de0af858..4d4fb786c 100644 --- a/api/turing/webhook/request.go +++ b/api/turing/webhook/request.go @@ -2,9 +2,31 @@ package webhook import ( "github.com/caraml-dev/mlp/api/pkg/webhooks" + "github.com/caraml-dev/turing/api/turing/models" ) type Request struct { - EventType webhooks.EventType `json:"event_type"` - Data interface{} `json:"data"` + EventType webhooks.EventType `json:"event_type"` + Data map[string]interface{} `json:"data"` +} + +// Adds the eventType to the body of the webhook request so that a single webhook endpoint is able to respond +// differently to different event types, especially if the same webhook endpoint is configured for multiple events, +// this is because the event type does not normally get sent to the webhook endpoint. +func generateBody(eventType webhooks.EventType, item interface{}) *Request { + data := make(map[string]interface{}) + + switch item.(type) { + case *models.EnsemblerLike, models.EnsemblerLike: + data["ensembler"] = item + case *models.RouterVersion: + data["router_version"] = item + case *models.Router: + data["router"] = item + } + + return &Request{ + EventType: eventType, + Data: data, + } } diff --git a/api/turing/webhook/webhook.go b/api/turing/webhook/webhook.go index 36e4c3f75..475ded165 100644 --- a/api/turing/webhook/webhook.go +++ b/api/turing/webhook/webhook.go @@ -60,13 +60,7 @@ func (w webhook) TriggerWebhooks(ctx context.Context, eventType webhooks.EventTy return nil } - // Adds the eventType to the body of the webhook request so that a single webhook endpoint is able to respond - // differently to different event types, especially if the same webhook endpoint is configured for multiple events, - // This is because the event type does not normally get sent to the webhook endpoint. - newBody := &Request{ - EventType: eventType, - Data: body, - } + newBody := generateBody(eventType, body) return w.webhookManager.InvokeWebhooks( ctx, diff --git a/api/turing/webhook/webhook_test.go b/api/turing/webhook/webhook_test.go index 9ceedef6e..90cecd3eb 100644 --- a/api/turing/webhook/webhook_test.go +++ b/api/turing/webhook/webhook_test.go @@ -105,10 +105,7 @@ func Test_webhook_triggerEvent(t *testing.T) { args: args{ ctx: context.TODO(), eventType: OnRouterCreated, - body: routerRequest{ - EventType: OnRouterCreated, - Router: &models.Router{}, - }, + body: &models.Router{}, }, mockFunc: func(args args) { mockWebhookManager.On("IsEventConfigured", args.eventType). @@ -119,7 +116,7 @@ func Test_webhook_triggerEvent(t *testing.T) { args.eventType, &Request{ EventType: args.eventType, - Data: args.body, + Data: map[string]interface{}{"router": args.body}, }, mock.Anything, mock.Anything, @@ -134,10 +131,7 @@ func Test_webhook_triggerEvent(t *testing.T) { args: args{ ctx: context.TODO(), eventType: OnRouterCreated, - body: routerRequest{ - EventType: OnRouterCreated, - Router: &models.Router{}, - }, + body: &models.Router{}, }, mockFunc: func(args args) { mockWebhookManager.On("IsEventConfigured", args.eventType). @@ -148,7 +142,7 @@ func Test_webhook_triggerEvent(t *testing.T) { args.eventType, &Request{ EventType: args.eventType, - Data: args.body, + Data: map[string]interface{}{"router": args.body}, }, mock.Anything, mock.Anything,