Skip to content

Latest commit

 

History

History
138 lines (100 loc) · 7.61 KB

README.md

File metadata and controls

138 lines (100 loc) · 7.61 KB

Учет производства роботов и заказов на роботов

Приложение позволяет вести учет новых произведенных изделий (в данном случае - роботов). Формировать статистику по производству в виде загружаемого файла XLXS. Создавать заказ-ожидание на нового робота с уведомлением по email.

Стек

Python
Django
openpyxl
django-environ - для хранения переменных окружения в файле .env
sqlite3

Функционал

  1. Запись в базе данных нового произведенного робота от лица сотрудника. API ендпойнт, принимает данные в теле POST-запроса.
  2. Возможность скачать отчет о количестве произведенных за неделю роботов по моделям в виде файла XLXS для руководства.
  3. Создание заказа от лица клиента на модель робота и получение уведомления на email в случае, когда такой робот был произведен.

Подробнее описание задач, которые решает данных функционал - в файле tasks.md.

1. Описание API для создания нового робота

Запрос

На ендпойнт /robots/create/ отправляется POST-запрос вида:

POST /robots/create/ HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json

{"model":"XX","version":"YY","created":"YYYY-MM-DD HH:MM:SS"}

Где:

  • XX - модель робота
  • YY - версия робота
  • YYYY-MM-DD HH:MM:SS - дата производства

Запрос на этот ендпойнт отправляется пользователем без авторизации.

Ответ

Если валидация данных из запроса прошла успешно, то ендпойнт вернет ответ 201 CREATED:

HTTP 201 CREATED
Content-Type: text/html; charset=utf-8
Date:
Server: 
Content-Length:    

Если при валидации данных возникла ошибка, то вернется ответ 400 Bad Request.
При попытке отправки GET-запроса на этот ендпойнт вернется ответ 403 Forbidden.

2. Скачивание файла XLXS

Скачивание файла по URL:
/robots/week/

При GET-запросе на этот URL происходит формирование XLSX-файла. В него записываются данные о количестве произведенных роботов за последние 7 дней, включая сегодняшний. В файле данные расположены на разных страницах, на каждой из которых представлена информация об одной модели робота с детализацией по версии.

Если за этот период времени новых роботов в базе данных не найдено, возникнет ошибка EmptyResultSet "No new robots".

3. Заказы и email-уведомления

Новый клиент

Создать нового клиента через админ-панель Django с указанием его email-адреса.

Новый заказ

Создать новый заказ на робота по URL /order/add/.

Отправка email

При внесении в базу данных информации о произведенном роботе обрабатывается сигнал. Если существует активный заказ на робота данного серийного номера, то отправляется email c уведомлением клиенту того заказа, который был создан раньше других. После отправки email снимается статус активного с этого заказа.

Установка

  1. Скопировать файлы:
$ git clone https://github.com/minaton-ru/robots-service.git
  1. Создать файл .env для переменных окружения DEBUG, SECRET_KEY и для параметров email-сервера. Пример файла:
DEBUG=True
SECRET_KEY=''
EMAIL_HOST=localhost
EMAIL_PORT=25
EMAIL_HOST_USER=user
EMAIL_HOST_PASSWORD=password
  1. Установить зависимости, применить миграции, создать администратора:
$ cd robots-service
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
(venv) $ python manage.py migrate
(venv) $ python manage.py createsuperuser
(venv) $ python manage.py runserver
  1. Через Postman отправить POST-запросы с помощью коллекции robots_service.postman_collection.json.

Тесты

В файлах tests.py находятся тесты.
Для запуска тестов:
python manage.py test

TODO

  • Авторизация при POST-запросе на создание нового робота
  • Возвращать json с данными объекта при успешном POST-запросе на создание нового робота

Небольшая предыстория проекта R4C - Robots for consumers

Давным-давно, в далёкой-далёкой галактике, была компания производящая различных роботов.

Каждый робот (Robot) имел определенную модель выраженную двух-символьной последовательностью(например R2). Одновременно с этим, модель имела различные версии (например D2). Напоминает популярный телефон различных моделей (11,12,13...) и его версии (X,XS,Pro...). Вне компании роботов чаще всего называли по серийному номеру, объединяя модель и версию (например R2-D2).

Также у компании были покупатели (Customer) которые периодически заказывали того или иного робота.

Когда роботов не было в наличии - заказы покупателей (Order) попадали в список ожидания.


Что делает данный код?

Это заготовка для сервиса, который ведет учет произведенных роботов,а также выполняет некие операции связанные с этим процессом.

Сервис нацелен на удовлетворение потребностей трёх категорий пользователей:

  • Технические специалисты компании. Они будут присылать информацию
  • Менеджмент компании. Они будут запрашивать информацию
  • Клиенты. Им будут отправляться информация