refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
This commit is contained in:
88
internal/services/build.go
Normal file
88
internal/services/build.go
Normal file
@@ -0,0 +1,88 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"go-webhook-server/internal/config"
|
||||
"go-webhook-server/pkg/logger"
|
||||
)
|
||||
|
||||
// BuildService интерфейс для сборки сайта
|
||||
type BuildService interface {
|
||||
BuildSite() BuildResult
|
||||
}
|
||||
|
||||
// buildServiceImpl реализация сервиса сборки
|
||||
type buildServiceImpl struct {
|
||||
config *config.Config
|
||||
logger logger.Logger
|
||||
gitService GitService
|
||||
quartzService QuartzService
|
||||
fileService FileService
|
||||
}
|
||||
|
||||
// NewBuildService создает новый экземпляр сервиса сборки
|
||||
func NewBuildService(
|
||||
cfg *config.Config,
|
||||
log logger.Logger,
|
||||
git GitService,
|
||||
quartz QuartzService,
|
||||
files FileService,
|
||||
) BuildService {
|
||||
return &buildServiceImpl{
|
||||
config: cfg,
|
||||
logger: log,
|
||||
gitService: git,
|
||||
quartzService: quartz,
|
||||
fileService: files,
|
||||
}
|
||||
}
|
||||
|
||||
// BuildSite выполняет полную сборку сайта
|
||||
func (b *buildServiceImpl) BuildSite() BuildResult {
|
||||
b.logger.Info("Starting site build process...")
|
||||
|
||||
// Проверяем существование репозитория
|
||||
if !b.gitService.IsRepositoryExists() {
|
||||
b.logger.Error("Repository not found")
|
||||
return BuildResult{
|
||||
Success: false,
|
||||
Message: "Repository not found",
|
||||
Error: "Git repository does not exist at specified path",
|
||||
}
|
||||
}
|
||||
|
||||
// Обновляем репозиторий
|
||||
if err := b.gitService.UpdateRepository(); err != nil {
|
||||
b.logger.Errorf("Failed to update repository: %v", err)
|
||||
return BuildResult{
|
||||
Success: false,
|
||||
Message: "Failed to update repository",
|
||||
Error: err.Error(),
|
||||
}
|
||||
}
|
||||
|
||||
// Собираем сайт с помощью Quartz
|
||||
if err := b.quartzService.BuildSite(); err != nil {
|
||||
b.logger.Errorf("Failed to build Quartz site: %v", err)
|
||||
return BuildResult{
|
||||
Success: false,
|
||||
Message: "Failed to build Quartz site",
|
||||
Error: err.Error(),
|
||||
}
|
||||
}
|
||||
|
||||
// Копируем собранные файлы в публичную директорию
|
||||
if err := b.fileService.CopyBuiltSite(); err != nil {
|
||||
b.logger.Errorf("Failed to copy built site: %v", err)
|
||||
return BuildResult{
|
||||
Success: false,
|
||||
Message: "Failed to copy built site",
|
||||
Error: err.Error(),
|
||||
}
|
||||
}
|
||||
|
||||
b.logger.Info("Site built successfully!")
|
||||
return BuildResult{
|
||||
Success: true,
|
||||
Message: "Site built successfully",
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user