Initial commit: 网络验证平台
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package webhook
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"verification-platform-backend/internal/database"
|
||||
"verification-platform-backend/internal/model"
|
||||
)
|
||||
|
||||
type EventType string
|
||||
|
||||
const (
|
||||
EventUserRegistered EventType = "user.registered"
|
||||
EventUserLogin EventType = "user.login"
|
||||
EventUserRecharged EventType = "user.recharged"
|
||||
EventUserExpired EventType = "user.expired"
|
||||
EventCardUsed EventType = "card.used"
|
||||
EventCardExpired EventType = "card.expired"
|
||||
EventAbnormalDetected EventType = "abnormal.detected"
|
||||
)
|
||||
|
||||
type WebhookPayload struct {
|
||||
Event EventType `json:"event"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Data map[string]interface{} `json:"data"`
|
||||
}
|
||||
|
||||
func TriggerEvent(appID uint, event EventType, data map[string]interface{}) {
|
||||
var webhooks []model.WebhookConfig
|
||||
if err := database.DB.Where("application_id = ? AND status = ?", appID, "active").Find(&webhooks).Error; err != nil {
|
||||
log.Printf("Failed to fetch webhooks: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, webhook := range webhooks {
|
||||
var events []string
|
||||
if err := json.Unmarshal([]byte(webhook.Events), &events); err != nil {
|
||||
log.Printf("Failed to parse webhook events: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if !containsEvent(events, string(event)) {
|
||||
continue
|
||||
}
|
||||
|
||||
payload := WebhookPayload{
|
||||
Event: event,
|
||||
Timestamp: time.Now().Unix(),
|
||||
Data: data,
|
||||
}
|
||||
|
||||
go sendWebhookNotification(&webhook, payload)
|
||||
}
|
||||
}
|
||||
|
||||
func containsEvent(events []string, event string) bool {
|
||||
for _, e := range events {
|
||||
if e == event || e == "*" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func sendWebhookNotification(webhook *model.WebhookConfig, payload WebhookPayload) {
|
||||
payloadBytes, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
log.Printf("Failed to marshal webhook payload: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("Sending webhook to %s: %s", webhook.URL, string(payloadBytes))
|
||||
fmt.Printf("[Webhook] Sending to %s: Event=%s, AppID=%d\n", webhook.URL, payload.Event, webhook.ApplicationID)
|
||||
}
|
||||
Reference in New Issue
Block a user