Skip to content

notnered/salary-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Salary check REST API

Приветствую!

REST-сервис написан на FastAPI с использованием следующих библиотек:

  • dotenv (взаимодействие с .env)
  • PyJWT (реализация JWT токенов для авторизации)
  • Tortoise-ORM (ORM для упрощения работы с БД)

Требования:

  • Python >= 3.12
  • Poetry >= 2.1

Установка и запуск

  1. Клонирование репозитория

    git clone https://gitlab.com/notnered/cft-test-task.git
    
  2. Установка зависимостей

    poetry install
    
  3. Создание файла .env

    Пример содержимого .env:

    SECRET_KEY=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ
    
  4. Запуск приложения

    1. Выполнение напрямую:
    poetry run python main.py | poetry run fastapi run
    
    1. Выполнение с окружением:
    poetry shell
    fastapi run | python main.py
    

API-роуты

POST /auth/register

Создаёт пользователя и связанного сотрудника.

Тело запроса (JSON):

{
  "username": "string",
  "password": "string"
}

ОТВЕТ 200

{
  "id": "int",
  "username": "string"
}

ОШИБКИ

  • 400 -пользователь с таким именем уже существует или проблема при создании сотрудника.

POST /auth/login

Выполняет вход пользователя, возвращает JWT-токен.

Тело запроса (JSON):

{
  "username": "string",
  "password": "string"
}

ОТВЕТ 200

{
  "token": "jwt-token-string"
}

ОШИБКИ

  • 406 — пустой или некорректный логин.
  • 401 — неверный логин или пароль.
  • 500 — ошибка создания JWT токена.

GET /salary

Возвращает информацию о зарплате пользователя.

Авторизация: Требует JWT в заголовке Authorization: Bearer

ОТВЕТ 200

{
  "employee": {
    "user_name": "string",
    "user_id": "int"
  },
  "salary": "int",
  "next_rise": "dd/mm/yyyy"
}

ОШИБКИ

  • 401 — профиль сотрудника не найден или нет прав доступа.

Настройка БД

При желании заменить СУБД откройте файл db.py и при помощи документации Tortoise-orm

from tortoise.contrib.fastapi import register_tortoise

def init_db(app):
    register_tortoise(
        app,
        db_url='sqlite://db.sqlite3',
        modules={'models': ['app.models']},
        generate_schemas=True,
        add_exception_handlers=True,
    )

Примечания

  • Если увидите ошибку вроде Error: The current project could not be installed:, выполните:

    poetry instal --no-root
    
  • .env должен распологаться в той же папке, что и main.py

  • requirements.txt используется при наличиии проблем с poetry. При нормальной работе все зависимости берутся из pyproject.toml.

About

RESTful API for authorization and checking user salary rise

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages