API для управления пользователями и инвайт-кодами

Этот проект предоставляет API для управления пользователями, а также для работы с реферальными (инвайт) кодами. Он включает в себя возможность регистрации пользователей, авторизацию с использованием токенов, генерацию инвайт-кодов и их активацию, а также управление рефералами (пользователями, которые использовали инвайт-коды).

Функционал

API включает следующие ключевые функции:

Регистрация пользователя

Пользователь может зарегистрироваться, указав имя пользователя, номер телефона и пароль. После регистрации пользователю назначается уникальный токен для авторизации.

Авторизация

После регистрации или предоставления правильных данных для входа, пользователю возвращается токен авторизации. Генерация инвайт-кода При авторизации пользователя создается уникальный 6-значный инвайт-код, который может быть использован для приглашения других пользователей.

Активация инвайт-кода

Пользователь может активировать инвайт-код, введя его в соответствующем поле. При этом, пользователь, который вводит инвайт-код, добавляется в список рефералов пользователя, который его пригласил.

Получение списка рефералов

Пользователь может получить список всех рефералов (пользователей, которые использовали его инвайт-код).

Получение профиля пользователя

Профиль пользователя с отображением информации о нем, активированном инвайт-коде и рефералах.

Стек технологий

API построено с использованием следующих технологий:

Django — основной фреймворк для создания веб-приложений на Python.

Django REST Framework (DRF) — библиотека для построения RESTful API в Django.

SQLite / PostgreSQL — реляционная база данных для хранения данных о пользователях, инвайт-кодах и рефералах.

Django Auth — стандартная система аутентификации в Django для управления пользователями.

Django Rest Framework authtoken — для работы с токенами авторизации.

Python 3.10 — версия Python, на которой работает приложение.

Настройка и тестирование API

1. Сборка Docker образов

Перед тем как начать тестирование API, необходимо собрать Docker образы для вашего проекта. Для этого выполните следующие шаги:

  1. Перейдите в корневую директорию проекта.

  2. Соберите образы с помощью команды:

    $ docker-compose up --build
  3. Применение миграций

После того как образы собраны, примените миграции, чтобы создать все необходимые таблицы в базе данных:

$ docker-compose run backend python manage.py migrate
  1. Открытие коллекции запросов Postman

В проекте найдите директорию postman, в которой находится коллекция запросов.

Откройте файл коллекции в Postman.

Для этого откройте Postman, выберите File > Import, затем загрузите файл коллекции из директории postman.

  1. Запуск тестов

После того как коллекция запросов будет открыта, вы можете использовать её для тестирования API:

Выберите нужный запрос (например, для регистрации пользователя, логина, получения информации о профиле и т.д.).

Убедитесь, что вы добавили правильные данные в параметры запроса (например, номер телефона, пароль и т.д.).

Отправьте запросы и проверьте ответы на правильность.

Пример коллекции запросов:

1. Регистрация пользователя

POST /register/

  • Параметры запроса:

    • username (string) - Имя пользователя
    • phone_number (string) - Номер телефона (в формате +79239592010)
    • password (string) - Пароль
  • Успешный ответ:

    {
      "message": "User registered successfully"
    }
  • Ошибка (например, если пользователь уже существует):

    {
      "detail": "User already exists"
    }

2. Отправка кода для подтверждения номера телефона

POST /send_code/

  • Параметры запроса:

    • phone_number (string) - Номер телефона, на который будет отправлен код
  • Успешный ответ:

    {
      "auth_code": "1234"
    }
  • Ошибка (если номер телефона не найден):

    {
      "detail": "User not found"
    }
    

3. Вход в систему и получение токена

POST /verify_code/

  • Параметры запроса:

    • phone_number (string) - Номер телефона
    • auth_code (string) - Код подтверждения
  • Успешный ответ:

    {
      "message": "Verification successful",
      "token": "your_token_here"
    }
  • Ошибка (если неверные данные):

    {
      "detail": "Invalid credentials"
    }
    ```    ```
    
    

3. Вход в систему и получение токена

POST /login/

  • Параметры запроса:

    • your_token (string) - Ваш токен
  • Успешный ответ:

    {
      "message": "Verification successful",
      "invite_code": "your_invite_code"
    }
  • Ошибка (если неверные данные):

    {
      "detail": "Invite code already exists"
    }
    ```    ```
    

4. Получение информации о пользователе (профиль)

GET /profile/

  • Успешный ответ:

    {
      "user": {
        "username": "GGAA",
        "phone_number": "+79239592010",
        "referrals": [
          "+79239592011"
        ],
        "activated_invite_code": "EJJR3P"
      }
    }
  • Ошибка (если не авторизован):

    {
      "detail": "Authentication credentials were not provided."
    }

5. Активация инвайт-кода

POST /activate_invite/

  • Параметры запроса:

    • phone_number (string) - Номер телефона пользователя
    • invite_code (string) - Инвайт-код
  • Успешный ответ:

    {
      "message": "Invite code activated successfully",
      "activated_invite_code": "EJJR3P"
    }
  • Ошибка (если инвайт-код неверен):

    {
      "detail": "You have invite code"
    }