Files
go-webhook/README.md
Andrey Epifancev fcc65ea850 cleanup: удаление ненужных файлов и переименование
- Удален старый main.go
- Удален старый Dockerfile
- Удален старый Makefile
- Удален старый README.md
- Удален docker-compose.yml
- Удален .air.toml
- Удалены пустые директории (deployments, docs, scripts, tests)
- Переименованы файлы без суффикса -refactored
- Очищена структура проекта
2025-08-11 19:55:23 +04:00

213 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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** - конфигурация (планируется)