Giter VIP home page Giter VIP logo

salary-tracker-fastapi's Introduction

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

Асташов И.В. 2024.

Репозиторий содержит проект сервиса на FastAPI, предназначенного для просмотра текущей зарплаты и даты следующего повышения. В целях обеспечения безопасности конфиденциальных данных сотрудников, реализован метод выдачи секретного токена по логину и паролю, который действует в течение определенного времени. Доступ к данным о зарплате предоставляется только при предъявлении валидного токена.

Сервис на Render.

(1) Требования к решению

Обязательные технические требования:

  • Код размещен и доступен в публичном репозитории;
  • Оформлена инструкция по запуску сервиса и взаимодействию с проектом в формате Markdown;
  • Сервис реализован на FastAPI.

Необязательные технические требования:

  • Зависимости зафиксированы менеджером зависимостей poetry;
  • Написаны тесты с использованием pytest;
  • Реализована возможность собирать и запускать контейнер с сервисом в Docker.

(2) Технологии

  • Python
  • FastAPI
  • Uvicorn
  • PostgreSQL
  • Alembic

(3) Файлы

  • alembic/: миграции базы данных;
  • controllers/salaries.py: Контроллер, который содержит логику для создания и получения информации о зарплате;
  • controllers/tokens.py: Контроллер, отвечающий за создание и управление токенами авторизации;
  • controllers/users.py: Контроллер для работы с пользователями, включая их регистрацию;
  • exceptions/custom_exceptions.py: Файл с пользовательскими исключениями, которые могут возникнуть в сервисе;
  • htmlcov/: Папка, которая содержит отчеты о покрытии кода тестами в формате HTML;
  • models/core.py: Описание основных моделей базы данных, таких как пользователи, токены и зарплаты;
  • models/database.py: Файл для настройки подключения к базе данных и создания сессии SQLAlchemy;
  • models/schemas.py: Схемы Pydantic для валидации данных, используемых в сервисе;
  • routers/salaries.py: Роутер для обработки запросов, связанных с зарплатой пользователей;
  • routers/tokens.py: Роутер для работы с токенами авторизации;
  • routers/users.py: Роутер для управления пользователями, включая регистрацию и получение информации о себе;
  • secure/init.py: Модуль с настройками безопасности, такими как шифрование паролей и схема API-ключа;
  • views/salaries.py: Вид для выполнения запросов к базе данных для получения информации о зарплате пользователей;
  • views/users.py: Вид для выполнения запросов к базе данных для работы с пользователями;
  • .coverage: Файл, который содержит информацию о покрытии кода тестами в формате Coverage.py;
  • .env: Файл с конфигурационными переменными, такими как данные для подключения к базе данных;
  • alembic.ini: Файл конфигурации Alembic, инструмента для управления миграциями базы данных;
  • config.py: Файл с настройками приложения, который загружает переменные среды из файла .env;
  • docker-compose.yml: Файл конфигурации Docker Compose, определяет сервисы, их зависимости и настройки для развертывания;
  • Dockerfile: Файл для создания Docker-образа сервиса;
  • main.py: Основной файл приложения FastAPI, где объединяются все роутеры и настройки;
  • poetry.lock: Файл, Poetry с фиксацией версий зависимостей;
  • pyproject.toml: Файл конфигурации проекта Poetry, где определяются зависимости, скрипты и другие настройки проекта;
  • README.md: Файл README с инструкциями по запуску сервиса и взаимодействию с ним;
  • test.db: Файл базы данных, который используется для тестирования приложения.

(4) Запуск локально

Для управления зависимостями проекта используется Poetry. Сначала нужно установить Poetry;

Shell

$ poetry install
$ poetry shell
$ uvicorn main:app --reload

Docker

$ docker build . -t fastapi_app:latest
$ docker run -it --rm -p '8000:8000' fastapi_app

Открыть документацию API для просмотра: http://127.0.0.1:8000/docs

(5) Схемы

User

  • id: int
  • email: str
  • hashed_password: str

Token:

  • id: int
  • user_id: int
  • access_token: str
  • expires_at: datetime

Salary:

  • id: int
  • user_id: int
  • amount: int
  • next_raise_date: datetime

(6) Дизайн API

/

  • GET: Базовая информация о приложении

/users

  • GET: Получить список всех пользователей
  • POST: Зарегистрировать нового пользователя

/users/self

  • GET: Получить информацию о текущем пользователе по токену

/tokens

  • POST: Создать новый токен для пользователя

/salaries

  • GET: Получить информацию о текущей зарплате и дате следующего повышения для пользователя
  • POST: Добавить или обновить информацию о зарплате для пользователя

Благодарности

Используемые материалы:

salary-tracker-fastapi's People

Contributors

igorastashov avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.