Skip to content

prokhin/HaitalentPythonDeveloper

Repository files navigation

Q&A API

Простой сервис вопросов и ответов, реализованный на FastAPI.

Технический стек

  • Бэкенд: FastAPI, Uvicorn
  • База данных: PostgreSQL
  • ORM: SQLAlchemy 2.0 (синхронный драйвер)
  • Миграции: Alembic
  • Валидация и сериализация: Pydantic V2
  • Конфигурация: Pydantic-settings
  • Контейнеризация: Docker, Docker Compose
  • Тестирование: Pytest, HTTPX
  • Линтинг/форматирование: Ruff

Запуск проекта

Все зависимости и сервисы управляются через Docker Compose.

  1. Склонируйте репозиторий

  2. Создайте .env файл Скопируйте содержимое из .env.example в новый файл .env. Вы можете изменить значения, но для локального запуска они подходят.

  3. Запустите сервисы Выполните команду в корневой директории проекта:

    docker-compose up --build

    Эта команда соберет образ для FastAPI-приложения, поднимет контейнер с PostgreSQL, применит миграции базы данных и запустит веб-сервер.

    Сервис будет доступен по адресу http://localhost:8000. Интерактивная документация (Swagger UI) доступна по адресу http://localhost:8000/docs.

Запуск тестов

Для запуска тестов выполните команду:

docker-compose run --rm app pytest -q

Эта команда запустит новый контейнер, применит миграции к тестовой базе данных и выполнит все тесты из папки tests/.


Примеры запросов к API (cURL)

1. Создать вопрос

curl -X POST "http://localhost:8000/questions/" \
-H "Content-Type: application/json" \
-d '{
  "text": "Как использовать SQLAlchemy 2.0 с FastAPI?"
}'

2. Получить список всех вопросов

curl -X GET "http://localhost:8000/questions/"

3. Создать ответ для вопроса

Предполагается, что вопрос с id=1 существует.

curl -X POST "http://localhost:8000/questions/1/answers/" \
-H "Content-Type: application/json" \
-d '{
  "text": "Нужно создать зависимость get_db и использовать сессии.",
  "user_id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
}'

4. Получить вопрос с его ответами

Предполагается, что вопрос с id=1 существует.

curl -X GET "http://localhost:8000/questions/1"

5. Получить конкретный ответ

Предполагается, что ответ с id=1 существует.

curl -X GET "http://localhost:8000/answers/1"

6. Удалить ответ

Предполагается, что ответ с id=1 существует.

curl -X DELETE "http://localhost:8000/answers/1"

7. Удалить вопрос (каскадно удалит все ответы)

Предполагается, что вопрос с id=1 существует.

curl -X DELETE "http://localhost:8000/questions/1"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published