# LibraryAPI Это проект приложения на FastAPI - современном веб фреймворке для создания API на Python. Я использую Pydantic для валидации данных, SQLModel для взаимодействия с базой данных, Alembic для управления миграциями, PostgreSQL как систему базы данных и Docker Compose для легкого развертывания. ### **Ключевые элементы:** 1. FastAPI: Предоставляет высокопроизводительность и простоту для разработки RESTful API, поддерживает асинхронные операции и автоматическую генерацию документации. 2. Pydantic: Используется для валидации данных и сериализации, позволяет легко определить схемы данных. 3. SQLModel: Объединяет SQLAlchemy и Pydantic, включая операции с базой данных с помощью классов Python. 4. Alembic: Инструмент для управления миграциями базы данных, упрощающий отслеживание и применение изменений в схеме базы данных. 5. PostgreSQL: Надежная реляционная база данных для хранения данных. 6. Docker Compose: Упрощает развертывание приложения и его зависимостей в контейнерах. ### **Инструкция по установке** 1. Клонируйте репозиторий: ```bash git clone https://github.com/wowlikon/libraryapi.git ``` 2. Перейдите в каталог проекта: ```bash cd libraryapi ``` 3. Настройте переменные окружения: ```bash edit .env ``` 4. Соберите контейнеры Docker: ```bash docker compose build ``` 5. Запустите приложение: ```bash docker compose up api ``` Для создания новых миграций: ```bash docker compose run --rm -T api alembic revision --autogenerate -m "Migration name" ``` Для запуска тестов: ```bash docker compose up test ``` ### **Эндпоинты API** **Авторы** | Метод | Эндпоинты | Описание | |--------|-----------------------|---------------------------------------------| | POST | `/authors` | Создать нового автора | | GET | `/authors` | Получить список всех авторов | | GET | `/authors/{id}` | Получить конкретного автора по ID с книгами | | PUT | `/authors/{id}` | Обновить конкретного автора по ID | | DELETE | `/authors/{id}` | Удалить конкретного автора по ID | | GET | `/authors/{id}/books` | Получить список книг для конкретного автора | **Книги** | Метод | Эндпоинты | Описание | |--------|-----------------------|----------------------------------------------| | POST | `/books` | Создать новую книгу | | GET | `/books` | Получить список всех книг | | GET | `/book/{id}` | Получить конкретную книгу по ID с авторами | | PUT | `/books/{id}` | Обновить конкретную книгу по ID | | DELETE | `/books/{id}` | Удалить конкретную книгу по ID | | GET | `/books/{id}/authors` | Получить список авторов для конкретной книги | **Жанры** | Метод | Эндпоинты | Описание | |--------|-----------------------|----------------------------------------------| | POST | `/genres` | Создать новый жанр | | GET | `/genres` | Получить список всех жанров | | GET | `/genres/{id}` | Получить конкретный жанр по ID | | PUT | `/genres/{id}` | Обновить конкретный жанр по ID | | DELETE | `/genres/{id}` | Удалить конкретный жанр по ID | | GET | `/books/{id}/genres` | Получить список жанров для конкретной книги | **Связи** | Метод | Эндпоинты | Описание | |--------|------------------------------|-----------------------------------------| | GET | `/relationships/author-book` | Получить список всех связей автор-книга | | POST | `/relationships/author-book` | Добавить связь автор-книга | | DELETE | `/relationships/author-book` | Удалить связь автор-книга | ### **Используемые технологии** - **FastAPI**: Современный web фреймворк для построения API с использованием Python, известный своей скоростью и простотой использования. - **Pydantic**: Библиотека для валидации данных и управления настройками, использующая аннотации типов Python. - **SQLModel**: Библиотека для взаимодействия с базами данных с использованием классов Python, объединяющая функции SQLAlchemy и Pydantic. - **Alembic**: Легковесный инструмент для миграции базы данных на основе SQLAlchemy. - **PostgreSQL**: Сильная, открытая реляционная система управления базами данных. - **Docker**: Платформа для разработки, распространения и запуска приложений в контейнерах. - **Docker Compose**: Инструмент для определения и запуска многоконтейнерных приложений Docker. ### **TODO List** - Добавление жанров