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