Серверная часть сервиса для работы с документами, отправляемыми на печать
-
Управление файлами, отправляемыми пользователями на печать
- Создание/удаление файлов
- Редактирование параметров печати
-
Получение файлов со стороны клиента-терминала печати
-
Управление пользователями, которым разрешена печать на принтере
-
Прямое подключение клиентом-терминалом печати
- Генерация QR кодов для быстрой печати
- Отправка команд на мгновенное обновление/перезагрузку терминала
-
Перейдите в папку проекта
-
Создайте виртуальное окружение командой и активируйте его:
foo@bar:~$ python3 -m venv venv foo@bar:~$ source ./venv/bin/activate # На MacOS и Linux foo@bar:~$ venv\Scripts\activate # На Windows
-
Установите библиотеки
(venv) foo@bar:~$ pip install -r requirements.txt (venv) foo@bar:~$ pip install -r requirements.dev.txt
-
Поднимите базу данных
(venv) foo@bar:~$ docker run -d -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust --name db-print_service postgres:15 (venv) foo@bar:~$ alembic upgrade head # Произвести миграции БД
-
Запускайте приложение!
(venv) foo@bar:~$ python -m print_service
DB_DSN=postgresql://postgres@localhost:5432/postgres
– Данные для подключения к БДSTATIC_PATH
- путь до папки, в которой лежит статика.REDIS_DSN
- Данные для подключения к RedisCONTENT_TYPES
- типы принимаемого контента для печатиMAX_SIZE
- Максимальный размер файла в байтахMAX_PAGE_COUNT
- Максимальное количество страниц для печатиSTORAGE_TIME
- Время хранения файла в часахALLOW_STUDENT_NUMBER
- разрешить ли номер студенческого для печатиPIN_SYMBOLS
- символы из которых состоит ПИН-кодPIN_LENGTH
- длина пин-кодаQR_TOKEN_PREFIX
- префикс QR кодаQR_TOKEN_SYMBOLS
- символы из которых состоит QR-кодQR_TOKEN_LENGTH
- Длина QR-кодаQR_TOKEN_TTL
- время жизни QR-кода (время показа)QR_TOKEN_DELAY
- как долго QR-код будет валидным после того, как прошел TTL (исчез с экрана)- Остальные общие для всех АПИ параметры описаны тут
Пользователь
- сущность, у которой есть номер студенческого и профсоюзного билета, а также фамилиюФайл
- сущность, отвечающая за загруженный пользователем файл. Имеет пин-код для скачивания, ссылку на реальный файл (который лежит в static хранилище), а также опции печати и ссылку на пользователья, который его загрузилФакт печати
- сущность для статистики печати. Каждый раз, когда кто-то печатает файл, создается эта сущность со ссылкой на файл и его владельца, а также количеством использованных страниц
-
Обновить список пользователей.
Дернуть ручку
POST /print/is_union_member
, передать json со списком новых пользователей:{ "users": [ { "username": "string", "union_number": "string", "student_number": "string" } ] }
Если пользователь с таким студенческим или профсоюзным уже существует, то вся остальная информация будет заменена. Иначе, создается новый пользователь.
-
Проверить, что пользователь существует в системе Дернуть ручку
GET /print/is_union_member?surname=...&number=...
, передать в query параметрах фамилию и номер профсоюзного билета. Вернет ответ, найден ли пользователь. -
Загрузить файл
Дернуть ручку
POST /print/file
, передать туда json:{ "surname": "Иванов", "number": "1015000", "filename": "filename.pdf", "source": "string", "options": { "pages": "", // "" если распечатать надо все страницы, иначе формат такой: "10-13,16,18,20,21,24,25,27,28,30", можно не сортировать "copies": 1, "two_sided": false } }
Передается пользователь с его проф. билетом. Ручка вернет pin в таком формате:
{ "pin": "OF72I1", "options": { "pages": "", "copies": 1, "two_sided": false } }
Его надо сохранить и отправить еще один запрос на загрузку самого файла: Дернуть ручку
POST /print/file/{pin}
, передать файл в бинарном виде Ручка вернет тот же json, что и предыдущая в случае успехаПосле этого файл готов к печати
-
Получить файл Дернуть ручку
GET /print/file/{pin}
Вернет json:{ "filename": "2021-11-02-ZMNF5V...9.pdf", "options": { "pages": "", "copies": 1, "two_sided": false } }
По ссылке можно скачать файл из static хранилища, options помогают распечтать файл, если запрос идет от принтера
-
Как работает QR Пользователь приходит к терминалу, считывает QR-код, после этого с его устройства идет запрос на
POST /qr
, в котором передается отсканированный QR-код и пин для печатиТерминал подключен к бэкенду через вебсокет. Бэкенд после получения запроса от пользователя в течение некоторого времени отправляет хапрос на печать файла.
-
Ручное обновление и перезагрузка Делается с админским токеном Ручки, соответственно:
POST /admin/update
иPOST /admin/reboot
Спецификация доступна в Swagger UI
-
Основная информация по разработке наших приложений
-
Ссылка на страницу с информацией по разработке print-api