Skip to content

blakkheart/printer_test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🖨 Printer API 🖨

Описание

  1. Сервис получает информацию о новом заказе из ERP, создаёт в БД чеки для всех принтеров точки, указанной в заказе, и ставит асинхронные задачи на генерацию PDF-файлов для этих чеков. Если у точки нет ни одного принтера - возвращает ошибку. Если чеки для данного заказа уже были созданы - возвращает ошибку.
  2. Асинхронный worker с помощью wkhtmltopdf генерируют PDF-файл из HTML-шаблона. Имя файла имеет следующий вид <ID заказа>_<тип чека>.pdf (123456_client.pdf).
  3. Приложение опрашивает сервис на наличие новых чеков. Опрос происходит по следующему пути: сначала запрашивается список чеков, которые уже сгенерированы для конкретного принтера, после скачивается PDF-файл для каждого чека и отправляется на печать.

enter image description here

Стэк технологий

  • Django — база приложения.
  • DRF — для реализации API.
  • PostgreSQL — в качестве базы данных.
  • wkhtmltopdf — для генерации PDF из HTML.
  • Requests — для работы с wkhtmltopdf.
  • Redis — для работы Celery.
  • Celery — для реализации выполнения фоновых задач в связке с wkhtmltopdf.
  • Docker — контейнеризация приложения.
  • Nginx — для раздачи статики в docker.

Установка

  1. Склонируйте репозиторий:
git clone https://github.com/blakkheart/printer_test_task.git
  1. Перейдите в директорию проекта:
cd printer_test_task
  1. Установите и активируйте виртуальное окружение:
    • Windows
    python -m venv venv
    source venv/Scripts/activate
    • Linux/macOS
    python3 -m venv venv
    source venv/bin/activate
  2. Обновите pip:
    • Windows
    (venv) python -m pip install --upgrade pip
    • Linux/macOS
    (venv) python3 -m pip install --upgrade pip
  3. Установите зависимости из файла requirements.txt:
    (venv) pip install -r requirements.txt

Создайте и заполните файл .env по примеру с файлом .env.example, который находится в корневой директории.

Использование

  1. Введите команду для запуска докер-контейнера:
    docker compose up
  2. Соберите и скопируйте статику:
    docker compose exec backend python manage.py collectstatic
    docker compose exec backend cp -r /forfar_app/static/. /backend_static/static/

Если все сделано корректно, сервер запустится по адресу localhost:8000 и вы сможете получить доступ к API. Доступны эндпоинты:

  • localhost:8000/create_checks/ — POST запрос
  • localhost:8000/new_checks/?api_key=<API_KEY> — GET запрос
  • localhost:8000/check/?api_key=<API_KEY>&check_id=<CHECK_ID> — GET запрос
  • localhost:8000/admin/

API

Описание доступных методов находится в файле api.yml (swagger-спецификация). Можно отрендерить через онлайн редактор или через соответствующий плагин для PyCharm или VSCode.

Дополнительно

При запуске сервера автоматические создаются и применяются миграции, а также загружаются фикстуры.

Также вы можете создать суперпользователя и изменять значения через админ-панель по адресу localhost:8000/admin/ :

docker compose exec backend python manage.py createsuperuser