Апи для калькулятора. Тестовое задание для ГОСТ-С
Механика работы:
Eсли записать левое и правое значение, то можно отсылать команду операции, которая обновит текущий результат. значения можно менять произвольное количество раз, используются последние. если записано только правое значение и отослана операция, то в качестве левого значения используется последний вычисленный результат. если его нет - ошибка операндов.
минимум ошибок: валидация данных по значению и типу, не задано левое значение, правое, операция не выбрана, нет вычисленных результатов.
Запуск в DEV режиме
Скопировать репозиторий командой:
git clone https://gitflic.ru/project/mrkarlkarlsn/calculate.git
Активировать виртуальное окружение командой:
source venv/bin/activate
Перейти в директорию calculate командой:
cd calculate
Установить все зависимости командой:
pip install -r requirements.txt
Выполнить команды:
python manage.py collectstatic
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
Проект будет запущен по адресу: http://localhost/api/
Документация по проекту будет запущена по адресу:http://localhost/api/redoc/
Запуск docker-compose
Скопировать репозиторий командой:
git clone https://gitflic.ru/project/mrkarlkarlsn/calculate.git
Перейти в директорию infra командой:
cd infra
Выполнить команду :
docker-compose up -d
В нутри контейнера выполнить команды:
python manage.py collectstatic
python manage.py makemigrations
python manage.py migrate
Проект будет запущен по адресу: http://localhost/api/
Документация по проекту будет запущена по адресу:http://localhost/api/redoc/
Запуск авто-тестов:
В директории c файлом manage.py выполнить команду:
python manage.py test api.tests
Примеры запросов:
Запрос:
GET /api/calculate/
Ответ:
[
{
"id": 0,
"left_value": 0,
"right_value": 0,
"operation": "+",
"result": 0,
"create_result": "2019-08-24T14:15:22Z"
}
]
POST /api/calculate/
Тело запроса:
[
{
"left_value": 1,
"right_value": 2,
"operation": "+",
}
]
Ответ:
[
{
"id": 1,
"left_value": 1,
"right_value": 2,
"operation": "+",
"result": 3,
"create_result": "2019-08-24T14:15:22Z"
}
]