Add failed status to webhook data

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-02-13 13:06:48 +01:00
parent 3b9a1edf68
commit ae6e6b665b
3 changed files with 14 additions and 6 deletions

View File

@@ -21,7 +21,8 @@ CREATE TABLE webhook_configurations (
CREATE TYPE webhook_data_status AS ENUM ( CREATE TYPE webhook_data_status AS ENUM (
'PENDING', 'PENDING',
'PROCESSING', 'PROCESSING',
'DELIVERED' 'PROCESSED',
'FAILED'
); );
CREATE TABLE webhook_data ( CREATE TABLE webhook_data (

View File

@@ -24,7 +24,8 @@ type WebhookDataStatus string
const ( const (
WebhookDataStatusPending WebhookDataStatus = "PENDING" WebhookDataStatusPending WebhookDataStatus = "PENDING"
WebhookDataStatusProcessing WebhookDataStatus = "PROCESSING" WebhookDataStatusProcessing WebhookDataStatus = "PROCESSING"
WebhookDataStatusDelivered WebhookDataStatus = "DELIVERED" WebhookDataStatusProcessed WebhookDataStatus = "PROCESSED"
WebhookDataStatusFailed WebhookDataStatus = "FAILED"
) )
func (s WebhookDataStatus) String() string { func (s WebhookDataStatus) String() string {
@@ -33,7 +34,7 @@ func (s WebhookDataStatus) String() string {
func (s WebhookDataStatus) IsValid() bool { func (s WebhookDataStatus) IsValid() bool {
switch s { switch s {
case WebhookDataStatusPending, WebhookDataStatusProcessing, WebhookDataStatusDelivered: case WebhookDataStatusPending, WebhookDataStatusProcessing, WebhookDataStatusProcessed, WebhookDataStatusFailed:
return true return true
} }
return false return false

View File

@@ -148,6 +148,7 @@ func (s *Sender) processWebhookData(ctx context.Context, webhookData *coredata.W
log.Error(err), log.Error(err),
log.String("webhook_data_id", webhookData.ID.String()), log.String("webhook_data_id", webhookData.ID.String()),
) )
s.markWebhookData(ctx, webhookData, scope, coredata.WebhookDataStatusFailed)
return return
} }
@@ -155,17 +156,22 @@ func (s *Sender) processWebhookData(ctx context.Context, webhookData *coredata.W
s.deliverToConfiguration(ctx, webhookData, config, scope) s.deliverToConfiguration(ctx, webhookData, config, scope)
} }
s.markWebhookData(ctx, webhookData, scope, coredata.WebhookDataStatusProcessed)
}
func (s *Sender) markWebhookData(ctx context.Context, webhookData *coredata.WebhookData, scope coredata.Scoper, status coredata.WebhookDataStatus) {
now := time.Now() now := time.Now()
webhookData.Status = coredata.WebhookDataStatusDelivered webhookData.Status = status
webhookData.ProcessedAt = &now webhookData.ProcessedAt = &now
err = s.pg.WithConn(ctx, func(conn pg.Conn) error { err := s.pg.WithConn(ctx, func(conn pg.Conn) error {
return webhookData.UpdateStatus(ctx, conn, scope) return webhookData.UpdateStatus(ctx, conn, scope)
}) })
if err != nil { if err != nil {
s.logger.ErrorCtx(ctx, "cannot update webhook data to delivered", s.logger.ErrorCtx(ctx, "cannot update webhook data status",
log.Error(err), log.Error(err),
log.String("webhook_data_id", webhookData.ID.String()), log.String("webhook_data_id", webhookData.ID.String()),
log.String("target_status", status.String()),
) )
} }
} }