package services import ( "fmt" "os" "os/exec" "path/filepath" "go-webhook-server/internal/config" "go-webhook-server/pkg/logger" ) // FileService интерфейс для файловых операций type FileService interface { CopyBuiltSite() error ClearPublicDirectory() error EnsurePublicDirectory() error } // fileServiceImpl реализация файлового сервиса type fileServiceImpl struct { config *config.Config logger logger.Logger } // NewFileService создает новый экземпляр файлового сервиса func NewFileService(cfg *config.Config, log logger.Logger) FileService { return &fileServiceImpl{ config: cfg, logger: log, } } // CopyBuiltSite копирует собранные файлы в публичную директорию func (f *fileServiceImpl) CopyBuiltSite() error { f.logger.Info("Copying built site to public directory...") // Очищаем публичную директорию if err := f.ClearPublicDirectory(); err != nil { return fmt.Errorf("failed to clear public directory: %w", err) } // Создаем публичную директорию заново if err := f.EnsurePublicDirectory(); err != nil { return fmt.Errorf("failed to create public directory: %w", err) } // Проверяем существование директории с собранными файлами quartzPublicPath := filepath.Join(f.config.Paths.Quartz, "public") if _, err := os.Stat(quartzPublicPath); os.IsNotExist(err) { return fmt.Errorf("Quartz public directory not found: %s", quartzPublicPath) } // Копируем файлы с помощью cp команды cmd := exec.Command("cp", "-r", quartzPublicPath+"/.", f.config.Paths.Public+"/") if err := cmd.Run(); err != nil { return fmt.Errorf("failed to copy built site: %w", err) } f.logger.Info("Site files copied successfully") return nil } // ClearPublicDirectory очищает публичную директорию func (f *fileServiceImpl) ClearPublicDirectory() error { if err := os.RemoveAll(f.config.Paths.Public); err != nil { return fmt.Errorf("failed to clear public directory: %w", err) } return nil } // EnsurePublicDirectory создает публичную директорию если она не существует func (f *fileServiceImpl) EnsurePublicDirectory() error { if err := os.MkdirAll(f.config.Paths.Public, 0755); err != nil { return fmt.Errorf("failed to create public directory: %w", err) } return nil }