@@ -24,6 +24,11 @@ func (p *provider) AddWebhook(ctx context.Context, webhook models.Webhook) (*mod
2424 webhook .CreatedAt = time .Now ().Unix ()
2525 webhook .UpdatedAt = time .Now ().Unix ()
2626
27+ existingHook , _ := p .GetWebhookByEventName (ctx , webhook .EventName )
28+ if existingHook != nil {
29+ return nil , fmt .Errorf ("Webhook with %s event_name already exists" , webhook .EventName )
30+ }
31+
2732 insertQuery := fmt .Sprintf ("INSERT INTO %s (id, event_name, endpoint, headers, enabled, created_at, updated_at) VALUES ('%s', '%s', '%s', '%s', %t, %d, %d)" , KeySpace + "." + models .Collections .Webhook , webhook .ID , webhook .EventName , webhook .EndPoint , webhook .Headers , webhook .Enabled , webhook .CreatedAt , webhook .UpdatedAt )
2833 err := p .db .Query (insertQuery ).Exec ()
2934 if err != nil {
@@ -56,6 +61,10 @@ func (p *provider) UpdateWebhook(ctx context.Context, webhook models.Webhook) (*
5661 continue
5762 }
5863
64+ if key == "_key" {
65+ continue
66+ }
67+
5968 if value == nil {
6069 updateFields += fmt .Sprintf ("%s = null," , key )
6170 continue
@@ -72,7 +81,6 @@ func (p *provider) UpdateWebhook(ctx context.Context, webhook models.Webhook) (*
7281 updateFields = strings .TrimSuffix (updateFields , "," )
7382
7483 query := fmt .Sprintf ("UPDATE %s SET %s WHERE id = '%s'" , KeySpace + "." + models .Collections .Webhook , updateFields , webhook .ID )
75-
7684 err = p .db .Query (query ).Exec ()
7785 if err != nil {
7886 return nil , err
@@ -130,7 +138,7 @@ func (p *provider) GetWebhookByID(ctx context.Context, webhookID string) (*model
130138// GetWebhookByEventName to get webhook by event_name
131139func (p * provider ) GetWebhookByEventName (ctx context.Context , eventName string ) (* model.Webhook , error ) {
132140 var webhook models.Webhook
133- query := fmt .Sprintf (`SELECT id, event_name, endpoint, headers, enabled, created_at, updated_at FROM %s WHERE event_name = '%s' LIMIT 1` , KeySpace + "." + models .Collections .Webhook , eventName )
141+ query := fmt .Sprintf (`SELECT id, event_name, endpoint, headers, enabled, created_at, updated_at FROM %s WHERE event_name = '%s' LIMIT 1 ALLOW FILTERING ` , KeySpace + "." + models .Collections .Webhook , eventName )
134142 err := p .db .Query (query ).Consistency (gocql .One ).Scan (& webhook .ID , & webhook .EventName , & webhook .EndPoint , & webhook .Headers , & webhook .Enabled , & webhook .CreatedAt , & webhook .UpdatedAt )
135143 if err != nil {
136144 return nil , err
@@ -146,7 +154,19 @@ func (p *provider) DeleteWebhook(ctx context.Context, webhook *model.Webhook) er
146154 return err
147155 }
148156
149- query = fmt .Sprintf ("DELETE FROM %s WHERE webhook_id = '%s'" , KeySpace + "." + models .Collections .WebhookLog , webhook .ID )
157+ getWebhookLogQuery := fmt .Sprintf ("SELECT id FROM %s WHERE webhook_id = '%s' ALLOW FILTERING" , KeySpace + "." + models .Collections .WebhookLog , webhook .ID )
158+ scanner := p .db .Query (getWebhookLogQuery ).Iter ().Scanner ()
159+ webhookLogIDs := ""
160+ for scanner .Next () {
161+ var wlID string
162+ err = scanner .Scan (& wlID )
163+ if err != nil {
164+ return err
165+ }
166+ webhookLogIDs += fmt .Sprintf ("'%s'," , wlID )
167+ }
168+ webhookLogIDs = strings .TrimSuffix (webhookLogIDs , "," )
169+ query = fmt .Sprintf ("DELETE FROM %s WHERE id IN (%s)" , KeySpace + "." + models .Collections .WebhookLog , webhookLogIDs )
150170 err = p .db .Query (query ).Exec ()
151171 return err
152172}
0 commit comments