Skip to content

spbu-math-cs/GiveGift-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Give gifts

Запуск проекта

  1. Установить все зависимости из requirements.txt при помощи команды: pip install -r requirements.txt.
  2. Запустить проект при помощи команды: python main.py

Протокол общения с сервером

Система использует аккаунты пользователей с некоторыми заданными атрибутами (далее по контексту будет ясно, какие именно атрибуты относятся к пользователям).

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

Некоторые запросы содержат:

  • jwt_required optional - требуется указать bearer token, иначе не вся функциональность будет доступна (назовём имеющего токен пользователя авторизованным)
  • jwt_required - функция с данным декоратором доступна только авторизованным пользователям.

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

  • При выходе пользователя его токен становится неактуальным
  • Токен также может физически устареть, необходимо поддержать его обновление (автоматическая подмена "почти" устаревших токенов, моложе 1 часа, но старше 30 минут предусмотрена, смотрите на ответ сервера, если в нём содержится access_token, то необходимо обновить токен у себя).

Описание методов API

Register

  • /register, POST jwt_required optional

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

    Входные данные

    {
        "nickname": "...",
        "email": "...",
        "password": "...",
        "birth_date": "...",
        "about": "...",
        "interests": "[...]",
        "avatar": "..."
    }

    Required: nickname, email, password

    • Адрес электронной почты должен быть уникален
    • Пароль должен содержать прописные и строчные буквы латинского алфавита, цифры и состоять не менее чем из восьми символов
    • Здесь и далее: avatar - строка base64. Если avatar = "", то используется стандартное изображение, в противном случае - передаётся строка base64, которая сохраняется в файл .jpg и возвращается при последующих запросах.

    Вывод

    Сообщение об успешной регистрации, иначе сообщение об ошибке

Login

  • /login, POST jwt_required optional

    Вход пользователя. Если токен не является актуальным, то происходит его обновление, в противном случае, если пользователь не вышел из системы, ошибка "Token is actual", 401

    Входные данные

     {
        "email":"...",
        "password":"..."
     }

    Required: email, password

    Вывод

    Сообщение об успешном входе, иначе сообщение об ошибке

Logout

  • /logout, POST jwt_required

    Выход пользователя

Account

  • /account, GET jwt_required

    Вывод данных о своем аккаунте

    Вывод

    {
        "id": "...",
        "nickname": "...",
        "email": "...",
        "about": "...",
        "birth_date": "...",
        "interests": "[...]",
        "friends": "[...]",
        "is_admin": "...",
        "avatar": "..."
    }
  • /account, POST jwt_required

    Изменение данных о своем аккаунте

    Входные данные

     {
         "id": "...",
         "nickname": "...",
         "email": "...",
         "about": "...",
         "birth_date": "...",
         "interests": "[...]",
         "avatar": <BASE64_IMG>
     }

    Вывод

    Измененные данные аккаунта:

    {
        "id": "...",
        "nickname": "...",
        "email": "...",
        "about": "...",
        "birth_date": "...",
        "interests": "[...]",
        "avatar": <IMG_LINK>
    }
  • /get_user_info/:id, GET jwt_required optional

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

    • В случае id = 0 выдается информация о себе (аналогично /account), jwt_required
    • Иначе выдается информация о пользователе по указанному id

    Вывод

    {
        "id": "...",
        "nickname": "...",
        "email": "...",
        "about": "...",
        "birth_date": "...",
        "interests": "[...]",
        "friends": "[...]",
        "is_me": "true/false",
        "is_admin": "...",
        "avatar": "..."
    }

Friends - все методы jwt_required

  • /friends, GET

    Получение списка друзей, входящих/исходящих заявок

    Вывод

    {
        "friends": "[...]"
        "incoming_requests": "[...]"
        "outgoing_requests": "[...]"
    }
  • /friends, DELETE

    Удаление друга по id из списка друзей

    Входные данные

    {
        "friend_id": "..."
    }
  • /outgoing_friend_request, DELETE

    Отзывает заявку человеку с указанным id

    Входные данные

    {
        "friend_id": "..."
    }
  • /outgoing_friend_request, POST

    Отправляет заявку человеку с указанным id

    Входные данные

    {
        "friend_id": "..."
    }
  • /incoming_friend_request DELETE

    Отклоняет входящую заявку от человека с указанным id

    Входные данные

    {
        "friend_id": "..."
    }
  • /incoming_friend_request POST

    Принимает входящую заявку от человека с указанным id

    Входные данные

    {
        "friend_id": "..."
    }

Generate ideas

  • /generate_ideas, POST jwt_required optional

    Генерация идей подарков

    Входные данные

    • Если генерация идей для друга (jwt_required):
      {
          "friend_id": "...",
          "is_adult": true/false,
          "price_range": "[start_price, end_price]"
      }
    • Иначе:
      {
          "interests": "[...]",
          "price_range": "[start_price, end_price]",
          "is_adult": true/false
      }
      • interests - список интересов
      • price_range - диапазон цен для подарка
      • is_adult - должен ли запрос содержать информацию, нежелательную для детей

    Вывод

    В случае успешного выполнения, список идей следующего формата:

      [
          {
            "title": "...",
            "img_link": "...",
            "market_link": "..."
          }, ...
      ]
    • title - название товара на Wildberries
    • img_link - фотография идеи подарка
    • market_link - ссылка на нее

Interests

  • /get_all_interests, GET

    Получить список всех интересов

    Вывод:

       {
           "all_interests": "[...]"
       }

Admin - все методы jwt_required

Здесь находятся методы, доступные только администраторам.

  • /edit_interests, POST

    Изменение списка интересов

    Входные данные

    {
        "new_interests": "[...]",
        "edit_interests": "[{'interest_name': '...', 'new_name': '...'}, ...]"
    }
    • new_interests - список из строк, новые предпочтения не должны совпадать ни с одним из старых
    • edit_interests - список из объектов
      • interest_name: уже существующий интерес, который нужно изменить
      • new_name: на что нужно изменить интерес под названием interest_name
  • /add_admin, POST

    Присвоение некоторому, уже существующему пользователю прав администратора

    Входные данные

    {
        "id": "[...]",
    }
    • id - id человека, которому будет присвоен статус администратора. (пользователь не должен уже являться администратором)
  • /delete_admin, POST

    Отзыв у некоторого пользователя прав администратора

    Входные данные

    {
        "id": "[...]",
    }
    • id - id человека, у которого будет отозван статус администратора. (пользователь должен уже являться администратором) Здесь выполняется проверка на email == '[email protected]', может существовать только один аккаунт с таким email. Такой пользователь автоматически создаётся базой данных. Данный пользователь не может быть удалён ни одним из администраторов. Данный пользователь всегда является администратором (is_admin == True)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages