Files
compress/internal/usecase/compress_pdf.go
Dmitriy Fofanov ec65cfd05a Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
2025-11-05 09:33:12 +03:00

74 lines
2.3 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 usecases
import (
"fmt"
"path/filepath"
"compressor/internal/domain/entities"
"compressor/internal/domain/repositories"
)
// CompressPDFUseCase сценарий сжатия одного PDF файла
type CompressPDFUseCase struct {
compressor repositories.PDFCompressor
fileRepo repositories.FileRepository
configRepo repositories.ConfigRepository
}
// NewCompressPDFUseCase создает новый сценарий сжатия PDF
func NewCompressPDFUseCase(
compressor repositories.PDFCompressor,
fileRepo repositories.FileRepository,
configRepo repositories.ConfigRepository,
) *CompressPDFUseCase {
return &CompressPDFUseCase{
compressor: compressor,
fileRepo: fileRepo,
configRepo: configRepo,
}
}
// Execute выполняет сжатие PDF файла
func (uc *CompressPDFUseCase) Execute(inputPath string, outputPath string, compressionLevel int) (*entities.CompressionResult, error) {
// Проверяем существование входного файла
if !uc.fileRepo.FileExists(inputPath) {
return nil, entities.ErrFileNotFound
}
// Получаем информацию о файле
fileInfo, err := uc.fileRepo.GetFileInfo(inputPath)
if err != nil {
return nil, fmt.Errorf("ошибка получения информации о файле: %w", err)
}
// Создаем конфигурацию сжатия
config, err := uc.configRepo.GetCompressionConfig(compressionLevel)
if err != nil {
return nil, fmt.Errorf("ошибка создания конфигурации: %w", err)
}
// Валидируем конфигурацию
if err := uc.configRepo.ValidateConfig(config); err != nil {
return nil, fmt.Errorf("ошибка валидации конфигурации: %w", err)
}
// Генерируем имя выходного файла, если не указано
if outputPath == "" {
ext := filepath.Ext(inputPath)
base := inputPath[:len(inputPath)-len(ext)]
outputPath = base + "_compressed" + ext
}
// Выполняем сжатие
result, err := uc.compressor.Compress(inputPath, outputPath, config)
if err != nil {
return nil, fmt.Errorf("ошибка сжатия файла: %w", err)
}
// Устанавливаем исходный размер
result.OriginalSize = fileInfo.Size
result.CalculateCompressionRatio()
return result, nil
}