Создал сервис для загрузки превью видео с поддержкой CLI и сервера на gRPC. Основной функционал: скачивание превью с видеохостингов, управление директориями сохранения и асинхронная загрузка для повышения производительности.
Технологический стек:
- Язык: Go 1.23.
- Хранилище: Redis.
- CLI: Cobra.
- Контейнеризация: Docker.
Основные функции:
- gRPC-сервер:
- Обрабатывает запросы на загрузку превью.
- Использует Redis для кеширования частых запросов.
- Возможность запуска сервера через Docker с помощью команды make start-server.
- CLI-утилита:
- Поддерживает интерактивный режим и команды для скачивания, изменения директории вывода и получения справки.
- Команда get [URLs...] загружает превью с переданных ссылок, поддерживая флаг --async для асинхронной загрузки.
- Команда output [outputDirectory] меняет папку сохранения; путь можно указать через конфиг (./config/cli/local.yaml).
- Предусмотрена защита от блокирующих ошибок, например, при недоступности YouTube.
Пример использования:
Особенности:
- Реализована базовая обработка ошибок. Например, если первая ссылка — YouTube, сервер прекратит обработку, но флаг --async позволяет избежать этого, загружая доступные видео.
- Хранение превью по умолчанию: ./downloads.
- Возможность настройки через YAML-конфиг.
Тестирование: Написаны юнит-тесты для ключевых компонентов: загрузчика файлов и извлечения ID из URL. Запуск тестов: make unit-test