Функция: реализованы консольный логгер и презентер для обработки аудиокниг
- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли. - Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль. - Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов. - Реализована проверка LLM для улучшения метаданных. - Добавлена обработка ошибок и логирование на всех этапах обработки.
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
// Package domain определяет порты (интерфейсы), через которые usecase-слой
|
||||
// взаимодействует с инфраструктурой. Зависимость направлена внутрь — инфраструктура
|
||||
// реализует эти интерфейсы, а usecase зависит только от абстракций.
|
||||
package domain
|
||||
|
||||
import "context"
|
||||
|
||||
// FolderLister возвращает список подпапок (потенциальных аудиокниг) в корневой директории.
|
||||
type FolderLister interface {
|
||||
ListSubfolders(ctx context.Context, root string) ([]string, error)
|
||||
}
|
||||
|
||||
// MetadataExtractor извлекает метаданные из первого аудиофайла в указанной папке.
|
||||
type MetadataExtractor interface {
|
||||
Extract(ctx context.Context, folderPath string) (*AudioBookInfo, error)
|
||||
}
|
||||
|
||||
// TorrentSearcher ищет аудиокнигу по всем трекерам через TorrAPI.
|
||||
type TorrentSearcher interface {
|
||||
// SearchByTitle делает первый запрос: поиск по названию.
|
||||
SearchByTitle(ctx context.Context, author, album string, year int) (map[TrackerName][]TorrentSearchResult, error)
|
||||
// SearchByQuery делает поиск по произвольной строке query.
|
||||
SearchByQuery(ctx context.Context, query string) (map[TrackerName][]TorrentSearchResult, error)
|
||||
// GetDetailByID делает второй запрос: детали раздачи по ID трекера.
|
||||
GetDetailByID(ctx context.Context, tracker TrackerName, id string) (*TorrentDetail, error)
|
||||
}
|
||||
|
||||
// ResultWriter создаёт папку результата, пишет metadata.json, переносит файлы.
|
||||
type ResultWriter interface {
|
||||
// WriteResult создаёт структуру папок, metadata.json и перемещает аудиофайлы.
|
||||
WriteResult(ctx context.Context, book *EnrichedBookInfo, resultRoot string) (string, error)
|
||||
}
|
||||
|
||||
// CoverDownloader скачивает обложку по URL и сохраняет в указанную папку.
|
||||
type CoverDownloader interface {
|
||||
Download(ctx context.Context, url string, destFolder string) error
|
||||
}
|
||||
|
||||
// LLMClient предоставляет доступ к Large Language Model через API.
|
||||
type LLMClient interface {
|
||||
// GenerateCompletion отправляет запрос к LLM и возвращает сгенерированный текст.
|
||||
GenerateCompletion(ctx context.Context, req *LLMRequest) (*LLMResponse, error)
|
||||
}
|
||||
|
||||
// Presenter отвечает за отображение результатов пользователю.
|
||||
type Presenter interface {
|
||||
RenderResults(results []ScanResult)
|
||||
RenderProcessResults(results []ProcessResult)
|
||||
}
|
||||
|
||||
// ProcessLogger логирует процесс обработки аудиокниг.
|
||||
type ProcessLogger interface {
|
||||
// LogStart логирует начало обработки книги.
|
||||
LogStart(folderName string)
|
||||
// LogExtraction логирует этап извлечения метаданных.
|
||||
LogExtraction()
|
||||
// LogLLMValidation логирует этап валидации через LLM.
|
||||
LogLLMValidation()
|
||||
// LogSearch логирует этап поиска на трекерах.
|
||||
LogSearch()
|
||||
// LogWrite логирует этап записи результата.
|
||||
LogWrite()
|
||||
// LogCoverDownload логирует этап скачивания обложки.
|
||||
LogCoverDownload()
|
||||
// LogComplete логирует успешное завершение обработки книги.
|
||||
LogComplete(folderName string)
|
||||
// LogError логирует ошибку обработки.
|
||||
LogError(folderName string, err error)
|
||||
// LogWarning логирует предупреждение.
|
||||
LogWarning(message string)
|
||||
// Finish завершает работу логгера (например, прогресс-бара).
|
||||
Finish()
|
||||
}
|
||||
Reference in New Issue
Block a user