check / check (push) Waiting to run
Every reference from a model to the record it belongs to is now json:"-", so the webhook and target models (and the other parent and child pairs in internal/database) can no longer marshal each other in a loop. Preloading maps associations without reading json tags, so it still fills these references. One test preloads a webhook with its targets and entrypoints and a target with its webhook, checks the references are filled, and checks the JSON leaves them out; another builds each other model with its parent set and checks the parent's id is absent from its JSON. Model: opus-5-5
42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
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
|
|
|
|
// For HTTP targets (max_retries=0 means fire-and-forget,
|
|
// >0 enables retries with backoff)
|
|
MaxRetries int `json:"maxRetries,omitempty"`
|
|
MaxQueueSize int `json:"maxQueueSize,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"`
|
|
}
|