Giter Club home page Giter Club logo

playlist's Introduction

RPC-сервис для взаимодействия с плейлистами

Ссылка на тз: https://github.com/gocloudcamp/test-assignment

Технический стек

Python/asyncio, Grpc, DI, SQLAlchemy (PostgreSQL), Docker / docker-compose, pytest.

Основное

Реализовано:

  1. Базовый CRUD по плейлистами.
  2. Базовый CRUD по трекам плейлистов.
  3. Имеется возможность взаимодействовать с несколькими плейлистами одновременно.
  4. Play, Pause, Next, Prev методы управления плейлистом.
  5. Протестированы бизнес-сценарии и их краевые случаи (из технических требований).
  6. В качестве протокола взаимодействия сервиса с клиентами используется GRPC. Обработаны все ошибки.
  7. Развёрнут в docker-контейнере (запуск под заголовком "Развёртывание").

Когда плейлист проигрывается он находится в памяти. Методы взаимодействия (Pause, Next, Prev) с плейлистом доступны только когда плейлист проигрывается. Кеш автоматически очищается, когда трек стоит на паузе больше N-секунд.

Вопроизведение эмулируется и переключение треков происходит с конца до начала, в порядке добавления (ассоциация с любым плеером: spotify, vk).

Архитектура:

Проект разделён на слои, все зависимости направлены внутрь. бизнес-логика не зависит от внешних сервисов. Вся предметная логика находится в сущности Playlist.

Связывание отдельных системных обработчиков происходит с помощью паттерна "Медиатор". Подстановка реализаций протоколов на grpc уровне происходит с помощью DI.

Развертывание

  1. Клонировать репозиторий.
~$ git clone https://github.com/neekrasov/playlist.git
  1. Создать файлы .env на примере корневой директории и директории /docker.
~$ mv .env.example .env && mv docker/.env.example docker/.env
  1. Поднять контейнеры.
~$ make compose-up
  1. Посмотреть запуск в логах
~$ make compose-logs

playlist's People

Contributors

neekrasov avatar

Stargazers

Aryan Iyappan avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.