diff --git a/server/db/models/webhook.go b/server/db/models/webhook.go index 17d01a7..074bb61 100644 --- a/server/db/models/webhook.go +++ b/server/db/models/webhook.go @@ -1,5 +1,7 @@ package models +import "github.com/authorizerdev/authorizer/server/graph/model" + // Note: any change here should be reflected in providers/casandra/provider.go as it does not have model support in collection creation // Webhook model for db @@ -12,3 +14,14 @@ type Webhook struct { CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"` UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"` } + +func (w *Webhook) AsAPIWebhook() *model.Webhook { + return &model.Webhook{ + ID: w.ID, + EventName: &w.EventName, + Endpoint: &w.EndPoint, + Enabled: &w.Enabled, + CreatedAt: &w.CreatedAt, + UpdatedAt: &w.UpdatedAt, + } +} diff --git a/server/db/models/webhook_log.go b/server/db/models/webhook_log.go index c5f80bd..b9fb3a8 100644 --- a/server/db/models/webhook_log.go +++ b/server/db/models/webhook_log.go @@ -17,15 +17,13 @@ type WebhookLog struct { } func (w *WebhookLog) AsAPIWebhookLog() *model.WebhookLog { - createdAt := w.CreatedAt - updatedAt := w.UpdatedAt return &model.WebhookLog{ ID: w.ID, HTTPStatus: &w.HttpStatus, Response: &w.Response, Request: &w.Request, WebhookID: &w.WebhookID, - CreatedAt: &createdAt, - UpdatedAt: &updatedAt, + CreatedAt: &w.CreatedAt, + UpdatedAt: &w.UpdatedAt, } } diff --git a/server/db/providers/arangodb/webhook.go b/server/db/providers/arangodb/webhook.go index eef4003..ca58450 100644 --- a/server/db/providers/arangodb/webhook.go +++ b/server/db/providers/arangodb/webhook.go @@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { return models.Webhook{}, nil } -// GetWebhookByEvent to get webhook by event_name -func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) { return models.Webhook{}, nil } diff --git a/server/db/providers/cassandradb/webhook.go b/server/db/providers/cassandradb/webhook.go index 2e9e978..fd9047a 100644 --- a/server/db/providers/cassandradb/webhook.go +++ b/server/db/providers/cassandradb/webhook.go @@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { return models.Webhook{}, nil } -// GetWebhookByEvent to get webhook by event_name -func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) { return models.Webhook{}, nil } diff --git a/server/db/providers/mongodb/webhook.go b/server/db/providers/mongodb/webhook.go index c568e29..781619c 100644 --- a/server/db/providers/mongodb/webhook.go +++ b/server/db/providers/mongodb/webhook.go @@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { return models.Webhook{}, nil } -// GetWebhookByEvent to get webhook by event_name -func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) { return models.Webhook{}, nil } diff --git a/server/db/providers/provider_template/webhook.go b/server/db/providers/provider_template/webhook.go index 8b73b9f..82577a5 100644 --- a/server/db/providers/provider_template/webhook.go +++ b/server/db/providers/provider_template/webhook.go @@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { return models.Webhook{}, nil } -// GetWebhookByEvent to get webhook by event_name -func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) { return models.Webhook{}, nil } diff --git a/server/db/providers/providers.go b/server/db/providers/providers.go index 4ec5020..6262f87 100644 --- a/server/db/providers/providers.go +++ b/server/db/providers/providers.go @@ -50,8 +50,8 @@ type Provider interface { ListWebhook(pagination model.Pagination) (*model.Webhooks, error) // GetWebhookByID to get webhook by id GetWebhookByID(webhookID string) (models.Webhook, error) - // GetWebhookByEvent to get webhook by event_name - GetWebhookByEvent(eventName string) (models.Webhook, error) + // GetWebhookByEventName to get webhook by event_name + GetWebhookByEventName(eventName string) (models.Webhook, error) // DeleteWebhook to delete webhook DeleteWebhook(webhookID string) error diff --git a/server/db/providers/sql/webhook.go b/server/db/providers/sql/webhook.go index 4cfb380..b006e63 100644 --- a/server/db/providers/sql/webhook.go +++ b/server/db/providers/sql/webhook.go @@ -17,31 +17,80 @@ func (p *provider) AddWebhook(webhook models.Webhook) (models.Webhook, error) { webhook.Key = webhook.ID webhook.CreatedAt = time.Now().Unix() webhook.UpdatedAt = time.Now().Unix() + res := p.db.Create(&webhook) + if res.Error != nil { + return webhook, res.Error + } return webhook, nil } // UpdateWebhook to update webhook func (p *provider) UpdateWebhook(webhook models.Webhook) (models.Webhook, error) { webhook.UpdatedAt = time.Now().Unix() + + result := p.db.Save(&webhook) + if result.Error != nil { + return webhook, result.Error + } + return webhook, nil } // ListWebhooks to list webhook func (p *provider) ListWebhook(pagination model.Pagination) (*model.Webhooks, error) { - return nil, nil + var webhooks []models.Webhook + + result := p.db.Limit(int(pagination.Limit)).Offset(int(pagination.Offset)).Order("created_at DESC").Find(&webhooks) + if result.Error != nil { + return nil, result.Error + } + + var total int64 + totalRes := p.db.Model(&models.Webhook{}).Count(&total) + if totalRes.Error != nil { + return nil, totalRes.Error + } + + paginationClone := pagination + paginationClone.Total = total + + responseWebhooks := []*model.Webhook{} + for _, w := range webhooks { + responseWebhooks = append(responseWebhooks, w.AsAPIWebhook()) + } + return &model.Webhooks{ + Pagination: &paginationClone, + Webhooks: responseWebhooks, + }, nil } // GetWebhookByID to get webhook by id func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { - return models.Webhook{}, nil + var webhook models.Webhook + + result := p.db.Where("id = ?", webhookID).First(webhook) + if result.Error != nil { + return webhook, result.Error + } + return webhook, nil } -// GetWebhookByEvent to get webhook by event_name -func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { +// GetWebhookByEventName to get webhook by event_name +func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) { + var webhook models.Webhook + + result := p.db.Where("event_name = ?", eventName).First(webhook) + if result.Error != nil { + return webhook, result.Error + } return models.Webhook{}, nil } // DeleteWebhook to delete webhook func (p *provider) DeleteWebhook(webhookID string) error { + result := p.db.Delete(&models.Webhook{}, webhookID) + if result.Error != nil { + return result.Error + } return nil }