package models import ( "time" "github.com/google/uuid" "github.com/lib/pq" "gorm.io/gorm" ) // Webhook représente une configuration de webhook type Webhook struct { ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"` UserID uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"` URL string `gorm:"not null" json:"url"` Events pq.StringArray `gorm:"type:text[]" json:"events"` Active bool `gorm:"default:true" json:"active"` Secret string `gorm:"not null" json:"secret,omitempty"` // Ne pas exposer dans l'API APIKey string `gorm:"type:varchar(64);uniqueIndex" json:"api_key,omitempty"` // BE-SEC-012: API key for webhook authentication CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // BeforeCreate hook GORM pour générer UUID si non défini func (w *Webhook) BeforeCreate(tx *gorm.DB) error { if w.ID == uuid.Nil { w.ID = uuid.New() } return nil } // WebhookFailure représente un échec de livraison de webhook type WebhookFailure struct { ID uuid.UUID `gorm:"type:uuid;primaryKey"` WebhookID uuid.UUID `gorm:"type:uuid;not null;index" json:"webhook_id"` Event string `gorm:"not null" json:"event"` Error string `gorm:"not null" json:"error"` Retries int `gorm:"default:0" json:"retries"` CreatedAt time.Time `gorm:"not null" json:"created_at"` } // BeforeCreate hook GORM pour générer UUID si non défini func (wf *WebhookFailure) BeforeCreate(tx *gorm.DB) error { if wf.ID == uuid.Nil { wf.ID = uuid.New() } return nil }