Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке. - Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell. - Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash. - Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ. - Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок. - Добавлена поддержка переменных окружения и управления конфигурацией. - Добавлена функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
73
internal/usecase/compress_pdf.go
Normal file
73
internal/usecase/compress_pdf.go
Normal file
@@ -0,0 +1,73 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user