JFAexe / GoCloudCamp-Test

GoCloudCamp test assignment

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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-тестами
  • сделаете тестовый пример использования написанного сервиса

About

GoCloudCamp test assignment


Languages

Language:Go 98.8%Language:Dockerfile 0.7%Language:Shell 0.5%