Files
go-webhook/internal/services/build.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

89 lines
2.3 KiB
Go
Raw 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.

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",
}
}