refactor: разделение кода на пакеты и улучшение архитектуры

- Создана новая структура проекта с разделением на пакеты
- Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build)
- Реализован Dependency Injection для сервисов
- Добавлены middleware для логирования, Request ID и Response Time
- Создан пакет конфигурации с валидацией
- Улучшено логирование через интерфейс
- Добавлены обработчики HTTP в отдельных пакетах
- Создана структура для тестирования
- Добавлены конфигурационные файлы и документация
This commit is contained in:
Andrey Epifancev
2025-08-11 19:45:54 +04:00
parent 1b340362be
commit 04cea69d6e
16 changed files with 1293 additions and 0 deletions

155
Makefile-refactored Normal file
View File

@@ -0,0 +1,155 @@
.PHONY: help build run test clean docker-build docker-run docker-stop install-deps
# Переменные
BINARY_NAME=go-webhook-server
DOCKER_IMAGE=go-webhook-server
DOCKER_CONTAINER=go-webhook-server
BUILD_DIR=cmd/server
# Помощь
help: ## Показать справку по командам
@echo "Доступные команды:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
# Установка зависимостей
install-deps: ## Установить Go зависимости
go mod download
go mod tidy
# Сборка
build: install-deps ## Собрать бинарный файл
@echo "Сборка $(BINARY_NAME)..."
go build -o $(BINARY_NAME) $(BUILD_DIR)/main.go
@echo "Сборка завершена: $(BINARY_NAME)"
# Запуск
run: build ## Запустить сервис локально
@echo "Запуск $(BINARY_NAME)..."
./$(BINARY_NAME)
# Запуск без сборки
run-dev: ## Запустить сервис в режиме разработки
@echo "Запуск в режиме разработки..."
cd $(BUILD_DIR) && go run main.go
# Тестирование
test: install-deps ## Запустить тесты
@echo "Запуск тестов..."
go test -v ./internal/...
go test -v ./pkg/...
# Тестирование с покрытием
test-coverage: install-deps ## Запустить тесты с покрытием
@echo "Запуск тестов с покрытием..."
go test -v -coverprofile=coverage.out ./internal/...
go test -v -coverprofile=pkg-coverage.out ./pkg/...
go tool cover -html=coverage.out -o coverage.html
go tool cover -html=pkg-coverage.out -o pkg-coverage.html
@echo "Отчеты покрытия созданы: coverage.html, pkg-coverage.html"
# Очистка
clean: ## Очистить собранные файлы
@echo "Очистка..."
rm -f $(BINARY_NAME)
rm -f coverage.out pkg-coverage.out
rm -f coverage.html pkg-coverage.html
@echo "Очистка завершена"
# Docker команды
docker-build: ## Собрать Docker образ
@echo "Сборка Docker образа..."
docker build -t $(DOCKER_IMAGE) .
@echo "Docker образ собран: $(DOCKER_IMAGE)"
docker-run: docker-build ## Запустить Docker контейнер
@echo "Запуск Docker контейнера..."
docker run -d \
--name $(DOCKER_CONTAINER) \
-p 3000:3000 \
-v obsidian_repo:/obsidian:ro \
-v quartz_repo:/quartz:ro \
-v public_site:/public \
$(DOCKER_IMAGE)
@echo "Docker контейнер запущен: $(DOCKER_CONTAINER)"
docker-stop: ## Остановить Docker контейнер
@echo "Остановка Docker контейнера..."
docker stop $(DOCKER_CONTAINER) || true
docker rm $(DOCKER_CONTAINER) || true
@echo "Docker контейнер остановлен"
docker-logs: ## Показать логи Docker контейнера
docker logs -f $(DOCKER_CONTAINER)
# Docker Compose команды
compose-up: ## Запустить сервис через Docker Compose
@echo "Запуск через Docker Compose..."
docker-compose up -d
@echo "Сервис запущен"
compose-down: ## Остановить сервис через Docker Compose
@echo "Остановка через Docker Compose..."
docker-compose down
@echo "Сервис остановлен"
compose-logs: ## Показать логи Docker Compose
docker-compose logs -f
# Проверка состояния
status: ## Показать статус сервиса
@echo "Проверка статуса сервиса..."
@curl -s http://localhost:3000/health || echo "Сервис недоступен"
# Webhook тест
test-webhook: ## Отправить тестовый webhook
@echo "Отправка тестового webhook..."
@curl -X POST http://localhost:3000/webhook
@echo ""
# Проверка структуры
lint: ## Проверить код линтером
@echo "Проверка кода..."
@if command -v golangci-lint > /dev/null; then \
golangci-lint run; \
else \
echo "golangci-lint не установлен. Установите: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \
fi
# Форматирование кода
fmt: ## Отформатировать код
@echo "Форматирование кода..."
go fmt ./...
@echo "Код отформатирован"
# Проверка зависимостей
deps-check: ## Проверить зависимости
@echo "Проверка зависимостей..."
go mod verify
go list -m all
# Полная пересборка
rebuild: clean build ## Полная пересборка проекта
# Разработка
dev: ## Запуск в режиме разработки с автоперезагрузкой
@echo "Запуск в режиме разработки..."
@if command -v air > /dev/null; then \
air; \
else \
echo "Air не установлен. Установите: go install github.com/cosmtrek/air@latest"; \
cd $(BUILD_DIR) && go run main.go; \
fi
# Создание структуры проекта
create-structure: ## Создать структуру директорий
@echo "Создание структуры проекта..."
mkdir -p cmd/server
mkdir -p internal/{config,handlers,services,middleware}
mkdir -p pkg/logger
mkdir -p api
mkdir -p configs
mkdir -p tests/{unit,integration}
mkdir -p scripts
mkdir -p docs
mkdir -p deployments
@echo "Структура проекта создана"