package database // TargetType represents the type of delivery target type TargetType string // Target type values. const ( TargetTypeHTTP TargetType = "http" TargetTypeDatabase TargetType = "database" TargetTypeLog TargetType = "log" TargetTypeSlack TargetType = "slack" ) // Target represents a delivery target for a webhook type Target struct { BaseModel WebhookID string `gorm:"type:uuid;not null" json:"webhookId"` Name string `gorm:"not null" json:"name"` Type TargetType `gorm:"not null" json:"type"` Active bool `gorm:"default:true" json:"active"` // Configuration fields (JSON stored based on type). // // json:"-" because the blob holds the target's credential — a // Slack incoming-webhook URL, or an http destination whose path // segments are the secret. delivery.TargetView is the masking // barrier for the HTML path; this tag is the barrier for any // handler that marshals the model itself. Config string `gorm:"type:text" json:"-"` // JSON configuration // MaxAttempts is how many times an HTTP or Slack target attempts // each delivery in all, at least 1. 1 is a single attempt with no // circuit breaker; above 1, a failed attempt is retried with // backoff behind the breaker. The table's check constraint refuses // a target saved with less than 1, whatever its type. MaxAttempts int `gorm:"not null;check:max_attempts >= 1" json:"maxAttempts,omitempty"` // Relations. No model marshals the record it belongs to: // Webhook.Targets leads back here, and the JSON could loop. Webhook Webhook `json:"-"` Deliveries []Delivery `json:"deliveries,omitempty"` }