- Сервис получает информацию о новом заказе из ERP, создаёт в БД чеки для всех принтеров точки, указанной в заказе, и ставит асинхронные задачи на генерацию PDF-файлов для этих чеков. Если у точки нет ни одного принтера - возвращает ошибку. Если чеки для данного заказа уже были созданы - возвращает ошибку.
- Асинхронный worker с помощью wkhtmltopdf генерируют PDF-файл из HTML-шаблона. Имя файла имеет следующий вид <ID заказа>_<тип чека>.pdf (123456_client.pdf).
- Приложение опрашивает сервис на наличие новых чеков. Опрос происходит по следующему пути: сначала запрашивается список чеков, которые уже сгенерированы для конкретного принтера, после скачивается PDF-файл для каждого чека и отправляется на печать.
- Django — база приложения.
- DRF — для реализации API.
- PostgreSQL — в качестве базы данных.
- wkhtmltopdf — для генерации PDF из HTML.
- Requests — для работы с wkhtmltopdf.
- Redis — для работы Celery.
- Celery — для реализации выполнения фоновых задач в связке с wkhtmltopdf.
- Docker — контейнеризация приложения.
- Nginx — для раздачи статики в docker.
- Склонируйте репозиторий:
git clone https://github.com/blakkheart/printer_test_task.git
- Перейдите в директорию проекта:
cd printer_test_task
- Установите и активируйте виртуальное окружение:
- Windows
python -m venv venv source venv/Scripts/activate
- Linux/macOS
python3 -m venv venv source venv/bin/activate
- Обновите pip:
- Windows
(venv) python -m pip install --upgrade pip
- Linux/macOS
(venv) python3 -m pip install --upgrade pip
- Установите зависимости из файла requirements.txt:
(venv) pip install -r requirements.txt
Создайте и заполните файл .env по примеру с файлом .env.example, который находится в корневой директории.
- Введите команду для запуска докер-контейнера:
docker compose up
- Соберите и скопируйте статику:
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.yml (swagger-спецификация). Можно отрендерить через онлайн редактор или через соответствующий плагин для PyCharm или VSCode.
При запуске сервера автоматические создаются и применяются миграции, а также загружаются фикстуры.
Также вы можете создать суперпользователя и изменять значения через админ-панель по адресу localhost:8000/admin/ :
docker compose exec backend python manage.py createsuperuser