Files
GenAudioBookInfo/internal/domain/ports.go
Dmitriy Fofanov 41fb62f62e Добавлены страницы вики для GenAudioBookInfo: Home, Installation, Makefile, OpenRouter, Output Structure, TorrAPI и Sidebar.
Создана структура документации, описывающая функциональность, установку, использование CLI, архитектуру и интеграции с TorrAPI и OpenRouter.
Добавлены примеры конфигурации и метаданных, а также описание структуры выходных данных.
2026-02-23 13:19:39 +03:00

76 lines
4.0 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 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)
// LogInfo логирует информационное сообщение (штатное событие).
LogInfo(message string)
// Finish завершает работу логгера (например, прогресс-бара).
Finish()
}