Веб-приложение, соединяющее пользователя с другими в анонимном чате, подбирая собеседника по предпочтениям и данных о пользователях.
Модели имеют в каком-то смысле иерархическую структуру из-за сложности представления данных о пользователях. CustomUser ссылается с помощью ForeignKey на UserInfo и UserPrefs, которые в свою очередь ссылаются на таблицы типа Personality, описывающие черты характера пользователя.
Используется Django Rest Framework в совокупности с продвинутыми сериализаторами, которым приходится иметь дело с nested структурой моделей. Создавая новый объект пользователя, приходится создавать объекты нижнего уровня вместе с этим.
Вычисление процента совместимости пользователей происходит с помощью мною разработанного алгоритма, который можно посмотреть в chat/tools/prefAlgorith.py. Там есть два класса, один из которых проверяет, подходят ли пользователи друг другу, а второй считает, насколько они друг другу подходят.
Соединение и поиск пользователей происходит с помощью WebsocketConsumer. Первый из них используется для создания отдельной комнаты для пользователя, где он находится в режиме ожидания. Второй - непосредственно для разговора двух подходящих пользователей.
В режиме разработке приложение stats, которое собирает информацию о сеансах пользователей, которое принимает celery задачи от основного приложения, передающего информацию.
Система авторизации построена на jwt токенах. Аутентификация юзера требуется при его попытке изменить информацию в своем профиле.
Простой веб-интерфейс на React, позволяющий пользователю пользоваться приложением двумя способами:
-
Просто указать информацию о себе и приступить к поиску. Информация сохраняется в localStorage и заполняется при перезагрузке страницы.
-
Если пользователь не хочет терять информацию о себе, он может зарегистрироваться и заполнить профиль, всегда имея доступ к нему.