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

86 lines
2.5 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 (
"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
}