Skip to content

annashesta/fastapi_project

Repository files navigation

FastAPI Book Platform

О проекте

Это веб-приложение на FastAPI, которое позволяет пользователям создавать, просматривать, обновлять и удалять книги. Проект также поддерживает функциональность платформы объявлений о продаже книг, где продавцы могут регистрироваться и связывать свои книги с профилем.

Основные возможности:

  • Управление книгами (CRUD).
  • Управление продавцами (CRUD).
  • Связь между книгами и продавцами.
  • Поддержка PostgreSQL в Docker.
  • Полное покрытие тестами.

Требования

Для запуска проекта вам потребуется:

  • Python 3.11+
  • Docker и Docker Compose
  • Установленные зависимости из requirements.txt

Установка и настройка

  1. Клонируйте репозиторий:

    git clone https://github.com/annashesta/fastapi_project.git
    cd fastapi_project
  2. Создайте виртуальное окружение и установите зависимости:

   python -m venv venv
   source venv/bin/activate  # Для Linux/MacOS
   venv\Scripts\activate     # Для Windows
   pip install -r requirements.txt
  1. Настройте переменные окружения:

    • Создайте файл .env в корне проекта.
    • Укажите необходимые переменные (пример можно взять из .env.example).
  2. Запустите базу данных в Docker:

    docker-compose up -d
  3. Запустите приложение:

    uvicorn src.main:app --reload
  4. Запустите тесты:

    pytest src/tests

Запуск приложения также реализован через VS Code

Проект настроен для удобного запуска через отладчик Visual Studio Code. Для этого используется файл конфигурации .vscode/launch.json и settings.json . В отладчике:

  • "Запуск приложения": Запускает FastAPI-приложение с автоматической перезагрузкой.
  • "Project Tests": Запускает тесты.

Изменения по версиям

version 0.0.1

  • Реализованы базовые ручки приложения:
    • Создание книги.
    • Получение списка всех книг.
    • Получение книги по ID.
    • Обновление книги.
    • Удаление книги.
  • Использована фейковая база данных (в памяти).
  • Добавлены сериализаторы для валидации входных и выходных данных.
  • Добавлен набор тестов для эндпоинтов, которые можно запустить в VSCode с помощью плагина REST Client.

version 0.0.2

Провели рефакторинг. Разложили сериализаторы и ручки по отдельным пакетам. Подключили настоящую БД в Докере и создали модели.

  • Проведен рефакторинг:
    • Сериализаторы и ручки разнесены по отдельным пакетам (schemes и routers).
    • Подключена настоящая база данных PostgreSQL, развернутая в Docker-контейнере.
    • Созданы модели данных с использованием SQLAlchemy.

version 0.0.3

Провели рефакторинг.

  • Проведен рефакторинг для работы с ORM (SQLAlchemy):
    • Переписаны ручки для взаимодействия с реальной базой данных fastapi_project-db.
    • База данных развернута в Docker-контейнере.

version 0.0.4

Реорганизовали структуру проекта и добавили тестирование.

  1. Организация кода:

    • Поместили Python-код в папку src:
      • Это позволяет изолировать код от окружения.
      • Упрощает запуск тестов и работу с модулями.
  2. Тестирование:

    • Написан по одному тесту для каждой ручки API.
    • Настроили pytest и фикстуры:
      • Реализован пример настройки фикстур для работы с базой данных.
      • Фикстуры позволяют создавать и очищать тестовую базу данных автоматически.
  3. Управление переменными окружения:

    • Добавлен .env файл для хранения переменных окружения.
    • Создан модуль settings для удобного использования переменных окружения в коде.

version 0.0.1

  • Реализованы базовые ручки приложения:
    • Создание книги.
    • Получение списка всех книг.
    • Получение книги по ID.
    • Обновление книги.
    • Удаление книги.
  • Использована фейковая база данных (в памяти).
  • Добавлены сериализаторы для валидации входных и выходных данных.
  • Добавлен набор тестов для эндпоинтов, которые можно запустить в VSCode с помощью плагина REST Client

version 0.0.2

Провели рефакторинг. Разложили сериализаторы и ручки по отдельным пакетам. Подключили настоящую БД в Докере и создали модели.

  • Сериализаторы и ручки разнесены по отдельным пакетам (schemes и routers).
  • Подключена настоящая база данных PostgreSQL, развернутая в Docker-контейнере.
  • Созданы модели данных с использованием SQLAlchemy.

version 0.0.3

  • Проведен рефакторинг для работы с ORM (SQLAlchemy):
    • Переписаны ручки для взаимодействия с реальной базой данных fastapi_project-db.
    • База данных развернута в Docker-контейнере.

version 0.0.4

Реорганизовали структуру проекта и добавили тестирование.

  1. Организация кода:

    • Поместили Python-код в папку src: Это позволяет изолировать код от окружения. Упрощает запуск тестов и работу с модулями.
  2. Тестирование:

    • Написан по одному тесту для каждой ручки API.
    • Настроили pytest и фикстуры:
      • Реализован пример настройки фикстур для работы с базой данных.
      • Фикстуры позволяют создавать и очищать тестовую базу данных автоматически.
  3. Управление переменными окружения:

    • Добавлен .env файл для хранения переменных окружения.
    • Создан модуль settings для удобного использования переменных окружения в коде.

version 1.0.0

Добавлена функциональность платформы объявлений о продаже книг. Введена модель Seller (Продавец) и связь с моделью Book (Книга).

Основные изменения:

  1. Добавлена модель Seller:

    • Поля: id, first_name, last_name, email, password.
    • Связь с моделью Book (один ко многим).
  2. Обновлена модель Book:

    • Добавлено поле seller_id для связи с продавцом.
  3. Добавлены новые эндпоинты:

    • POST /api/v1/sellers — регистрация продавца.
    • GET /api/v1/sellers — получение списка всех продавцов (без поля password).
    • GET /api/v1/sellers/{seller_id} — получение информации о продавце и списка его книг.
    • PUT /api/v1/sellers/{seller_id} — обновление данных о продавце.
    • DELETE /api/v1/sellers/{seller_id} — удаление продавца и связанных с ним книг.
  4. Обновлены ручки для книг:

    • В ответы добавлена информация о продавце (поле seller).
  5. Добавлены тесты:

    • Тесты для новых эндпоинтов.
    • Обновлены тесты для ручек, связанных с книгами.
  6. Рефакторинг:

    • Обновлены схемы Pydantic для работы с продавцами и книгами.
    • Улучшена структура кода.

Структура проекта

Для удобства и соблюдения принципов чистой архитектуры проект разделен на следующие пакеты:

  • configurations — слой для хранения конфигураций, констант, параметров и настроек проекта.

  • models — слой для хранения моделей (ORM или Data Classes).

  • routers — слой для настроек урлов для различных эндпоинтов.

  • schemas — слой, содержащий схемы Pydantic, отвечает за сериализацию и валидацию.


fastapi_project /
├── README.md                   # Документация проекта, описание структуры, инструкции по запуску и другая важная информация.
├── api_tests.http              # Файл с примерами запросов для тестирования API с использованием плагина 
|                                  REST Client в VS Code. 
|── .env.example                # Пример файла для хранения переменных окружения с     
|                                  данными для подключения к БД.
|
├── docker                      # Директория для Docker-конфигураций.
│   └── postgres                # Директория для PostgreSQL-конфигураций.
│       ├── Dockerfile          # Dockerfile для сборки PostgreSQL-образа с     
│       │                         дополнительными настройками.
│       └── create_databases.sql # SQL-скрипт для создания баз данных при инициализации 
│                                  контейнера.
├── docker-compose.yml          # Файл для описания и управления Docker-контейнерами 
│                                  (например, базы данных).
├── requirements.txt            # Файл со списком зависимостей Python, необходимых для    
│                                 запуска приложения.
└── src                         # Директория с исходным кодом приложения.
    ├── __init__.py             
    ├── configurations          # Слой для хранения конфигураций, настроек и параметров   
    |   |                           проекта. 
    │   ├── __init__.py         
    │   ├── database.py         # Модуль для настройки и подключения к БД.
    │   └── settings.py         # Модуль для управления настройками приложения, включая   
    |                             переменные окружения для подключения к БД. 
    ├── main.py                 # Главный файл приложения, где создается экземпляр FastAPI.
    ├── models                  # Слой для хранения моделей SQLAlchemy.
    │   ├── __init__.py         
    │   ├── base.py             # Базовая модель SQLAlchemy, от которой наследуются другие модели.
    │   ├── books.py            # Модель данных для книг.
    │   └── sellers.py          # Модель данных для продавцов.
    ├── pytest.ini              # Конфигурационный файл для pytest, содержит настройки для тестирования.
    ├── routers                 # Слой для настроек урлов и эндпоинтов API.
    │   ├── __init__.py         
    │   └── v1                  # Версия API (v1).
    │       ├── __init__.py     # Инициализационный файл для пакета `v1`.
    │       ├── books.py        # Роутеры для эндпоинтов, связанных с книгами.
    │       └── sellers.py      # Роутеры для эндпоинтов, связанных с продавцами.
    ├── schemes                 # Слой для хранения схем Pydantic, отвечающих за    
    |   |                         сериализацию и валидацию данных.
    │   ├── __init__.py         
    │   ├── books.py            # Схемы Pydantic для книг.
    │   └── sellers.py          # Схемы Pydantic для продавцов.
    └── tests                   # Тесты для проверки функциональности приложения.
        ├── __init__.py         
        ├── conftest.py         # Конфигурационный файл для pytest, содержит фикстуры и 
        |                         другие общие настройки для тестов.
        ├── test_books.py       # Тесты для эндпоинтов, связанных с книгами.
        └── test_sellers.py     # Тесты для эндпоинтов, связанных с продавцами.

Примечания

  • База данных: Используется PostgreSQL, развернутая в Docker-контейнере.
  • ORM: Для работы с базой данных используется SQLAlchemy.
  • Тестирование: Тесты написаны с использованием pytest и фикстур для создания тестовой базы данных.

Планы на будущее

Реализовать авторизацию для пользователя по JWT-токену. Создать эндпоинт для получения токена по email + password POST api/v1/token Эндпоинт должен возвращать JWT токен.

Закрыть токеном эндпоинт для получения данных о продавце: GET api/v1/seller/seller_id

И эндпоинты создания и редактирования книг: POST api/v1/books/ PUT api/v1/books/book_id

Токен должен бедет передаваться стандартным образом, в Header: Authorization: Bearer


Полезные ссылки по теме проекта

По FastAPI:

  1. Официальная документация
  2. Лучшие практики
  3. Собрание полезных библиотек и пакетов
  4. Полезная статья по структуре проекта

По принципам REST архитектуры:

  1. Полезные рекомендации по правильному написанию REST API

По SQLAlchemy:

  1. Хороший бесплатный видеокурс на YouTube. На русском языке

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published