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

79 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"
)
// 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
}