feat: add sql database methods for webhook

This commit is contained in:
Lakhan Samani 2022-07-09 11:21:32 +05:30
parent 0ffb3f67f1
commit e8eb62769e
8 changed files with 78 additions and 18 deletions

View File

@ -1,5 +1,7 @@
package models 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 // 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 // Webhook model for db
@ -12,3 +14,14 @@ type Webhook struct {
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"` CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_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,
}
}

View File

@ -17,15 +17,13 @@ type WebhookLog struct {
} }
func (w *WebhookLog) AsAPIWebhookLog() *model.WebhookLog { func (w *WebhookLog) AsAPIWebhookLog() *model.WebhookLog {
createdAt := w.CreatedAt
updatedAt := w.UpdatedAt
return &model.WebhookLog{ return &model.WebhookLog{
ID: w.ID, ID: w.ID,
HTTPStatus: &w.HttpStatus, HTTPStatus: &w.HttpStatus,
Response: &w.Response, Response: &w.Response,
Request: &w.Request, Request: &w.Request,
WebhookID: &w.WebhookID, WebhookID: &w.WebhookID,
CreatedAt: &createdAt, CreatedAt: &w.CreatedAt,
UpdatedAt: &updatedAt, UpdatedAt: &w.UpdatedAt,
} }
} }

View File

@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }
// GetWebhookByEvent to get webhook by event_name // GetWebhookByEventName to get webhook by event_name
func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }

View File

@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }
// GetWebhookByEvent to get webhook by event_name // GetWebhookByEventName to get webhook by event_name
func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }

View File

@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }
// GetWebhookByEvent to get webhook by event_name // GetWebhookByEventName to get webhook by event_name
func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }

View File

@ -36,8 +36,8 @@ func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }
// GetWebhookByEvent to get webhook by event_name // GetWebhookByEventName to get webhook by event_name
func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { func (p *provider) GetWebhookByEventName(eventName string) (models.Webhook, error) {
return models.Webhook{}, nil return models.Webhook{}, nil
} }

View File

@ -50,8 +50,8 @@ type Provider interface {
ListWebhook(pagination model.Pagination) (*model.Webhooks, error) ListWebhook(pagination model.Pagination) (*model.Webhooks, error)
// GetWebhookByID to get webhook by id // GetWebhookByID to get webhook by id
GetWebhookByID(webhookID string) (models.Webhook, error) GetWebhookByID(webhookID string) (models.Webhook, error)
// GetWebhookByEvent to get webhook by event_name // GetWebhookByEventName to get webhook by event_name
GetWebhookByEvent(eventName string) (models.Webhook, error) GetWebhookByEventName(eventName string) (models.Webhook, error)
// DeleteWebhook to delete webhook // DeleteWebhook to delete webhook
DeleteWebhook(webhookID string) error DeleteWebhook(webhookID string) error

View File

@ -17,31 +17,80 @@ func (p *provider) AddWebhook(webhook models.Webhook) (models.Webhook, error) {
webhook.Key = webhook.ID webhook.Key = webhook.ID
webhook.CreatedAt = time.Now().Unix() webhook.CreatedAt = time.Now().Unix()
webhook.UpdatedAt = time.Now().Unix() webhook.UpdatedAt = time.Now().Unix()
res := p.db.Create(&webhook)
if res.Error != nil {
return webhook, res.Error
}
return webhook, nil return webhook, nil
} }
// UpdateWebhook to update webhook // UpdateWebhook to update webhook
func (p *provider) UpdateWebhook(webhook models.Webhook) (models.Webhook, error) { func (p *provider) UpdateWebhook(webhook models.Webhook) (models.Webhook, error) {
webhook.UpdatedAt = time.Now().Unix() webhook.UpdatedAt = time.Now().Unix()
result := p.db.Save(&webhook)
if result.Error != nil {
return webhook, result.Error
}
return webhook, nil return webhook, nil
} }
// ListWebhooks to list webhook // ListWebhooks to list webhook
func (p *provider) ListWebhook(pagination model.Pagination) (*model.Webhooks, error) { 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 // GetWebhookByID to get webhook by id
func (p *provider) GetWebhookByID(webhookID string) (models.Webhook, error) { 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 // GetWebhookByEventName to get webhook by event_name
func (p *provider) GetWebhookByEvent(eventName string) (models.Webhook, error) { 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 return models.Webhook{}, nil
} }
// DeleteWebhook to delete webhook // DeleteWebhook to delete webhook
func (p *provider) DeleteWebhook(webhookID string) error { func (p *provider) DeleteWebhook(webhookID string) error {
result := p.db.Delete(&models.Webhook{}, webhookID)
if result.Error != nil {
return result.Error
}
return nil return nil
} }