Studio-Yandex-Practicum / ProCharity_back_2.0

bot ProCharity (НКО Фонд Друзья)
13 stars 13 forks source link

Подключить роутер Users router из FastAPI Users #596

Closed gorskyolga closed 1 month ago

gorskyolga commented 1 month ago

Нужно подключить к проекту эндпоинты "Users router" из FastAPI Users. Так как эндпоинты будут использоваться для админов, префикс для них должен быть "/admins" и тэг нужно назвать "Admins".

Про подключение эндпоинтов можно почитать в документации здесь.

Также в рамках задачи нужно поменять tags=["AdminUser"] на tags=["AdminAuth"] у эндпоинтов admin_user_router.

При тестировании нужно:

StriderDunedain commented 1 month ago

Есть несколько вопросов по задачке:

  1. Как авторизоваться, чтобы протестить ручки админов? Стыдно признаться, но я пока не научился 😅 Или оставить Халгине?
  2. Проверь, пожалуйста, схему, которую я сделал - AdminUserUpdate. В документации схема апдейта есть в подключении роутера, поэтому похоже, что она там нужна
  3. В роутере, который нужно добавить, есть параметр requires_verification - он проверяет поле is_verified. Автоматически дефолтится на False. Какое нам нужно поведение?
  4. Если подключать роутер из src\api\endpoints\admin.py, то в документации будут дублироваться эндпоинты. Как, например, раздел Admins еще раз полностью есть в AdminUser, так же как и api/auth/invitation. Не уверен, изначально так задумано или нет. Если да, то, думаю стоит поменять названия на более описывающие, сейчас имхо не очень понятна разница между AdminUser, Admins и AdminAuth:

2024-07-17_15-43-35

gorskyolga commented 1 month ago
  1. Лучше самому тоже проверять работу. Для создания админа нужно:

    • Создать токен в таблице admin_token_requests. Можно добавить через DBeaver. Можно подключиться к БД через терминал контейнера и выполнить команду: "INSERT INTO admin_token_requests (email, token, token_expiration_date, is_superuser) VALUES ('admin@example.com', 'some_token', '2025-01-01', True);", где вместо admin@example.com твоя реальная почта.
    • Обратиться к эндпоинту "api/auth/register" с созданным some_token для регистрации админа.
    • Обратиться к эндпоинту "api/auth/cookies/login" или "api/auth/login" для авторизации. Если использовать "api/auth/login", то вернется access_token, его нужно использовать для тестирования через Postman. Если использовать "api/auth/cookies/login", то браузер запомнит cookies и можно будет тестировать через документацию.
  2. Схема AdminUserUpdate вроде нормальная.

  3. Для параметра requires_verification нужно оставить дефолтный False, т.к. мы не верифицируем почту стандартным способом и поле is_verified у админов не меняется.

  4. Чтобы новый роутер не дублировался, но был отдельно от старых роутеров для аутентификации админов, его нужно подключать в src\api\router.py, а не в src\api\endpoints\admin.py. Эндпоинт "api/auth/invitation" начал дублироваться из-за изменения его тега на tags=["AdminAuth"]. Поищи через поиск tags=["AdminUser"], он встречается дважды. Они были одинаковыми, поэтому дублирования не было. Лучше удалить отдельный тег для invitation_router в src\api\endpoints\admin.py. А тег для admin_user_router в src\api\router.py изменить на tags=["AdminAuth"]. Тогда старые эндпоинты для аутентификации админов будут под тегом AdminAuth. А новые эндпоинты для списка админов будут под тегом Admins.