Современное веб-приложение для создания и изучения вопросов для интервью с использованием интерактивных карточек.
- 📚 Интерактивные карточки: Нажимайте, чтобы переключаться между вопросами и ответами

- 🏷️ Управление категориями: Организуйте вопросы по темам (JavaScript, Python и др.)
- 📝 Управление вопросами: Добавляйте, редактируйте и удаляйте вопросы
- 🔀 Режим перемешивания: Рандомизируйте порядок вопросов для лучшего обучения
- ➕ Управление контентом: Добавляйте новые категории и вопросы через веб-интерфейс

- 🎨 Современный UI: Чистый, адаптивный дизайн с Tailwind CSS
- Backend: FastAPI (Python 3.13)
- База данных: PostgreSQL с SQLAlchemy ORM
- Frontend: Vanilla JavaScript с Tailwind CSS
- Управление пакетами: UV
- Качество кода: Ruff, Pyright, pre-commit hooks
- Развертывание: Docker & Docker Compose
# Клонирование репозитория
git clone https://github.com/ZhikharevAl/interview.git
cd interview
# Запуск приложения
docker-compose up -d
# Доступ к приложению по адресу http://localhost:8080# Установка зависимостей
uv sync --group dev
# Запуск сервера разработки
cd backend
uv run uvicorn app.main:app --reload
# Доступ к приложению по адресу http://localhost:8000- Режим изучения: Выберите категорию и нажимайте на карточки, чтобы увидеть ответы
- Управление: Добавляйте новые категории и вопросы через вкладку управления
- Перемешивание: Рандомизируйте порядок вопросов для проверки знаний
GET /api/v1/categories/- Получить список всех категорий (с опциональными параметрамиskipиlimit)POST /api/v1/categories/- Создать новую категориюGET /api/v1/categories/{category_id}- Получить категорию по IDPATCH /api/v1/categories/{category_id}- Обновить категорию по IDDELETE /api/v1/categories/{category_id}- Удалить категорию по ID
GET /api/v1/questions/- Получить список всех вопросов (опциональный параметр?category_id=X)POST /api/v1/questions/- Создать новый вопросGET /api/v1/questions/{question_id}- Получить вопрос по IDPATCH /api/v1/questions/{question_id}- Обновить вопрос по IDDELETE /api/v1/questions/{question_id}- Удалить вопрос по ID
GET /health- Эндпоинт проверки состояния
Проект включает комплексный набор тестов с тремя уровнями тестирования:
tests/
├── unit/ # Юнит-тесты для сервисов
├── integration/ # Интеграционные тесты с FastAPI TestClient
├── e2e/ # End-to-end тесты с Playwright
├── api/ # Классы API клиентов
├── utils/ # Утилиты и модели для тестов
└── config/ # Конфигурация тестов
# Запуск всех тестов
uv run pytest
# Запуск конкретного типа тестов
uv run pytest tests/unit/ # Только юнит-тесты
uv run pytest tests/integration/ # Только интеграционные тесты
uv run pytest tests/e2e/ # Только E2E тесты
# Запуск с покрытием
uv run pytest --cov=backend/app --cov-report=html
# Запуск конкретного тестового файла
uv run pytest tests/unit/test_category_service.py
# Запуск с отчетом Allure
uv run pytest --alluredir=allure-results
allure serve allure-results- Тестируют отдельные функции сервисов в изоляции
- Используют in-memory SQLite базу данных
- Быстрое выполнение, без внешних зависимостей
- Покрытие:
CategoryService,QuestionService
- Тестируют полные API эндпоинты с FastAPI TestClient
- Тестируют взаимодействия с базой данных и бизнес-логику
- Проверяют HTTP статус коды и схемы ответов
- Покрытие: Categories API, Questions API, Health эндпоинты
- Тестируют полные пользовательские сценарии с использованием Playwright
- Реальные HTTP запросы к работающему приложению
- Тестируют API клиенты и обработку ошибок
- Покрытие: Полное тестирование API workflow
Тесты используют отдельную конфигурацию через tests/config/config.py:
- Base URL:
http://localhost:8080(настраивается через.env.test) - Timeout: 30 секунд
- Эндпоинты:
/api/v1/categories,/api/v1/questions
- API клиенты: Высокоуровневые клиенты для Categories и Questions API
- Фикстуры: Управляемые тестовые данные с автоматической очисткой
- Интеграция с Allure: Детальные отчеты тестов с шагами и вложениями

- Faker: Генерация случайных тестовых данных
# Установка pre-commit hooks
pre-commit install
# Запуск линтеров
uvx ruff check .
uvx ruff format .
uv run pyright .MIT License - смотрите файл LICENSE для подробностей.