Функция: реализованы консольный логгер и презентер для обработки аудиокниг

- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли.

- Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль.

- Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов.

- Реализована проверка LLM для улучшения метаданных.

- Добавлена ​​обработка ошибок и логирование на всех этапах обработки.
This commit is contained in:
Dmitriy Fofanov
2026-02-20 00:35:43 +03:00
parent 7d119927a1
commit 402ce7f4f1
26 changed files with 4323 additions and 0 deletions
+70
View File
@@ -1,2 +1,72 @@
# GenAudioBookInfo
[![](https://goreportcard.com/badge/github.com/fofanov/genaudiobookinfo)](https://goreportcard.com/report/github.com/fofanov/genaudiobookinfo "Go Report Card")
[![](https://pkg.go.dev/badge/github.com/fofanov/genaudiobookinfo?status.svg)](https://pkg.go.dev/github.com/fofanov/genaudiobookinfo "GoDoc")
[![](https://img.shields.io/github/release/fofanov/genaudiobookinfo.svg)](https://github.com/fofanov/genaudiobookinfo/releases/latest "GitHub release")
[![](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT "License: MIT")
Консольная утилита на Go для сканирования каталогов с аудиокнигами и извлечения метаданных (название, автор, жанр, описание, обложка и т.д.) из аудиофайлов.
## Архитектура
Проект построен по принципам **Clean Architecture**:
```
cmd/
genaudiobookinfo/
main.go ← Composition Root (точка входа, DI)
internal/
domain/
audiobook.go ← Сущности (entities)
ports.go ← Интерфейсы-порты (FolderLister, MetadataExtractor, Presenter)
usecase/
scan_audiobooks.go ← Бизнес-логика (Fan-Out / Fan-In, Worker Pool)
infrastructure/
folder_lister.go ← Реализация FolderLister (файловая система)
metadata_extractor.go ← Реализация MetadataExtractor (dhowden/tag)
audio_utils.go ← Утилиты (определение аудиоформатов)
presentation/
console_presenter.go ← Реализация Presenter (форматированный вывод)
```
### Паттерны
| Паттерн | Где применяется |
|---|---|
| **Clean Architecture** | Разделение на domain / usecase / infrastructure / presentation |
| **Dependency Injection** | Конструкторы принимают интерфейсы, Composition Root в `main.go` |
| **Ports & Adapters** | `domain/ports.go` — порты; infrastructure и presentation — адаптеры |
| **Fan-Out / Fan-In** | `usecase/scan_audiobooks.go` — параллельное сканирование через каналы |
| **Worker Pool** | Настраиваемое количество горутин-воркеров |
| **Graceful Shutdown** | Обработка SIGINT/SIGTERM через `context.Context` |
## Сборка
```bash
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo/
```
## Использование
```bash
# Сканировать каталог с аудиокнигами
genaudiobookinfo.exe D:\Audiobooks
# Указать количество воркеров
genaudiobookinfo.exe -workers 8 D:\Audiobooks
# Установить таймаут
genaudiobookinfo.exe -timeout 60s D:\Audiobooks
```
## Поддерживаемые форматы
MP3, M4A, M4B, OGG, OPUS, FLAC, WMA, AAC, WAV
## Зависимости
- [dhowden/tag](https://github.com/dhowden/tag) — чтение метаданных аудиофайлов