70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
|
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"
|
|||
|
}
|