Files
go-webhook/internal/handlers/webhook.go
Andrey Epifancev 04cea69d6e refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты
- Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build)
- Реализован Dependency Injection для сервисов
- Добавлены middleware для логирования, Request ID и Response Time
- Создан пакет конфигурации с валидацией
- Улучшено логирование через интерфейс
- Добавлены обработчики HTTP в отдельных пакетах
- Создана структура для тестирования
- Добавлены конфигурационные файлы и документация
2025-08-11 19:45:54 +04:00

51 lines
1.4 KiB
Go

package handlers
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
"go-webhook-server/internal/services"
"go-webhook-server/pkg/logger"
)
// WebhookHandler обработчик для webhook эндпоинта
type WebhookHandler struct {
buildService services.BuildService
logger logger.Logger
}
// NewWebhookHandler создает новый экземпляр webhook обработчика
func NewWebhookHandler(buildService services.BuildService, log logger.Logger) *WebhookHandler {
return &WebhookHandler{
buildService: buildService,
logger: log,
}
}
// HandleWebhook обрабатывает webhook запрос
func (h *WebhookHandler) HandleWebhook(c *gin.Context) {
requestID := c.GetString("request_id")
logger := h.logger.WithField("request_id", requestID)
logger.Info("Webhook received, starting site rebuild...")
// Запускаем сборку в горутине для асинхронной обработки
go func() {
result := h.buildService.BuildSite()
if result.Success {
logger.Info("Webhook build completed successfully")
} else {
logger.Errorf("Webhook build failed: %s", result.Error)
}
}()
// Сразу возвращаем ответ
c.JSON(http.StatusAccepted, gin.H{
"status": "accepted",
"message": "Build process started",
"request_id": requestID,
"timestamp": time.Now().UTC().Format(time.RFC3339),
})
}