refactor: разделение кода на пакеты и улучшение архитектуры
- Создана новая структура проекта с разделением на пакеты - Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build) - Реализован Dependency Injection для сервисов - Добавлены middleware для логирования, Request ID и Response Time - Создан пакет конфигурации с валидацией - Улучшено логирование через интерфейс - Добавлены обработчики HTTP в отдельных пакетах - Создана структура для тестирования - Добавлены конфигурационные файлы и документация
This commit is contained in:
85
internal/services/quartz.go
Normal file
85
internal/services/quartz.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user