# sqlalchemy-fastapi-pydentic-pytest Pet-проект на стеке **FastAPI + SQLAlchemy (async) + Pydantic + Pytest**. Реализован CRUD для пользователей, JWT-аутентификация и тесты. --- ## 📂 Структура проекта ``` / ├── server/ # исходный код: модели, маршруты, JWT, базы данных ├── run.py # точка входа, запуск приложения ├── requirements.txt # зависимости ├── .env # переменные окружения ├── README.md # этот файл └── Plan # заметки / TODO / планы по проекту ``` --- ## ⚙️ Требования - 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 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 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" } ``` ⸻ ``` 👤 Пользователи (CRUD) • POST /user_create — создать пользователя • GET /get_user_by_email/{email} — получить пользователя по email • GET / — получить всех пользователей • PUT /user_update/{email} — обновить данные пользователя • DELETE /user_delete/{email} — удалить пользователя ``` ⸻ 🧪 Тестирование Запуск всех тестов: pytest Тестируются: ``` • CRUD операции • Pydantic-схемы • Эндпоинты API • JWT авторизация ``` ⸻ ✅ TODO ``` • Миграции через Alembic • Обработка ошибок • Логирование • PostgreSQL + Pgpool-II для продакшена • Разделение схем Pydantic на вход/выход • Тестирование edge-cases ``` ⸻ 📜 Лицензия Учебный проект.