package services import ( "fmt" "os" "os/exec" "path/filepath" "go-webhook-server/internal/config" "go-webhook-server/pkg/logger" ) // QuartzService интерфейс для сборки Quartz сайта type QuartzService interface { BuildSite() error InstallDependencies() error } // quartzServiceImpl реализация Quartz сервиса type quartzServiceImpl struct { config *config.Config logger logger.Logger } // NewQuartzService создает новый экземпляр Quartz сервиса func NewQuartzService(cfg *config.Config, log logger.Logger) QuartzService { return &quartzServiceImpl{ config: cfg, logger: log, } } // BuildSite собирает сайт с помощью Quartz func (q *quartzServiceImpl) BuildSite() error { q.logger.Info("Building site with Quartz...") // Проверяем существование package.json в директории Quartz packageJSONPath := filepath.Join(q.config.Paths.Quartz, "package.json") if _, err := os.Stat(packageJSONPath); os.IsNotExist(err) { return fmt.Errorf("package.json not found in Quartz directory: %s", q.config.Paths.Quartz) } // Устанавливаем зависимости если необходимо if err := q.InstallDependencies(); err != nil { return fmt.Errorf("failed to install dependencies: %w", err) } // Выполняем сборку Quartz cmd := exec.Command("npm", "run", "quartz", "build", "--", "-d", q.config.Paths.Obsidian) cmd.Dir = q.config.Paths.Quartz cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr q.logger.Info("Executing Quartz build command...") if err := cmd.Run(); err != nil { return fmt.Errorf("failed to build Quartz site: %w", err) } q.logger.Info("Quartz build completed successfully") return nil } // InstallDependencies устанавливает npm зависимости func (q *quartzServiceImpl) InstallDependencies() error { // Проверяем существование node_modules nodeModulesPath := filepath.Join(q.config.Paths.Quartz, "node_modules") if _, err := os.Stat(nodeModulesPath); os.IsNotExist(err) { q.logger.Info("Installing npm dependencies...") cmd := exec.Command("npm", "install") cmd.Dir = q.config.Paths.Quartz cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("failed to install npm dependencies: %w", err) } q.logger.Info("npm dependencies installed successfully") } else { q.logger.Debug("node_modules already exists, skipping npm install") } return nil }