Ссылка на тз: https://github.com/gocloudcamp/test-assignment
Python/asyncio
, Grpc
, DI
, SQLAlchemy (PostgreSQL)
, Docker / docker-compose
, pytest
.
Реализовано:
- Базовый CRUD по плейлистами.
- Базовый CRUD по трекам плейлистов.
- Имеется возможность взаимодействовать с несколькими плейлистами одновременно.
- Play, Pause, Next, Prev методы управления плейлистом.
- Протестированы бизнес-сценарии и их краевые случаи (из технических требований).
- В качестве протокола взаимодействия сервиса с клиентами используется GRPC. Обработаны все ошибки.
- Развёрнут в docker-контейнере (запуск под заголовком "Развёртывание").
Когда плейлист проигрывается он находится в памяти. Методы взаимодействия (Pause, Next, Prev) с плейлистом доступны только когда плейлист проигрывается. Кеш автоматически очищается, когда трек стоит на паузе больше N-секунд.
Вопроизведение эмулируется и переключение треков происходит с конца до начала, в порядке добавления (ассоциация с любым плеером: spotify, vk).
Архитектура:
Проект разделён на слои, все зависимости направлены внутрь. бизнес-логика не зависит от внешних сервисов. Вся предметная логика находится в сущности Playlist.
Связывание отдельных системных обработчиков происходит с помощью паттерна "Медиатор". Подстановка реализаций протоколов на grpc уровне происходит с помощью DI.
- Клонировать репозиторий.
~$ git clone https://github.com/neekrasov/playlist.git
- Создать файлы .env на примере корневой директории и директории
/docker
.
~$ mv .env.example .env && mv docker/.env.example docker/.env
- Поднять контейнеры.
~$ make compose-up
- Посмотреть запуск в логах
~$ make compose-logs