Разработка компонента обмена сообщениями в образовательном сервисе

Цена договорная • наличный расчёт, безналичный расчёт, электронные деньги
03 августа 2014, 08:44 • 3 отклика • 67 просмотров
Лучше читать описание из документа в аттаче или из ссылки: https://docs.google.com/document/d/1urku87ln_eL5Hr..., а то разметка при копировании плывет.

Итак:
Мы разрабатываем рекомендательную систему для персонализированного изучения английского языка.

Нам нужно допроектировать, реализовать и интегрировать компонент обмена мгновенными сообщениями в сервис.

Данный компонент предназначен для предоставления возможности обмена сообщениями между пользователями системы (студенты и эксперты). Также данный компонент отвечает за уведомление участников бесед об обновлениях (необходимо добавить поддержку push нотификаций).


Сценарии использования компонента:
Conversation use cases.png
Студент (Student) может через API (REST) управлять (CRUD) беседами (Conversation) и писать сообщения (Message) в беседы, в которых является участником (Participant).

Эксперт (Expert) может через админку Django (веб интерфейс) управлять и участвовать в беседах.

Компонент может уведомлять участников (Participant) беседы о новых сообщениях черех push-уведомления и e-mail уведомления.

Компонент должен предоставлять сторонним компонентам системы интерфейсы для управления беседами: методы для инициирования бесед и уведомления инициировавших компонентов об ответах (возможность навесить обработчик на новые сообщения от студента в беседе).

Грубая диаграмма классов ключевых объектов:
Conversation Component Class Diagram.png

Ключевые задачи по компоненту:

  • разработать интерфейс взаимодействия студента на клиентском приложении и компонента обмена сообщениями

    • сюда включается спецификация API для разработчиков клиентского приложения. Спецификация должна описать:


      • как клиентское приложение может получить представление активных/завершенных или всех бесед студента.

      • как клиентское приложение может отправить сообщение в существующую беседу

      • как клиенсткое приложение может начать новую беседу

      • как клиентское приложение может завершить беседу




  • реализация вышеописанного API

  • реализация push-уведомлений

  • обеспечить взаимодействие системы обмена сообщениями с экспертами через веб интерфейс админки. Сюда входят:

    • реализация чата (view в админке динамически представляющий беседу и позволяющий эксперту участвовать в ней со студентами)


      • отправка сообщений без перезагрузки страницы

      • возможность завершения беседы

      • управление участниками беседы

      • получение новых сообщений в чат без необходимости перезагрузки страницы (желательно)

      • возможность быстрого переключения между недавними чатами запущенными экспертом



  • изменение шаблона редактирования деталей студента в админке, чтобы с этой страницы эксперт имел возможность

    • просмотреть текущие (и завершенные) беседы студента (беседы в которых он является участником)

    • перейти в чат существующей беседы

    • инициировать новую беседу со студентом


  • задокументировать публичные методы компонента, с помощью которых сторонние компоненты серверного приложения

    • смогут инициировать новую беседу со студентом, написав сообщение

    • смогут писать сообщения в существующие беседы

    • будут уведомлены о получении ответа (путем вызова обработчика ответа)



  • Требования:

    • Ubuntu/Linux, virtualenv, git, nginx

    • python, Django, Tastypie REST API, South, Django-admin (нужна кастомизация админки, Generic Relations, ManyToMany Relations), gevent

    • большим плюсолм будет опыт разработки систем обмена сообщениями для мобильных устройств


    Личностные требования: организованность, пунктуальность, инициативность, умение писать читаемый и понятно документированный код
    Файлы