# Проект CRUD API для пользователей и постов Это FastAPI приложение предоставляет REST API для управления пользователями и постами с использованием базы данных PostgreSQL. ## Эндпоинты ### Пользователи - **POST /users/** Создает нового пользователя на основе предоставленных данных. Тело запроса: `{"name": "string", "email": "string", "password": "string"}` Ответ: `{"id": int, "name": "string", "email": "string"}` - **GET /users/** Возвращает список всех пользователей. - **GET /users/{user_id}** Возвращает информацию о пользователе по его ID. - **PUT /users/{user_id}** Обновляет данные пользователя по его ID. Тело запроса: `{"name": "string", "email": "string", "password": "string"}` - **DELETE /users/{user_id}** Удаляет пользователя по его ID. ### Посты - **POST /posts/** Создает новый пост на основе предоставленных данных. Тело запроса: `{"title": "string", "content": "string", "user_id": int}` Ответ: `{"id": int, "title": "string", "content": "string", "user_id": int}` - **GET /posts/** Возвращает список всех постов. - **GET /posts/{post_id}** Возвращает информацию о посте по его ID. - **PUT /posts/{post_id}** Обновляет данные поста по его ID. Тело запроса: `{"title": "string", "content": "string", "user_id": int}` ## Запуск 1. Установите зависимости: `pip install fastapi sqlalchemy psycopg2-binary uvicorn` 2. Настройте базу данных в `database.py` 3. При необходимости задайте постоянный ключ шифрования: `set ENCRYPTION_KEY=` (Windows PowerShell) или `export ENCRYPTION_KEY=` (Linux/macOS) 4. Запустите приложение: `uvicorn main:app --reload` > По умолчанию приложение сохранит сгенерированный ключ в файле `encryption.key` рядом с `utils.py`. > Если этот файл удалён или ключ изменён, ранее зашифрованные email-адреса перестанут раскрываться. ## Безопасность и журналирование - **Хэширование паролей**: Пароли пользователей хэшируются с использованием bcrypt. - **Шифрование данных**: Email пользователей шифруется в базе данных с использованием Fernet (AES). - **Защита от SQL-инъекций**: Все запросы параметризованы через SQLAlchemy. - **Журналирование**: Действия пользователей логируются (создание, обновление и т.д.). ## Структура проекта - `main.py`: Основное приложение FastAPI с эндпоинтами и журналированием - `crud.py`: Функции для работы с базой данных - `models.py`: Модели SQLAlchemy для таблиц - `schemas.py`: Pydantic схемы для валидации данных - `database.py`: Настройки подключения к базе данных - `utils.py`: Утилиты для хэширования и шифрования - `test_main.py`: Тесты для API и базы данных ## Тестирование Для запуска тестов установите pytest: `pip install pytest` Запустите тесты: `pytest test_main.py` Тесты включают: - Проверку доступности базы данных - CRUD операции для пользователей и постов - Очистку тестовой базы данных