MaxBakshaev/FastAPI-QA-Service
Тестовое задание: API-сервис для вопросов и ответов
Тестовое задание: API-сервис для вопросов и ответов.
📖 Проект реализует REST API для создания и управления вопросами и ответами пользователей на вопросы.
Нельзя создать ответ к несуществующему вопросу.
Один и тот же пользователь может оставлять несколько ответов на один вопрос.
При удалении вопроса удаляются все его ответы (каскадно).
⚙️ Функциональность
🔸 Вопросы (Questions)
GET /questions/— список всех вопросовPOST /questions/— создать новый вопросGET /questions/{question_id}— получить вопрос и все ответы на негоDELETE /questions/{question_id}— удалить вопрос (вместе с ответами)
🔸 Ответы (Answers)
POST /questions/{question_id}/answers/— добавить ответ к вопросуGET /answers/{answer_id}— получить конкретный ответDELETE /answers/{answer_id}— удалить ответ
🛠️ Используемые технологии
-
⚡ FastAPI
-
🐘 PostgreSQL
-
🔁 SQLAlchemy + Async ORM
-
📄 Alembic миграции
-
🐳 Docker/Docker Compose
-
🧪 Pytest
-
🔧 Pydantic
🐳 Установка и запуск с Docker:
🔹 1. Клонируйте репозиторий и перейдите в директорию проекта:
git clone https://github.com/MaxBakshaev/FastAPI-QA-Service.git
cd FastAPI-QA-Service
🔹 2. Создайте файлы окружения:
Для Linux или macOS:
mkdir -p app && touch app/.env app/.env.postgres
Для Windows:
type nul > app\.env
type nul > app\.env.postgres
🔹 3. Настройте файл app/.env:
3.1. Добавьте переменные окружения:
APP_CONFIG__DB__URL=postgresql+asyncpg://user:pwd@postgres-qa-service:5432/DBname
APP_CONFIG__DB__ECHO=1
3.2. ✏️ Замените в APP_CONFIG__DB__URL:
user— имя пользователя БДpwd— парольDBname— название БД
🔹 4. Настройте файл app/.env.postgres:
4.1. Добавьте переменные окружения с вашими данными:
POSTGRES_USER=ваше_имя_пользователя
POSTGRES_PASSWORD=ваш_пароль
POSTGRES_DB=ваше_название_БД
🔹 5. Запуск контейнеров:
Убедитесь, что Docker Desktop запущен. Затем создайте и запустите докер контейнер:
make up
Остановить:
make stop
Очистить контейнеры, сети, тома и образы:
make clean
- 📄 Дополнительные команды смотрите в
Makefile.
🔹 6. Откройте в браузере:
-
📚 Swagger UI: http://127.0.0.1:8000/docs
-
📘 Redoc: http://127.0.0.1:8000/redoc
🔹 7. 🧪 Запуск тестов:
make test