REST API сервис просмотра текущей зарплаты и даты следующего повышения
╭━━╋╋━━╮ ╭━━╋╋━━╮ ╭━━╋╋━━╮
┃╭━╋╋━╮┃ ┃╭━╋╋━╮┃ ┃╭━╋╋━╮┃
┃╰━╋╋━━╮ ┃╰━╋╋━━╮ ┃╰━╋╋━━╮
╰━━╋╋━╮┃ ╰━━╋╋━╮┃ ╰━━╋╋━╮┃
┃╰━╋╋━╯┃ ┃╰━╋╋━╯┃ ┃╰━╋╋━╯┃
╰━━╋╋━━╯ ╰━━╋╋━━╯ ╰━━╋╋━━╯
Python
FastAPI
- веб-фреймворк для создания APIPostgreSQL
- объектно-реляционная система управления базами данныхSQLAlchemy
- библиотека для работы с реляционными СУБД с применением технологии ORMFastAPI Users
- библиотека для уравления пользователямиAlembic
- инструмент миграции баз данныхasyncpg
- библиотека для работы с PostgreSQLsmtplib
- модуль для отправки почтыUvicorn
- реализация веб-сервера ASGI для PythonPoetry
- инструмент для управления зависимостями
- Склонируйте этот репозиторий
- Проверьте, что у вас установлен poetry
- В терминале, находясь в папке проекта, выполните
poetry install
. Эта команда устанавливает все зависимости в окружение в директорию .venv внутри проекта. - Активируйте окружение командой
poetry shell
- Запустите Postgres на порту 5432 (либо на любом другом, прописав его в переменной DB_PORT в файле .env)
- Обновите состояние базы данных, выполнив команду
alembic upgrade head
- Запустите приложение с помощью команды
uvicorn src.main:app --port 8080
. Можно указать другой порт, если 8080 уже занят. - Готово. Сервис доступен в браузере по адресу http://127.0.0.1:8080
- Для взаимодействия с сервисом откройте интерактивную документацию http://127.0.0.1:8080/docs
- Чтобы протестировать эндпоинт, нажмите на него, а затем на кнопку
Try it out
- После внесения необходимой информации (если это было необходимо) нажмите на кнопку
Execute
для выполнения действия
Эндпоинты разбиты на 2 группы:
- Auth отвечает за управление пользователями
- Money за получение и проверку секретного токена
База данных с информацией о сотрудниках заполняется самой организацией. Сотрудники не должны самостоятельно заносить в базу данные о себе. Тем не менее, я решила добавить эндпоинт для регистрации, чтобы было удобнее тестировать сервис.
Заполните поля email
, password
и salary
(зарплата). Дата повышения promotion
заполнится автоматически. По умолчанию к текущей дате прибавляется 3 месяца с момента регистрации (испытательный срок).
Для аутентификации на бэкенде была выбрана комбинация CookieTransport + JWTStrategy.
Чтобы залогиниться, введите в поле username
ранее зарегистрированный email, и соответствующий пароль в поле password
.
Чтобы разлогиниться, просто нажмите на кнопку Execute
.
/money/get_token - защищенный эндпоинт. Это значит, что неавторизованный пользователь не может получить секретный токен. Чтобы получить токен, надо сначала залогиниться.
При нажатии на кнопку Execute
сотруднику на почту высылается секретный токен, который действует в течение определенного времени (1 час). Отправка сообщения на email реализована с помощью протокола SMTP
. Кроме этого, в базу данных для данного пользователя записывается токен и дата, до которой он действителен.
- Если не получили письмо с токеном, проверьте папку "Спам".
Для генерации токена разработан метод generate_token
, а для отправки почты - send_token_email
. Оба находятся в файле src/auth/manager/py
.
Этот эндпоинт также является защищенным. Неавторизованный пользователь не сможет увидеть информацию.
На данном этапе происходит проверка токена:
- на срок действия
- на соответствие токену, сохраненному в базе данных для данного пользователя
Если какое-то из условий не выполняется, сотрудник не увидит информацию о себе. В таком случае надо заново получить токен и ввести его в поле для проверки.
Если токен соответствует условиям, сотрудник увидит информацию о себе:
- зарплата (salary)
- дата следующего повышения (promotion)