Skip to content

Yandex-Practicum/higher-web-practice-quiz-python

Repository files navigation

Quiz API

Описание

В этом задании вам потребуется реализовать сервис для создания вопросов для викторин. Сервис будет работать в формате REST API.

Начало работы

Для того, чтобы начать работу вам нужно форкнуть шаблон с проектом на Github и склонировать его себе.

Требования

Все требования для данного проекта будут разделены на несколько слоев: база данных, контроллеры и тесты. Каждый из слоев представляет собой отдельную логику проекта, которая связана с остальными слоями.

Слой доступа к БД

  1. Категория:
  • id (идентификатор)
  • title (название категории, не более 100 символов, не может быть пустой)
  1. Квиз:
  • id (идентификатор)
  • title (название квиза, не более 200 символов, не может быть пустым)
  • description (описание квиза, не более 500 символов, необязательное поле)
  1. Вопрос:
  • id (идентификатор)
  • category_id (идентификатор категории, к которой относится вопрос)
  • text (текст вопроса, не более 500 символов, обязательное поле)
  • description (описание вопроса, не более 500 символов, не обязательное поле)
  • options (варианты ответа на вопрос, обязательное поле, должно хранить 2 или более вариантов ответа в виде JSON поля (массив))
  • correct_answer (правильный вариант ответа, обязательное поле)
  • explanation (объяснение правильного ответа, не более 250 символов, не обязательное поле)
  • difficulty (сложность вопроса, может быть одним из трех значений: easy, medium, hard, обязательное поле)

Контроллеры

Требуется реализовать следующие ручки:

Category

  • POST /api/category - создание категории
  • GET /api/category - получение всех категории
  • GET /api/category/<id:int> - получение категории по идентификатору
  • PUT /api/category/<id:int> - изменение категории
  • DELETE /api/category/<id:int> - удаление категории

Question

  • POST /api/question - создание вопроса
  • GET /api/question - получение всех вопросов
  • GET /api/question/<id:int> - получение вопроса по идентификатору
  • GET /api/question/by_text/<query: str> - получение вопроса по тексту
  • POST /api/question/<id:int>/check - проверка ответа на вопрос
  • PUT /api/question/<id:int> - изменение вопроса
  • DELETE /api/question/<id:int> - удаление вопроса

Quiz

  • POST /api/quiz - создание квиза
  • GET /api/quiz - получение всех квизов
  • GET /api/quiz/<id:int> - получение квиза по идентификатору
  • GET /api/quiz/<id:int>/random_question - получение случайного вопроса по идентификатору квиза
  • GET /api/quiz/by_title/<title: str> - получение квиза по названию
  • PUT /api/quiz/<id:int> - изменение квиза
  • DELETE /api/quiz/<id:int> - удаление квиза

Слой тестов (дополнительно)

Для вышеописанной логики написаны тесты, проверяющие корректность работы слоев приложения. Однако, тесты написаны лишь на часть логики. Дополнительно предлагается написать собственные тесты, проверяющие отсутствующие кейсы.

В написании тестов можно ориентироваться на уже написанные тесты. Тесты предлагается писать для проверки сервисов для доступа к БД, а также для проверки ручек. Сейчас тесты написаны только на один метод сервиса и на одну ручку.

Админка для сервиса (дополнительно)

В качестве дополнительного задания вы также можете оформить админку для ваших моделей, чтобы создавать их через нее. В файле admin.py вы можете зарегистрировать модели и добавить дополнительной логики отобржения для них (выводить определенные поля, добавить сортировку, поиск и тому подобное).

Полезная информация

Для описания зависимостей (например, Django) в проекте используется pyproject.toml. Это более современный аналог файла requirements.txt, который позволяет не только фиксировать зависимости, но и указывать дополнительную информацию о проекте.

В качестве пакетного менеджера рекомендуем использовать uv - это очень быстрая замена pip.

Для того, чтобы установить все зависимости используйте команду:

uv sync

Если вы посмотрите список зависимостей, то увидите среди них ruff. Это линтер, который будет проверять код по стилю. Проверка линтером вшита в Github Actions, но вы можете запускать его следующей командой:

uv run ruff check ./quiz

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages