Необходимо форкнуть данный репозиторий и все работы проводить в собственном форке.
Необходимо устновить зависимости и настроить базу данных:
python3 -m venv venv
pip install -e .
sudo -u postgres psql -c "CREATE USER att_user WITH PASSWORD 'att_pass';"
sudo -u postgres psql -c "CREATE DATABASE att_db WITH OWNER = att_user;"
sudo -u postgres psql -c "CREATE EXTENSION btree_gist;" att_db
sudo -u postgres psql -c "CREATE EXTENSION pgcrypto;" att_db
alembic upgrade head
Затем можно запустить веб-сервер:
att-server --db-url=postgres://att_user:att_pass@localhost/att_db
и попробовать сделать запрос к нему:
curl http://localhost:8000/login -H 'Content-Type: application/json' -d '{"login": "bob", "password": "secrets"}'
Если в результате получен ответ вроде
{"user_id": "ff73cccd-dd14-4eb7-8aa8-7059f26239b8"}
значит всё работает.
Все изменения необходимо оформить отдельными коммитами.
- Добавить опцию для указания интерфейса и порта, на котором будет работать
вебсервер (например
--listen 0.0.0.0:8080
). - Вынести функции обработки запросов (
login
,user_groups
и т.д) в отдельный модуль. - Добавить метод для добавления пользователя (
/signup
). - Написать юнит-тест для функции
make_login_response
используяpytest
. - Добавить таблицы для групп пользователей и связи пользователей с группами (пользователь может входить сразу в несклько групп), создать скрипт миграции при помощи
alembic revision --autogenerate -m "Added group table"
. - Добавить методы для работы с группами: создание групп, добавление и удаление пользователя из групп.
- Добавить метод для получения сообщений пользователем по WebSocket'ам (
/listen/{user_id}
), для проверки этого метода можно использовать wscat (wscat --connect ws://localhost:8000/listen/ff73cccd-dd14...
) или его аналог. - Добавить ответный метод
/broadcast/{group}
, который будет рассылать сообщение (JSON объект) всем подключеным в данный момент пользователям из конкретной группы.
Дополнительные юнит и интеграционные тесты будут плюсом (для интеграционных тестов можно использовать pytest-postgresql).
Для получения обратной связи нужно сделать пулл реквест в данный репозиторий.