Ei kuvausta

Egor Chernobai d665e8438c done 101% 2 kuukautta sitten
__pycache__ 494a60cb5d done 100% 2 kuukautta sitten
README.MD fd59e9f515 done 2 kuukautta sitten
crud.py 69c904887e done 2 kuukautta sitten
database.py 69c904887e done 2 kuukautta sitten
encryption.key fd59e9f515 done 2 kuukautta sitten
main.py 69c904887e done 2 kuukautta sitten
models.py 69c904887e done 2 kuukautta sitten
requirements.txt d665e8438c done 101% 2 kuukautta sitten
schemas.py 69c904887e done 2 kuukautta sitten
test_main.py fd59e9f515 done 2 kuukautta sitten
uml_diagram.puml 69c904887e done 2 kuukautta sitten
utils.py fd59e9f515 done 2 kuukautta sitten
ЛР9.docx 69c904887e done 2 kuukautta sitten
Лр.9 Документирование и автотесты.docx 69c904887e done 2 kuukautta sitten

README.MD

Проект 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=<key> (Windows PowerShell) или export ENCRYPTION_KEY=<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 операции для пользователей и постов
  • Очистку тестовой базы данных