- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы. - Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов. - Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов. - Добавить тесты для нормализации URL в репозиторий RuTracker. - Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер. - Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"audio-catalyst/internal/domain/entities"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Repository реализация ConfigRepository
|
|
type Repository struct{}
|
|
|
|
// NewRepository создает новый репозиторий конфигурации
|
|
func NewRepository() *Repository {
|
|
return &Repository{}
|
|
}
|
|
|
|
// Load загружает конфигурацию из файла
|
|
func (r *Repository) Load(filename string) (*entities.Config, error) {
|
|
data, err := os.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("не удалось прочитать файл конфигурации: %w", err)
|
|
}
|
|
|
|
var config entities.Config
|
|
if err := yaml.Unmarshal(data, &config); err != nil {
|
|
return nil, fmt.Errorf("не удалось разобрать конфигурацию: %w", err)
|
|
}
|
|
|
|
return &config, nil
|
|
}
|
|
|
|
// Save сохраняет конфигурацию в файл
|
|
func (r *Repository) Save(filename string, config *entities.Config) error {
|
|
data, err := yaml.Marshal(config)
|
|
if err != nil {
|
|
return fmt.Errorf("не удалось сериализовать конфигурацию: %w", err)
|
|
}
|
|
|
|
if err := os.WriteFile(filename, data, 0644); err != nil {
|
|
return fmt.Errorf("не удалось записать файл конфигурации: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|