70 lines
2.8 KiB
Go
70 lines
2.8 KiB
Go
|
|
package domain
|
||
|
|
|
||
|
|
import "time"
|
||
|
|
|
||
|
|
// WebhookEventType Webhook 事件类型
|
||
|
|
type WebhookEventType string
|
||
|
|
|
||
|
|
const (
|
||
|
|
EventUserRegistered WebhookEventType = "user.registered"
|
||
|
|
EventUserLogin WebhookEventType = "user.login"
|
||
|
|
EventUserLogout WebhookEventType = "user.logout"
|
||
|
|
EventUserUpdated WebhookEventType = "user.updated"
|
||
|
|
EventUserDeleted WebhookEventType = "user.deleted"
|
||
|
|
EventUserLocked WebhookEventType = "user.locked"
|
||
|
|
EventPasswordChanged WebhookEventType = "user.password_changed"
|
||
|
|
EventPasswordReset WebhookEventType = "user.password_reset"
|
||
|
|
EventTOTPEnabled WebhookEventType = "user.totp_enabled"
|
||
|
|
EventTOTPDisabled WebhookEventType = "user.totp_disabled"
|
||
|
|
EventLoginFailed WebhookEventType = "user.login_failed"
|
||
|
|
EventAnomalyDetected WebhookEventType = "security.anomaly_detected"
|
||
|
|
)
|
||
|
|
|
||
|
|
// WebhookStatus Webhook 状态
|
||
|
|
type WebhookStatus int
|
||
|
|
|
||
|
|
const (
|
||
|
|
WebhookStatusActive WebhookStatus = 1
|
||
|
|
WebhookStatusInactive WebhookStatus = 0
|
||
|
|
)
|
||
|
|
|
||
|
|
// Webhook Webhook 配置
|
||
|
|
type Webhook struct {
|
||
|
|
ID int64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
||
|
|
Name string `gorm:"type:varchar(100);not null" json:"name"`
|
||
|
|
URL string `gorm:"type:varchar(500);not null" json:"url"`
|
||
|
|
Secret string `gorm:"type:varchar(255)" json:"-"` // HMAC 签名密钥,不返回给前端
|
||
|
|
Events string `gorm:"type:text" json:"events"` // JSON 数组,订阅的事件类型
|
||
|
|
Status WebhookStatus `gorm:"default:1" json:"status"`
|
||
|
|
MaxRetries int `gorm:"default:3" json:"max_retries"`
|
||
|
|
TimeoutSec int `gorm:"default:10" json:"timeout_sec"`
|
||
|
|
CreatedBy int64 `gorm:"index" json:"created_by"`
|
||
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// TableName 指定表名
|
||
|
|
func (Webhook) TableName() string {
|
||
|
|
return "webhooks"
|
||
|
|
}
|
||
|
|
|
||
|
|
// WebhookDelivery Webhook 投递记录
|
||
|
|
type WebhookDelivery struct {
|
||
|
|
ID int64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
||
|
|
WebhookID int64 `gorm:"index" json:"webhook_id"`
|
||
|
|
EventType WebhookEventType `gorm:"type:varchar(100)" json:"event_type"`
|
||
|
|
Payload string `gorm:"type:text" json:"payload"`
|
||
|
|
StatusCode int `json:"status_code"`
|
||
|
|
ResponseBody string `gorm:"type:text" json:"response_body"`
|
||
|
|
Attempt int `gorm:"default:1" json:"attempt"`
|
||
|
|
Success bool `gorm:"default:false" json:"success"`
|
||
|
|
Error string `gorm:"type:text" json:"error"`
|
||
|
|
DeliveredAt *time.Time `json:"delivered_at,omitempty"`
|
||
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// TableName 指定表名
|
||
|
|
func (WebhookDelivery) TableName() string {
|
||
|
|
return "webhook_deliveries"
|
||
|
|
}
|