diff --git a/README.md b/README.md index c5352d0..d4b6400 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,120 @@ -# sqlalchemy‑fastapi‑pydentic‑pytest +# sqlalchemy-fastapi-pydentic-pytest -пет‑проект для интеграции FastAPI, SQLAlchemy, Pydantic и Pytest. +Pet-проект на стеке **FastAPI + SQLAlchemy (async) + Pydantic + Pytest**. +Реализован CRUD для пользователей, JWT-аутентификация и тесты. --- -## 🔍 Описание +## 📂 Структура проекта -Проект демонстрирует, как: - -- работать с **FastAPI**: REST API эндпоинты, маршруты, зависимости и схемы; -- использовать **SQLAlchemy** для работы с базой данных: модели, сессии, CRUD‑операции; -- валидировать данные через **Pydantic**; -- тестировать всё через **Pytest**: модульные и интеграционные тесты. - -Цель — собрать всё вместе и понять best practices. - ---- - -## 📁 Структура проекта - -```text / -├── server/ -│ ├── … # код FastAPI + SQLAlchemy + модели, схемы и маршруты -├── run.py # точка входа -├── requirements # зависимости -├── README.md # этот файл -├── .gitignore -└── Plan # план/заметки по проекту -``` +├── server/ # исходный код: модели, маршруты, JWT, базы данных +├── run.py # точка входа, запуск приложения +├── requirements.txt # зависимости +├── .env # переменные окружения +├── README.md # этот файл +└── Plan # заметки / TODO / планы по проекту --- -## ⚙️ Установка и запуск +## ⚙️ Требования -```bash -# клонировать репозиторий -git clone -cd sqlalchemy-fastapi-pydentic-pytest +- Python 3.13.3 +- SQLite (по умолчанию) + +--- + +## 🚀 Установка и запуск + +1. Клонировать репозиторий: + ```bash + git clone + cd sqlalchemy-fastapi-pydentic-pytest + + 2. Создать и активировать виртуальное окружение: -# создать виртуальное окружение python3 -m venv venv -source venv/bin/activate # в Linux/macOS -venv\Scripts\activate # в Windows +source venv/bin/activate # Linux / macOS +venv\Scripts\activate # Windows -# установить зависимости -pip install -r requirements -# запустить приложение + 3. Установить зависимости: + +pip install -r requirements.txt + + + 4. Настроить .env файл (пример): + +ALLOW_ORIGINS=http://localhost:3000 +ALLOW_CREDENTIALS=true +ALLOW_METHODS=GET,POST,PUT,DELETE +ALLOW_HEADERS=* +JWT_SECRET_KEY=your_secret_key +ACCESS_TOKEN_EXPIRE_MINUTES=30 + + + 5. Запустить приложение: + python run.py -# по умолчанию запустится FastAPI‑сервер (напр. localhost:8000) -``` ---- + 6. Документация OpenAPI будет доступна по адресу: + • Swagger UI → http://localhost:8000/docs + • JSON схема → http://localhost:8000/openapi.json -## 🧪 Тестирование +⸻ + +🔐 Аутентификация + • Эндпоинт /login принимает application/x-www-form-urlencoded: + +username=&password=<пароль> + + + • Возвращает JWT токен: + +{ + "access_token": "...", + "token_type": "bearer" +} + + + • Пример защищённого эндпоинта: /protected. + +⸻ + +👤 Пользователи (CRUD) + • POST /user_create — создать пользователя + • GET /get_user_by_email/{email} — получить пользователя по email + • GET / — получить всех пользователей + • PUT /user_update/{email} — обновить данные пользователя + • DELETE /user_delete/{email} — удалить пользователя + +⸻ + +🧪 Тестирование + +Запуск всех тестов: -```bash -# запустить все тесты pytest -``` -Описание тестов: +Тестируются: + • CRUD операции + • Pydantic-схемы + • Эндпоинты API + • JWT авторизация -- тесты на CRUD операции; -- тесты схем Pydantic; -- тесты ответов API (возможно с тестовым клиентом FastAPI). +⸻ ---- +✅ TODO + • Миграции через Alembic + • Обработка ошибок + • Логирование + • PostgreSQL + Pgpool-II для продакшена + • Разделение схем Pydantic на вход/выход + • Тестирование edge-cases -## 🛠 Используемые технологии +⸻ -| Компонент | Версия / Пример использования | -|-------------------|-------------------------------------| -| Python | ≥ 3.x | -| FastAPI | фреймворк для веб‑API | -| SQLAlchemy | ORM для работы с базой данных | -| Pydantic | валидация и сериализация данных | -| Pytest | тестирование | +📜 Лицензия ---- - -## 🚧 Возможности для доработки / TODO - -- добавление миграций (например, с Alembic); -- обработка ошибок и кастомные исключения; -- логирование; -- настройка CI/CD; -- защита маршрутов (аутентификация / авторизация); -- конфигурация через env‑переменные; -- более подробная документация API (например, OpenAPI схемы). - ---- - -## 📄 Лицензия - -Этот проект учебный. +Учебный проект.