2022-07-06 05:08:21 +00:00
|
|
|
package sql
|
|
|
|
|
|
|
|
import (
|
2022-07-10 16:19:33 +00:00
|
|
|
"context"
|
2022-07-08 13:39:23 +00:00
|
|
|
"time"
|
|
|
|
|
2022-07-06 05:08:21 +00:00
|
|
|
"github.com/authorizerdev/authorizer/server/db/models"
|
|
|
|
"github.com/authorizerdev/authorizer/server/graph/model"
|
2022-07-08 13:39:23 +00:00
|
|
|
"github.com/google/uuid"
|
2022-07-06 05:08:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// AddWebhook to add webhook
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) AddWebhook(ctx context.Context, webhook models.Webhook) (*model.Webhook, error) {
|
2022-07-08 13:39:23 +00:00
|
|
|
if webhook.ID == "" {
|
|
|
|
webhook.ID = uuid.New().String()
|
|
|
|
}
|
|
|
|
|
|
|
|
webhook.Key = webhook.ID
|
|
|
|
webhook.CreatedAt = time.Now().Unix()
|
|
|
|
webhook.UpdatedAt = time.Now().Unix()
|
2022-07-09 05:51:32 +00:00
|
|
|
res := p.db.Create(&webhook)
|
|
|
|
if res.Error != nil {
|
2022-07-10 16:19:33 +00:00
|
|
|
return nil, res.Error
|
2022-07-09 05:51:32 +00:00
|
|
|
}
|
2022-07-10 16:19:33 +00:00
|
|
|
return webhook.AsAPIWebhook(), nil
|
2022-07-06 05:08:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// UpdateWebhook to update webhook
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) UpdateWebhook(ctx context.Context, webhook models.Webhook) (*model.Webhook, error) {
|
2022-07-08 13:39:23 +00:00
|
|
|
webhook.UpdatedAt = time.Now().Unix()
|
2022-07-09 05:51:32 +00:00
|
|
|
|
|
|
|
result := p.db.Save(&webhook)
|
|
|
|
if result.Error != nil {
|
2022-07-10 16:19:33 +00:00
|
|
|
return nil, result.Error
|
2022-07-09 05:51:32 +00:00
|
|
|
}
|
|
|
|
|
2022-07-10 16:19:33 +00:00
|
|
|
return webhook.AsAPIWebhook(), nil
|
2022-07-06 05:08:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListWebhooks to list webhook
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) ListWebhook(ctx context.Context, pagination model.Pagination) (*model.Webhooks, error) {
|
2022-07-09 05:51:32 +00:00
|
|
|
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
|
2022-07-06 05:08:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// GetWebhookByID to get webhook by id
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) GetWebhookByID(ctx context.Context, webhookID string) (*model.Webhook, error) {
|
2022-07-09 05:51:32 +00:00
|
|
|
var webhook models.Webhook
|
|
|
|
|
2022-07-11 14:10:54 +00:00
|
|
|
result := p.db.Where("id = ?", webhookID).First(&webhook)
|
2022-07-09 05:51:32 +00:00
|
|
|
if result.Error != nil {
|
2022-07-10 16:19:33 +00:00
|
|
|
return nil, result.Error
|
2022-07-09 05:51:32 +00:00
|
|
|
}
|
2022-07-10 16:19:33 +00:00
|
|
|
return webhook.AsAPIWebhook(), nil
|
2022-07-06 05:08:21 +00:00
|
|
|
}
|
|
|
|
|
2022-07-09 05:51:32 +00:00
|
|
|
// GetWebhookByEventName to get webhook by event_name
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) GetWebhookByEventName(ctx context.Context, eventName string) (*model.Webhook, error) {
|
2022-07-09 05:51:32 +00:00
|
|
|
var webhook models.Webhook
|
|
|
|
|
2022-07-11 14:10:54 +00:00
|
|
|
result := p.db.Where("event_name = ?", eventName).First(&webhook)
|
2022-07-09 05:51:32 +00:00
|
|
|
if result.Error != nil {
|
2022-07-10 16:19:33 +00:00
|
|
|
return nil, result.Error
|
2022-07-09 05:51:32 +00:00
|
|
|
}
|
2022-07-10 16:19:33 +00:00
|
|
|
return webhook.AsAPIWebhook(), nil
|
2022-07-06 05:08:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// DeleteWebhook to delete webhook
|
2022-07-10 16:19:33 +00:00
|
|
|
func (p *provider) DeleteWebhook(ctx context.Context, webhook *model.Webhook) error {
|
2022-07-11 14:10:54 +00:00
|
|
|
result := p.db.Delete(&models.Webhook{
|
|
|
|
ID: webhook.ID,
|
|
|
|
})
|
|
|
|
if result.Error != nil {
|
|
|
|
return result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
result = p.db.Where("webhook_id = ?", webhook.ID).Delete(&models.WebhookLog{})
|
2022-07-09 05:51:32 +00:00
|
|
|
if result.Error != nil {
|
|
|
|
return result.Error
|
|
|
|
}
|
2022-07-06 05:08:21 +00:00
|
|
|
return nil
|
|
|
|
}
|