- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
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",
|
||
}
|
||
}
|