Files
GenAudioBookInfo/README.md

73 lines
3.2 KiB
Markdown
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.
# 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) — чтение метаданных аудиофайлов