https://github.com/owner-maker/music-playlist
https://github.com/owner-maker/music-playlist
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/owner-maker/music-playlist
- Owner: Owner-maker
- Created: 2023-08-11T15:38:15.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-07T12:20:07.000Z (about 2 years ago)
- Last Synced: 2025-01-27T10:09:27.829Z (over 1 year ago)
- Language: Go
- Size: 27.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# music-playlist
### Часть 1. Разработка основного модуля работы с плейлистом
Требуется разработать модуль для обеспечения работы с плейлистом. Модуль должен обладать следующими возможностями:
- Play - начинает воспроизведение
- Pause - приостанавливает воспроизведение
- AddSong - добавляет в конец плейлиста песню
- Next воспроизвести след песню
- Prev воспроизвести предыдущую песню
#### Технические требования
- Должен быть описан четко определенный интерфейс для взаимодействия с плейлистом
- Плейлист должен быть реализован с использованием двусвязного списка.
- Каждая песня в плейлисте должна иметь свойство Duration.
- Воспроизведение песни не должно блокировать методы управления.
- Метод воспроизведения должен начать воспроизведение с длительностью, ограниченной свойством Duration песни. Воспроизведение должно эмулироваться длительной операцией.
- Следующая песня должна воспроизводиться автоматически после окончания текущей песни.
- Метод Pause должен приостановить текущее воспроизведение, и когда воспроизведение вызывается снова, оно должно продолжаться с момента паузы.
- Метод AddSong должен добавить новую песню в конец списка.
- Вызов метода Next должен начать воспроизведение следующей песни. Таким образом текущее
- Воспроизведение должно быть остановлено и начато воспроизведение следующей песни
- Вызов метода Prev должен остановить текущее воспроизведение и начать воспроизведение предыдущей песни.
- Реализация метода AddSong должна проводиться с учетом одновременного, конкурентного доступа.
- Следует учитывать, что воспроизведение может быть остановлено извне
- Реализация методов Next/Prev должна проводиться с учетом одновременного, конкурентного доступа.
- Примечание: Все реализации должны быть тщательно протестированы и оптимизированы с точки зрения производительности.
### Часть 2: Построение API для музыкального плейлиста
Реализовать сервис, который позволит управлять музыкальным плейлистом. Доступ к сервису должен осуществляться с помощью API, который имеет возможность выполнять CRUD операции с песнями в плейлисте, а также воспроизводить, приостанавливать, переходить к следующему и предыдущему трекам.
Конфигурация может храниться в любом источнике данных, будь то файл на диске, либо база данных. Для удобства интеграции с сервисом может быть реализована клиентская библиотека.
### Технические требования
* реализация задания может быть выполнена на любом языке программирования
* сервис должен обеспечивать персистентность данных
* сервис должен поддерживать все CRUD операции
* удалять трек допускается только если он не воспроизводится в данный момент
* API должен иметь необходимые методы для взаимодействия с плейлистом.
* API должен возвращать значимые коды ошибок и сообщения в случае ошибок.
### Будет здорово, если:
* в качестве протокола взаимодействия сервиса с клиентами будете использовать gRPC
* напишите Dockerfile и docker-compose.yml
* покроете проект unit-тестами
* сделаете тестовый пример использования написанного сервиса
TODO:
- добавить логгирование +
- добавить транзактор? -
- реализовать репо (скачивание, сохранение в файл) +
- реализовать контракт
- реализовать сервис
- написать юнит - тесты