/Where-is-my-money

REST API сервис просмотра текущей зарплаты и даты следующего повышения

Primary LanguagePython

Where i$ my money

REST API сервис просмотра текущей зарплаты и даты следующего повышения

    ╭━━╋╋━━╮                ╭━━╋╋━━╮                ╭━━╋╋━━╮      
    ┃╭━╋╋━╮┃                ┃╭━╋╋━╮┃                ┃╭━╋╋━╮┃  
    ┃╰━╋╋━━╮                ┃╰━╋╋━━╮                ┃╰━╋╋━━╮  
    ╰━━╋╋━╮┃                ╰━━╋╋━╮┃                ╰━━╋╋━╮┃      
    ┃╰━╋╋━╯┃                ┃╰━╋╋━╯┃                ┃╰━╋╋━╯┃  
    ╰━━╋╋━━╯                ╰━━╋╋━━╯                ╰━━╋╋━━╯

Используемые технологии

  • Python
  • FastAPI - веб-фреймворк для создания API
  • PostgreSQL - объектно-реляционная система управления базами данных
  • SQLAlchemy - библиотека для работы с реляционными СУБД с применением технологии ORM
  • FastAPI Users - библиотека для уравления пользователями
  • Alembic - инструмент миграции баз данных
  • asyncpg - библиотека для работы с PostgreSQL
  • smtplib - модуль для отправки почты
  • Uvicorn - реализация веб-сервера ASGI для Python
  • Poetry - инструмент для управления зависимостями

Инструкция по запуску сервиса

  • Склонируйте этот репозиторий
  • Проверьте, что у вас установлен 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 за получение и проверку секретного токена

Приложение

/auth/register

База данных с информацией о сотрудниках заполняется самой организацией. Сотрудники не должны самостоятельно заносить в базу данные о себе. Тем не менее, я решила добавить эндпоинт для регистрации, чтобы было удобнее тестировать сервис.

Регистрация

Заполните поля email, password и salary (зарплата). Дата повышения promotion заполнится автоматически. По умолчанию к текущей дате прибавляется 3 месяца с момента регистрации (испытательный срок).

/auth/jwt/login

Для аутентификации на бэкенде была выбрана комбинация CookieTransport + JWTStrategy.

Логин

Чтобы залогиниться, введите в поле username ранее зарегистрированный email, и соответствующий пароль в поле password.

/auth/jwt/logout

Чтобы разлогиниться, просто нажмите на кнопку Execute.

/money/get_token

/money/get_token - защищенный эндпоинт. Это значит, что неавторизованный пользователь не может получить секретный токен. Чтобы получить токен, надо сначала залогиниться.

Токен

При нажатии на кнопку Execute сотруднику на почту высылается секретный токен, который действует в течение определенного времени (1 час). Отправка сообщения на email реализована с помощью протокола SMTP. Кроме этого, в базу данных для данного пользователя записывается токен и дата, до которой он действителен.

  • Если не получили письмо с токеном, проверьте папку "Спам".

Для генерации токена разработан метод generate_token, а для отправки почты - send_token_email. Оба находятся в файле src/auth/manager/py.

Методы

/money/money_info

Этот эндпоинт также является защищенным. Неавторизованный пользователь не сможет увидеть информацию.

Ввод секретного токена

На данном этапе происходит проверка токена:

  • на срок действия
  • на соответствие токену, сохраненному в базе данных для данного пользователя

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

Если токен соответствует условиям, сотрудник увидит информацию о себе:

  • email
  • зарплата (salary)
  • дата следующего повышения (promotion)

Информация о сотруднике