Логика API профилей, в которых пользователи выбирают приглашения других пользователей.
Авторизованные пользователи могут заходить в свой профиль, в котором отображается информация:
- личный пригласительный шести значный код (invite-code)
- поле для ввода кода другого участника (отображается либо пустое поле, либо активированный invite-code)
- список других участников, активировавших код пользователя (их номера телефонов)
Пользователь может активировать код другого участника только один раз, таким образом, выбрать одного участника (проголосовать).
Голосовать (выбирать приглашение) самого себя нельзя.
Авторизация для входа в профиль проходит по номеру телефона в формате <9991234567>.
В ответ приходит четырех значный код, который необходимо ввести для получения токена.
Если номера телефона нет в базе - он сохраняется, создается новый пользователь, его профиль и присваивается invite-code;
если есть - выдается новый код для получения токена.
Пароль не вводится, используется код и выдача по нему токена.
- Python 3.11.2
- Django 4.2.4
- DjangoRestFramework 3.14.0
- Djangorestframework-simplejwt 5.3.0
- Postgres 15.1
- Docker
Клонировать проект с GitHub
git clone https://github.com/mikepavlos/users_voting.git
Перейти в папку inviting_app, переименовать файл с переменными окружения .env.example в .env
и заполнить его своими значениями.
Запустить кнтейнеры Docker
docker compose up -d --build
/docs - swagger
/redoc - redoc
POST /api/auth/signup - для подачи номера телефона в 10-ти значном формате / возвращает 4-значный код.
POST /api/auth/login - передача полученного 4-ти значного кода для авторизации / возвращает токен.
GET /api/v1/profiles/me - личный профиль пользователя с информацией.
POST /api/v1/profiles/me - ввод 6-ти значного инвайт-кода другого участника / возвращает обновленную информацию профиля с добавленным кодом участника.
GET-запрос на получение всех профилей api/v1/profiles доступен только администратору.
Михаил Павлов
telegram https://t.me/miha1is
GitHub https://github.com/mikepavlos
email mike_pavlovsky@hotmail.com
Pytest контейнер для тестирования эндпоинтов