1
1

Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.

- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы.
- Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов.
- Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов.
- Добавить тесты для нормализации URL в репозиторий RuTracker.
- Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер.
- Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
This commit is contained in:
Dmitriy Fofanov
2025-09-29 20:40:05 +03:00
parent 49bea780aa
commit 72a66f1664
32 changed files with 4073 additions and 22 deletions

View File

@@ -0,0 +1,21 @@
package repositories
import "audio-catalyst/internal/domain/entities"
// AudioBookRepository интерфейс для работы с аудиокнигами
type AudioBookRepository interface {
// ScanDirectory сканирует директорию на наличие аудиокниг
ScanDirectory(rootDir string) ([]entities.AudioBook, error)
// SaveMetadata сохраняет метаданные аудиокниги
SaveMetadata(bookPath string, metadata *entities.AudioBookMetadata) error
// DownloadCover загружает обложку по URL
DownloadCover(coverURL, bookPath string) error
// RenameBookFolder переименовывает папку аудиокниги
RenameBookFolder(oldPath, newBaseName string) (string, error)
// OrganizeBookFolder перемещает папку книги в библиотеку organized: <root>/<Letter>/<Author>/<Book>
OrganizeBookFolder(bookPath, authorFullName, targetRoot string) (string, error)
}

View File

@@ -0,0 +1,12 @@
package repositories
import "audio-catalyst/internal/domain/entities"
// ConfigRepository интерфейс для работы с конфигурацией
type ConfigRepository interface {
// Load загружает конфигурацию из файла
Load(filename string) (*entities.Config, error)
// Save сохраняет конфигурацию в файл
Save(filename string, config *entities.Config) error
}

View File

@@ -0,0 +1,10 @@
package repositories
// Logger интерфейс для логирования
type Logger interface {
Info(format string, args ...interface{})
Debug(format string, args ...interface{})
Warning(format string, args ...interface{})
Error(format string, args ...interface{})
Success(format string, args ...interface{})
}

View File

@@ -0,0 +1,21 @@
package repositories
import "audio-catalyst/internal/domain/entities"
// RuTrackerRepository интерфейс для работы с RuTracker
type RuTrackerRepository interface {
// Login выполняет авторизацию
Login() error
// Search выполняет поиск торрентов
Search(query string, page int) ([]entities.Torrent, error)
// GetTopicMetadata получает метаданные со страницы темы
GetTopicMetadata(topicID string) (*entities.RuTrackerResult, error)
// DownloadTorrent скачивает торрент файл
DownloadTorrent(topicID string) ([]byte, error)
// Close закрывает соединение
Close()
}