# GenAudioBookInfo [![](https://img.shields.io/badge/Go-1.23+-00ADD8?logo=go)](https://go.dev "Go version") [![](https://img.shields.io/gitea/v/release/fofanov/genaudiobookinfo?gitea_url=https://github.dfv24.com&label=release)](https://github.dfv24.com/fofanov/genaudiobookinfo/releases/latest "Latest release") [![](https://img.shields.io/gitea/last-commit/fofanov/genaudiobookinfo?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov/genaudiobookinfo/commits/branch/main "Last Commit") [![](https://img.shields.io/gitea/issues/open/fofanov/genaudiobookinfo?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov/genaudiobookinfo/issues "Open Issues") [![](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) — чтение метаданных аудиофайлов