Это веб-приложение на FastAPI, которое позволяет пользователям создавать, просматривать, обновлять и удалять книги. Проект также поддерживает функциональность платформы объявлений о продаже книг, где продавцы могут регистрироваться и связывать свои книги с профилем.
Основные возможности:
- Управление книгами (CRUD).
- Управление продавцами (CRUD).
- Связь между книгами и продавцами.
- Поддержка PostgreSQL в Docker.
- Полное покрытие тестами.
Для запуска проекта вам потребуется:
- Python 3.11+
- Docker и Docker Compose
- Установленные зависимости из
requirements.txt
-
Клонируйте репозиторий:
git clone https://github.com/annashesta/fastapi_project.git cd fastapi_project -
Создайте виртуальное окружение и установите зависимости:
python -m venv venv
source venv/bin/activate # Для Linux/MacOS
venv\Scripts\activate # Для Windows
pip install -r requirements.txt-
Настройте переменные окружения:
- Создайте файл
.envв корне проекта. - Укажите необходимые переменные (пример можно взять из
.env.example).
- Создайте файл
-
Запустите базу данных в Docker:
docker-compose up -d
-
Запустите приложение:
uvicorn src.main:app --reload
-
Запустите тесты:
pytest src/tests
Проект настроен для удобного запуска через отладчик Visual Studio Code. Для этого используется файл конфигурации .vscode/launch.json и settings.json .
В отладчике:
- "Запуск приложения": Запускает FastAPI-приложение с автоматической перезагрузкой.
- "Project Tests": Запускает тесты.
- Реализованы базовые ручки приложения:
- Создание книги.
- Получение списка всех книг.
- Получение книги по ID.
- Обновление книги.
- Удаление книги.
- Использована фейковая база данных (в памяти).
- Добавлены сериализаторы для валидации входных и выходных данных.
- Добавлен набор тестов для эндпоинтов, которые можно запустить в VSCode с помощью плагина REST Client.
Провели рефакторинг. Разложили сериализаторы и ручки по отдельным пакетам. Подключили настоящую БД в Докере и создали модели.
- Проведен рефакторинг:
- Сериализаторы и ручки разнесены по отдельным пакетам (
schemesиrouters). - Подключена настоящая база данных PostgreSQL, развернутая в Docker-контейнере.
- Созданы модели данных с использованием SQLAlchemy.
- Сериализаторы и ручки разнесены по отдельным пакетам (
Провели рефакторинг.
- Проведен рефакторинг для работы с ORM (SQLAlchemy):
- Переписаны ручки для взаимодействия с реальной базой данных
fastapi_project-db. - База данных развернута в Docker-контейнере.
- Переписаны ручки для взаимодействия с реальной базой данных
Реорганизовали структуру проекта и добавили тестирование.
-
Организация кода:
- Поместили Python-код в папку
src:- Это позволяет изолировать код от окружения.
- Упрощает запуск тестов и работу с модулями.
- Поместили Python-код в папку
-
Тестирование:
- Написан по одному тесту для каждой ручки API.
- Настроили
pytestи фикстуры:- Реализован пример настройки фикстур для работы с базой данных.
- Фикстуры позволяют создавать и очищать тестовую базу данных автоматически.
-
Управление переменными окружения:
- Добавлен
.envфайл для хранения переменных окружения. - Создан модуль
settingsдля удобного использования переменных окружения в коде.
- Добавлен
- Реализованы базовые ручки приложения:
- Создание книги.
- Получение списка всех книг.
- Получение книги по ID.
- Обновление книги.
- Удаление книги.
- Использована фейковая база данных (в памяти).
- Добавлены сериализаторы для валидации входных и выходных данных.
- Добавлен набор тестов для эндпоинтов, которые можно запустить в VSCode с помощью плагина REST Client
Провели рефакторинг. Разложили сериализаторы и ручки по отдельным пакетам. Подключили настоящую БД в Докере и создали модели.
- Сериализаторы и ручки разнесены по отдельным пакетам (
schemesиrouters). - Подключена настоящая база данных PostgreSQL, развернутая в Docker-контейнере.
- Созданы модели данных с использованием SQLAlchemy.
- Проведен рефакторинг для работы с ORM (SQLAlchemy):
- Переписаны ручки для взаимодействия с реальной базой данных
fastapi_project-db. - База данных развернута в Docker-контейнере.
- Переписаны ручки для взаимодействия с реальной базой данных
Реорганизовали структуру проекта и добавили тестирование.
-
Организация кода:
- Поместили Python-код в папку
src: Это позволяет изолировать код от окружения. Упрощает запуск тестов и работу с модулями.
- Поместили Python-код в папку
-
Тестирование:
- Написан по одному тесту для каждой ручки API.
- Настроили
pytestи фикстуры:- Реализован пример настройки фикстур для работы с базой данных.
- Фикстуры позволяют создавать и очищать тестовую базу данных автоматически.
-
Управление переменными окружения:
- Добавлен
.envфайл для хранения переменных окружения. - Создан модуль
settingsдля удобного использования переменных окружения в коде.
- Добавлен
Добавлена функциональность платформы объявлений о продаже книг. Введена модель Seller (Продавец) и связь с моделью Book (Книга).
-
Добавлена модель Seller:
- Поля:
id,first_name,last_name,email,password. - Связь с моделью Book (один ко многим).
- Поля:
-
Обновлена модель Book:
- Добавлено поле
seller_idдля связи с продавцом.
- Добавлено поле
-
Добавлены новые эндпоинты:
- 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}— удаление продавца и связанных с ним книг.
- POST
-
Обновлены ручки для книг:
- В ответы добавлена информация о продавце (поле
seller).
- В ответы добавлена информация о продавце (поле
-
Добавлены тесты:
- Тесты для новых эндпоинтов.
- Обновлены тесты для ручек, связанных с книгами.
-
Рефакторинг:
- Обновлены схемы 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