Giter Club home page Giter Club logo

fabrika_test's Introduction

fabrika_test

Тестовое Задание.

У текущего тестового задания есть только общее описание требований, конкретные детали реализации остаются на усмотрение разработчика.

Cпроектировать и разработать API для системы опросов пользователей.

Функционал для администратора системы:

  • авторизация в системе (регистрация не нужна)
  • добавление/изменение/удаление опросов. Атрибуты опроса: название, дата старта, дата окончания, описание. После создания поле "дата старта" у опроса менять нельзя
  • добавление/изменение/удаление вопросов в опросе. Атрибуты вопросов: текст вопроса, тип вопроса (ответ текстом, ответ с выбором одного варианта, ответ с выбором нескольких вариантов)

Функционал для пользователей системы:

  • получение списка активных опросов
  • прохождение опроса: опросы можно проходить анонимно, в качестве идентификатора пользователя в API передаётся числовой ID, по которому сохраняются ответы пользователя на вопросы; один пользователь может участвовать в любом количестве опросов
  • получение пройденных пользователем опросов с детализацией по ответам (что выбрано) по ID уникальному пользователя

Использовать следующие технологии: Django 2.2.10, Django REST framework.

Результат выполнения задачи:

  • исходный код приложения в github (только на github, публичный репозиторий)
  • инструкция по разворачиванию приложения (в docker или локально)
  • документация по API

Деплой

Для развертывания проекта выполнить:

mkdir fabrika_test
cd fabrika_test
git init
git pull https://github.com/warrinot/fabrika_test.git
pip install virtualenv
python -m venv venv
source venv/bin/activate //на Linux или "venv\scripts\activate" на Windows
pip install -r requirements.txt
python manage.py migrate
python manage.py loaddata testdata.json
python manage.py runserver

Документация:

запуск тестов python manage.py test

Документация админа

Для всех запросов админа следует использовать login:password admin:123

например curl -u admin:123 http://127.0.0.1:8000/admin_api/polls/

/admin_api/nested_polls/ - url для запросов создания опроса с вопросами и с вариантами ответов ОДНИМ запросом. Пример отправляемых данных:
{
        "name": "Кем бы вы работали, если б не пошли в IT?",
        "description": "Задавались когда-нибудь вопросом, кем бы вы могли стать, если б не пошли в сферу IT? Давайте пофантазируем: ответьте на 10 вопросов нашего развлекательного теста и получите один из необычных вариантов профессии",
        "questions": [
            {
                "text": "Представьте, что вы в своей комнате, пишете код, а перед вами книжная полка. Какая книга там точно есть?",
                "question_type": 2,
                "choices": [
                    {
                        "text": "Искусство программирования», Д. Кнут"
                    },
                    {
                        "text": "«Программирование для гуманитариев», Ю. Денисов"
                    },
                    {
                        "text": "«Пять пороков команды», П. Ленсиони"
                    },
                    {
                        "text": "«Google: эффективный поиск информации в Интернет. Гугл поиск», В. Гусев"
                    }
                ]
            },
            {
                "text": "Вам поручили сложный таск, который вы никак не можете выполнить. Что сделаете в первую очередь?",
                "question_type": 2,
                "choices": [
                    {
                        "text": "Побегу на StackOverflow за готовыми ответами"
                    },
                    {
                        "text": "Побегу на StackOverflow задавать вопросы"
                    }
                ]
            },
            {
                "text": "Вы очень спешили, и на выходе получился спагетти-код. Что предпримите?",
                "question_type": 2,
                "choices": [
                    {
                        "text": "Покопаюсь в старых проектах, ведь что-то подобное я уже точно писал"
                    },
                    {
                        "text": "Найду best practices для чистого кода и буду им следовать"
                    }]
            }
            ]
}
/admin_api/ - корневой url api для админа
/admin_api/polls/ - api для управления опросами:
  • GET - выдает список всех опросов
  • POST - добавляет опрос. В теле запроса отправляется:
    {
    "name": "123",
    "description": "321"
    }
    
/admin_api/polls/<id> - api конкретного опроса:
  • GET получает данные опроса
  • PUT или PATCH редактируют опрос. Пример тела запроса:
    {
    "name": "321",
    "description": "123"
    }
    
  • DELETE - удаляет опрос
/admin_api/questions/ - api для управления вопросами
  • GET - выдает список всех вопросов
  • POST - добавляет вопрос. В теле запроса отправляется:
    {
    "poll": 1,
    "text": "Текст",
    "question_type": 2
    }
    
/admin_api/questions/<id> - api конктрентного вопроса:
  • GET получает данные опроса
  • PUT или PATCH - редактируют опрос. Пример тела запроса:
    {
    "poll": 1,
    "text": "Новый Текст",
    "question_type": 3
    }
    
  • DELETE - удаляет опрос
/admin_api/choices/ - api для управления вариантом ответа
  • GET - выдает список всех вариантов
  • POST - добавляет вариант. В теле запроса отправляется:
    {
    "question": 1,
    "text": "Опция 1"
    }
    
/admin_api/choices/<id> - api конктрентного варианта ответа:
  • GET получает данные варианта
  • PUT или PATCH - редактируют вариант. Пример тела запроса:
    {
    "question": 2,
    "text": "Опция 2"
    }
    
  • DELETE - удаляет вариант

Документация пользователя

/user_api/ - корневой url для запросов пользователей
/user_api/active_polls - метод GET - получение списка активных опросов пользователем
/user_api/polls_finished_by_user/?user_id=* - метод GET - получение списка опросов, в которых пользователь ответил хотя бы на 1 вопрос в запросе указать user_id
/user_api/user_choices/ - метод POST - ответ пользователя на вопрос из опроса. Если тип вопроса - "ответ текстом" в теле запроса нужно отправить:
{
"question": 13,
"user_id": 321,
"text_choice": "Текст ответа"
}
Если тип вопроса - "ответ с выбором одного варианта" или "ответ с выбором нескольких вариантов", отправляется:
{
"question": 13,
"choice": [
    41
],
"user_id": 321
}

fabrika_test's People

Contributors

warrinot avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.