Skip to content

Django service manging new manufactured products (in this case, robots). Generate production stats to XLS file. Email notification for new robot.

License

Notifications You must be signed in to change notification settings

minaton-ru/robots-service

Repository files navigation

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

Приложение позволяет вести учет новых произведенных изделий (в данном случае - роботов). Формировать статистику по производству в виде загружаемого файла 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) попадали в список ожидания.


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

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

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

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

About

Django service manging new manufactured products (in this case, robots). Generate production stats to XLS file. Email notification for new robot.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published