# GenAudioBookInfo [![](https://goreportcard.com/badge/github.dfv24.com/fofanov/genaudiobookinfo)](https://goreportcard.com/report/github.dfv24.com/fofanov/genaudiobookinfo "Go Report Card") [![](https://pkg.go.dev/badge/github.dfv24.com/fofanov/genaudiobookinfo?status.svg)](https://pkg.go.dev/github.dfv24.com/fofanov/genaudiobookinfo "GoDoc") [![](https://img.shields.io/github/release/fofanov/genaudiobookinfo.svg)](https://github.dfv24.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) — чтение метаданных аудиофайлов