/pollsAPI

Тестовое задание Фабрика Решений

Primary LanguagePython

Contents pollsAPI

Cmd

Prepare

python -m pip install -r Requirements.txt
https://wkhtmltopdf.org/downloads.html
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata initial_test_data.json
python manage.py createsuperuser --username admin --email test@test.test

Test

python manage.py test
python manage.py test polls_app.tests.CreateTable -v 1
python manage.py test polls_app.tests.AlterTable -v 1
python manage.py test polls_app.tests.DeleteTable -v 1
python manage.py test polls_app.tests.PassPoll -v 1
python manage.py test polls_app.tests.GetHistory -v 1

Run

python manage.py runserver 0.0.0.0:8080

⬆ Back to Top

Docker

Build

docker build -t pollsapi:1.0 .

Run

docker run  -it -p 8080:8080 \
    --env DJANGO_SUPERUSER_USERNAME=admin \
    --env DJANGO_SUPERUSER_EMAIL=test@test.test \
    --env DJANGO_SUPERUSER_PASSWORD=1234 \
    --env PORT=8080 pollsapi:1.0

⬆ Back to Top

API Documentation

POST api/auth/

Метод для авторизации администратора

Parameters
Name Description
username *required Имя пользователя
password *required Пароль
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False"
}

⬆ Back to Top


POST api/pass_poll/<id_poll>

Метод для прохождения опроса пользователем

Parameters
Name Description
id_poll *requiredID опроса, который был пройден. Передается в адресной строке
json по пройденному опросу
Example Value:
{
    "<id_question>": "<value>",
    "<id_question>": "<value>",
    "<id_question>": "<value>"
}
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Error discription"
}

⬆ Back to Top


GET api/history/<id_user>

Метод для получения всех опросов, которые прошел пользователь, с подробным описанием выбранных ответов

Parameters
Name Description
id_user *required ID пользователя
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True",
    "details": [
        {
            "id": 1, 
            "user_id": 1, 
            "poll_id": 1, 
            "question_id": 1, 
            "text_question": "test_text1"
        },
        {
            "id": 2, 
            "user_id": 1, 
            "poll_id": 1, 
            "question_id": 2, 
            "text_question": "test_text2"
        }
    ]
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Error discription"
}

⬆ Back to Top


GET api/polls/

Метод для получения всех опросов в системе

Response
Status Response
200 Запрос успешно обработан.
Авторизованный пользователь получает все опросы. Гость получает только активные.
Example Value:
{
    "status": "True",
    "details": [
        {
            "id": 1,
            "title": "poll1",
            "description": null,
            "date_published": "2020-12-23T21:15:49.321611",
            "date_end": null,
            "questions": [
                {
                    "id": 1,
                    "id_poll_id": 1,
                    "title": "question1",
                    "question_type_id": 1
                },
                {
                    "id": 2,
                    "id_poll_id": 1,
                    "title": "question2",
                    "question_type_id": 1
                },
                {
                    "id": 3,
                    "id_poll_id": 1,
                    "title": "question3",
                    "question_type_id": 1
                }
            ]
        },
        {
            "id": 2,
            "title": "poll2",
            "description": null,
            "date_published": "2020-12-23T21:15:49.321611",
            "date_end": null,
            "questions": [
                {
                    "id": 4,
                    "id_poll_id": 2,
                    "title": "question1",
                    "question_type_id": 1
                },
                {
                    "id": 5,
                    "id_poll_id": 2,
                    "title": "question2",
                    "question_type_id": 1
                }
            ]
        }
    ]
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Error discription"
}

⬆ Back to Top


POST api/create_poll/

Метод для создания опроса

Parameters
Name Description
title *required Название опроса
description Описание опроса
date_published Дата публикации
date_end Дата окончания
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "time data 'BROKEN_FIELD' does not match format '%Y-%m-%d'"
}
{
    "status": "False",
    "details": "Not enough values"
}

⬆ Back to Top


POST api/alter_poll/<id_poll>

Метод для изменения полей опроса

Parameters
Name Description
id_poll *required ID опроса
title Название опроса
description Описание опроса
date_published Дата публикации
date_end Дата окончания
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Error discription"
}

⬆ Back to Top


DELETE api/delete_poll/<id_poll>

Метод для удаления опроса

Parameters
Name Description
id_poll *required ID опроса
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Poll matching query does not exist."
}

⬆ Back to Top


POST api/create_question/

Метод для создания вопроса

Parameters
Name Description
id_poll *required ID опроса
title *required Описание вопроса
question_type *required id типа вопроса(1-text,2-radio,3-checkbox)
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Not enough values"
}

⬆ Back to Top


POST api/alter_question/<id_question>

Метод для изменения полей вопроса

Parameters
Name Description
id_question *required ID вопроса
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Error discription"
}

⬆ Back to Top


DELETE api/delete_question/<id_question>

Метод для удаления вопроса

Parameters
Name Description
id_question *required ID вопроса
Response
Status Response
200 Запрос успешно обработан
Example Value:
{
    "status": "True"
}
400 Ошибка запроса
Example Value:
{
    "status": "False",
    "details": "Question matching query does not exist."
}

⬆ Back to Top

Database scheme