package senders import ( "encoding/json" "errors" "fmt" "gitea.pena/SQuiz/common/model" "github.com/gofiber/fiber/v2" ) type WebhookSender struct { client *fiber.Client } func NewWebhookSender() *WebhookSender { return &WebhookSender{ client: fiber.AcquireClient(), } } type WebhookPayload struct { QuizConfig model.ResultInfo `json:"quiz_config"` AnswerContent model.ResultContent `json:"answer_content"` AllAnswers []model.ResultAnswer `json:"all_answers"` QuestionsMap map[uint64]string `json:"questions_map"` AnswerTime string `json:"answer_time"` QuizID int64 `json:"quiz_id"` Subject string `json:"subject"` } func (w *WebhookSender) SendLead(data LeadData) error { if data.Template == "reject" { // это у нас для неуплоченных, смысл отправлять пост с напомиашкой есть? return nil } webhookData := WebhookPayload{ QuizConfig: data.TemplateData.QuizConfig, AnswerContent: data.TemplateData.AnswerContent, AllAnswers: data.TemplateData.AllAnswers, QuestionsMap: data.TemplateData.QuestionsMap, AnswerTime: data.TemplateData.AnswerTime, QuizID: data.TemplateData.QuizID, Subject: data.Subject, } jsonData, err := json.Marshal(webhookData) if err != nil { return fmt.Errorf("error marshaling webhook data: %w", err) } url := data.To.(string) agent := w.client.Post(url) agent.Set("Content-Type", "application/json").Body(jsonData) statusCode, _, errs := agent.Bytes() if len(errs) > 0 { return fmt.Errorf("error send webhook request: %w", errors.Join(errs...)) } if statusCode != fiber.StatusOK { return fmt.Errorf("received an incorrect status code from webhook: %d", statusCode) } return nil } func (w *WebhookSender) Name() string { return "webhook" }