# Go Webhook Server - Рефакторенная версия Рефакторенная версия webhook сервера с разделением на пакеты и улучшенной архитектурой. ## 🏗️ **Новая структура проекта** ``` go-webhook-server/ ├── cmd/ │ └── server/ │ └── main.go # Точка входа приложения ├── internal/ │ ├── config/ │ │ └── config.go # Конфигурация приложения │ ├── handlers/ │ │ ├── webhook.go # Обработчик webhook'ов │ │ └── health.go # Health check обработчик │ ├── services/ │ │ ├── build.go # Основной сервис сборки │ │ ├── git.go # Git операции │ │ ├── quartz.go # Сборка Quartz │ │ ├── files.go # Файловые операции │ │ └── types.go # Общие типы │ └── middleware/ │ └── logging.go # HTTP логирование ├── pkg/ │ └── logger/ │ └── logger.go # Интерфейс логгера ├── api/ │ └── routes.go # Определение роутов ├── configs/ │ └── config.yaml # YAML конфигурация ├── tests/ # Тесты ├── scripts/ # Скрипты └── docs/ # Документация ``` ## 🔧 **Основные улучшения** ### **1. Разделение ответственности** - **Config** - управление конфигурацией - **Services** - бизнес-логика - **Handlers** - HTTP обработчики - **Middleware** - промежуточное ПО - **API** - определение роутов ### **2. Интерфейсы и абстракции** ```go type GitService interface { UpdateRepository() error IsRepositoryExists() bool } type QuartzService interface { BuildSite() error InstallDependencies() error } type BuildService interface { BuildSite() BuildResult } ``` ### **3. Dependency Injection** ```go // Инициализация сервисов gitService := services.NewGitService(cfg, log) quartzService := services.NewQuartzService(cfg, log) fileService := services.NewFileService(cfg, log) buildService := services.NewBuildService(cfg, log, gitService, quartzService, fileService) ``` ### **4. Улучшенное логирование** - Структурированное логирование - Request ID для отслеживания - Уровни логирования - Контекстная информация ### **5. Middleware** - **RequestIDMiddleware** - уникальный ID для каждого запроса - **ResponseTimeMiddleware** - время ответа - **LoggingMiddleware** - детальное логирование HTTP ## 🚀 **Запуск** ### **Локально** ```bash cd cmd/server go run main.go ``` ### **Сборка** ```bash go build -o go-webhook-server cmd/server/main.go ``` ### **Docker** ```bash docker build -t go-webhook-server . docker run -p 3000:3000 go-webhook-server ``` ## 📝 **Конфигурация** ### **Переменные окружения** ```bash PORT=3000 OBSIDIAN_PATH=/obsidian QUARTZ_PATH=/quartz PUBLIC_PATH=/public GIT_BRANCH=main GIT_REMOTE=origin SERVER_TIMEOUT=30 ``` ### **YAML конфигурация** ```yaml server: port: "3000" timeout: 30 paths: obsidian: "/obsidian" quartz: "/quartz" public: "/public" git: branch: "main" remote: "origin" ``` ## 🧪 **Тестирование** ### **Unit тесты** ```bash go test ./internal/... ``` ### **Integration тесты** ```bash go test ./tests/integration/... ``` ## 🔄 **API эндпоинты** ### **POST /webhook** Запускает процесс сборки сайта. **Ответ:** ```json { "status": "accepted", "message": "Build process started", "request_id": "20250127103000-abc123", "timestamp": "2025-01-27T10:30:00Z" } ``` ### **GET /health** Проверка состояния сервиса. **Ответ:** ```json { "status": "ok", "timestamp": "2025-01-27T10:30:00Z", "service": "go-webhook-server", "version": "1.0.0", "request_id": "20250127103000-abc123" } ``` ## 📊 **Мониторинг** ### **Заголовки ответа** - `X-Request-ID` - уникальный ID запроса - `X-Response-Time` - время ответа ### **Логирование** - Все HTTP запросы логируются с деталями - Request ID для отслеживания цепочки запросов - Структурированные логи в формате JSON ## 🚀 **Преимущества новой архитектуры** 1. **Тестируемость** - легко писать unit тесты 2. **Переиспользование** - компоненты можно использовать в других проектах 3. **Читаемость** - код легче понимать и поддерживать 4. **Расширяемость** - проще добавлять новую функциональность 5. **Соответствие стандартам** - структура соответствует Go best practices 6. **Dependency Injection** - легко заменять реализации 7. **Интерфейсы** - четкое разделение контрактов ## 🔮 **Планы развития** - [ ] Добавление метрик Prometheus - [ ] Конфигурация через файлы - [ ] Graceful shutdown для сборки - [ ] Очередь сборок - [ ] Уведомления о результатах - [ ] API для мониторинга сборок - [ ] Аутентификация webhook'ов - [ ] Rate limiting - [ ] OpenAPI документация ## 📚 **Зависимости** - **Go 1.20+** - **Gin** - веб-фреймворк - **go-git/v5** - Git клиент - **logrus** - логирование - **YAML** - конфигурация (планируется)