- Установить все зависимости из
requirements.txt
при помощи команды:pip install -r requirements.txt
. - Запустить проект при помощи команды:
python main.py
Система использует аккаунты пользователей с некоторыми заданными атрибутами (далее по контексту будет ясно, какие именно атрибуты относятся к пользователям).
Также хранятся предпочтения, которые представляют собой предпочтения из предложенного набора (считаем, что модификация Администратором предпочтений не затрагивает уже имеющиеся у пользователей).
jwt_required optional
- требуется указать bearer token, иначе не вся функциональность будет доступна (назовём имеющего токен пользователя авторизованным)jwt_required
- функция с данным декоратором доступна только авторизованным пользователям.
По умолчанию, любая такая функция обязана проверять актуальность переданного токена:
- При выходе пользователя его токен становится неактуальным
- Токен также может физически устареть, необходимо поддержать его обновление (автоматическая подмена "почти"
устаревших токенов, моложе 1 часа, но старше 30 минут предусмотрена, смотрите на ответ сервера, если в нём
содержится
access_token
, то необходимо обновить токен у себя).
-
Регистрация пользователя
{ "nickname": "...", "email": "...", "password": "...", "birth_date": "...", "about": "...", "interests": "[...]", "avatar": "..." }
Required:
nickname
,email
,password
- Адрес электронной почты должен быть уникален
- Пароль должен содержать прописные и строчные буквы латинского алфавита, цифры и состоять не менее чем из восьми символов
- Здесь и далее: avatar - строка base64. Если avatar = "", то используется стандартное изображение, в противном случае - передаётся строка base64, которая сохраняется в файл .jpg и возвращается при последующих запросах.
Сообщение об успешной регистрации, иначе сообщение об ошибке
-
Вход пользователя. Если токен не является актуальным, то происходит его обновление, в противном случае, если пользователь не вышел из системы, ошибка "Token is actual", 401
{ "email":"...", "password":"..." }
Required:
email
,password
Сообщение об успешном входе, иначе сообщение об ошибке
- Выход пользователя
-
Вывод данных о своем аккаунте
{ "id": "...", "nickname": "...", "email": "...", "about": "...", "birth_date": "...", "interests": "[...]", "friends": "[...]", "is_admin": "...", "avatar": "..." }
-
Изменение данных о своем аккаунте
{ "id": "...", "nickname": "...", "email": "...", "about": "...", "birth_date": "...", "interests": "[...]", "avatar": <BASE64_IMG> }
Измененные данные аккаунта:
{ "id": "...", "nickname": "...", "email": "...", "about": "...", "birth_date": "...", "interests": "[...]", "avatar": <IMG_LINK> }
-
Получение информации о пользователе по id
- В случае
id = 0
выдается информация о себе (аналогично/account
),jwt_required
- Иначе выдается информация о пользователе по указанному
id
{ "id": "...", "nickname": "...", "email": "...", "about": "...", "birth_date": "...", "interests": "[...]", "friends": "[...]", "is_me": "true/false", "is_admin": "...", "avatar": "..." }
- В случае
-
Получение списка друзей, входящих/исходящих заявок
{ "friends": "[...]" "incoming_requests": "[...]" "outgoing_requests": "[...]" }
-
Удаление друга по
id
из списка друзей{ "friend_id": "..." }
-
Отзывает заявку человеку с указанным
id
{ "friend_id": "..." }
-
Отправляет заявку человеку с указанным
id
{ "friend_id": "..." }
-
Отклоняет входящую заявку от человека с указанным
id
{ "friend_id": "..." }
-
Принимает входящую заявку от человека с указанным
id
{ "friend_id": "..." }
-
Генерация идей подарков
- Если генерация идей для друга (
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
- название товара на Wildberriesimg_link
- фотография идеи подаркаmarket_link
- ссылка на нее
- Если генерация идей для друга (
-
Получить список всех интересов
{ "all_interests": "[...]" }
Здесь находятся методы, доступные только администраторам.
-
Изменение списка интересов
{ "new_interests": "[...]", "edit_interests": "[{'interest_name': '...', 'new_name': '...'}, ...]" }
new_interests
- список из строк, новые предпочтения не должны совпадать ни с одним из старыхedit_interests
- список из объектовinterest_name
: уже существующий интерес, который нужно изменитьnew_name
: на что нужно изменить интерес под названиемinterest_name
-
Присвоение некоторому, уже существующему пользователю прав администратора
{ "id": "[...]", }
id
- id человека, которому будет присвоен статус администратора. (пользователь не должен уже являться администратором)
-
Отзыв у некоторого пользователя прав администратора
{ "id": "[...]", }
id
- id человека, у которого будет отозван статус администратора. (пользователь должен уже являться администратором) Здесь выполняется проверка на email == '[email protected]', может существовать только один аккаунт с таким email. Такой пользователь автоматически создаётся базой данных. Данный пользователь не может быть удалён ни одним из администраторов. Данный пользователь всегда является администратором (is_admin == True)