API
Method | Path | Description | Json |
---|---|---|---|
GET | /ping |
Проверка на работоспособность | |
GET | /v1/playlist |
Возвращает список плейлистов | |
POST | /v1/playlist |
Создает новый плейлист | { "name": string, "songs": [ { "name": string, "duration": number } ] } |
GET | /v1/playlist/id |
Возвращает плейлист по id | |
DELETE | /v1/playlist/id |
Удаляет плейлист по id | |
PATCH | /v1/playlist/id/name |
Переименовывает плейлист по id | { "name": string } |
PATCH | /v1/playlist/id/time |
Перематывает плейлист по id | { "time": number } |
POST | /v1/playlist/id/launch |
Запускает плейлист в обработку | |
POST | /v1/playlist/id/stop |
Останавливает плейлист | |
POST | /v1/playlist/id/play |
Включает воспроизведение | |
POST | /v1/playlist/id/pause |
Ставит воспроизведение на паузу | |
POST | /v1/playlist/id/next |
Переключает на следующий трек | |
POST | /v1/playlist/id/prev |
Переключает на предыдущий трек | |
POST | /v1/playlist/id/song |
Добавляет треки в плейлист | [ { "name": string, "duration": number } ] |
PATCH | /v1/playlist/id/song/sid |
Изменяет трек по sid | { "name": string, "duration": number } |
DELETE | /v1/playlist/id/song/sid |
Удаляет трек по sid |
После создания плейлиста его надо запустить через launch
запрос, иначе использовать play/pause/next/prev
будет нельзя
Checklist
Часть 1
Модуль должен обладать следующими возможностями:
- Play - начинает воспроизведение
- Pause - приостанавливает воспроизведение
- AddSong - добавляет в конец плейлиста песню
- Next воспроизвести след песню
- Prev воспроизвести предыдущую песню
Технические требования:
- Должен быть описан четко определенный интерфейс для взаимодействия с плейлистом.
- Плейлист должен быть реализован с использованием двусвязного списка.
- Каждая песня в плейлисте должна иметь свойство Duration.
- Воспроизведение песни не должно блокировать методы управления.
- Метод воспроизведения должен начать воспроизведение с длительностью, ограниченной свойством Duration песни. Воспроизведение должно эмулироваться длительной операцией.
- Следующая песня должна воспроизводиться автоматически после окончания текущей песни.
- Метод Pause должен приостановить текущее воспроизведение, и когда воспроизведение вызывается снова, оно должно продолжаться с момента паузы.
- Метод AddSong должен добавить новую песню в конец списка.
- Вызов метода Next должен начать воспроизведение следущей песни. Таким образом текущее воспроизведение должно быть остановлено и начато воспроизведение следущей песни.
- Вызов метода Prev должен остановить текущее воспроизведение и начать воспроизведение предыдущей песни.
- Реализация метода AddSong должна проводиться с учетом одновременного, конкурентного доступа.
- Следует учитывать, что воспроизведение может быть остановлено извне.
- Реализация методов Next/Prev должна проводиться с учетом одновременного, конкурентного доступа.
Часть 2
Реализовать сервис, который позволит управлять музыкальным плейлистом:
- Доступ к сервису должен осуществляться с помощью API
- возможность выполнять CRUD операции с песнями в плейлисте.
- воспроизводить, приостанавливать, переходить к следующему и предыдущему трекам.
- Конфигурация может храниться в любом источнике данных, будь то файл на диске, либо база данных.
- Для удобства интеграции с сервисом может быть реализована клиентская библиотека.
Технические требования:
- реализация задания может быть выполнена на любом языке программирования.
- сервис должен обеспечивать персистентность данных.
- сервис должен поддерживать все CRUD операции.
- удалять трек допускается только если он не воспроизводится в данный момент.
- API должен иметь необходимые методы для взаимодействия с плейлистом.
- API должен возвращать значимые коды ошибок и сообщения в случае ошибок.
Дополнительно:
- в качестве протокола взаимодействия сервиса с клиентами будете использовать gRPC
- напишите Dockerfile и docker-compose.yml
- покроете проект unit-тестами
- сделаете тестовый пример использования написанного сервиса