svr-imp/API_CONTRACTS.md

3.0 KiB

Documentação da API de Impressão

Esta API permite listar impressoras disponíveis no servidor (Windows) e enviar comandos de impressão de texto simples ou layouts HTML (etiquetas).

URL Base: http://localhost:3000 Swagger UI: http://localhost:3000/api

Endpoints

1. Listar Impressoras

Retorna a lista de impressoras instaladas no servidor onde a API está rodando.

  • Método: GET
  • Rota: /printer/list
  • Exemplo de Resposta:
[
  {
    "name": "POS-80",
    "portName": "USB001",
    "driverName": "Generic / Text Only",
    "printerStatus": 0,
    "deviceId": "POS-80"
  },
  {
    "name": "Microsoft Print to PDF",
    "portName": "PORTPROMPT:",
    "driverName": "Microsoft Print To PDF",
    "printerStatus": 0
  }
]

2. Imprimir HTML (Etiquetas/Layouts)

Converte um código HTML (com suporte a Tailwind CSS) para PDF e imprime na impressora selecionada via Fila de Processamento (BullMQ).

  • Método: POST
  • Rota: /printer/print-html ou /printer/:printerName/print-html
  • Corpo da Requisição (JSON):
{
  "html": "<div class='text-xl font-bold'>Minha Etiqueta</div>...",
  "printerName": "POS-80", // Opcional se passado na URL
  "width": "60mm", // Opcional. Largura do papel/etiqueta. Default: 80mm
  "height": "40mm", // Opcional. Altura da etiqueta. Default: auto
  "jobId": "meu-id-unico-123" // Opcional. ID para idempotência na fila.
}
  • Detalhes:
    • O backend injeta automaticamente o script do Tailwind CSS.
    • O HTML é renderizado via Puppeteer (Chrome headless).
    • Tarefas são processadas de forma assíncrona via Redis/BullMQ.

3. Imprimir Texto Simples (ESC/POS)

Envia comandos de texto diretamente para a impressora. Ideal para cupons simples e rápidos.

  • Método: POST
  • Rota: /printer/print ou /printer/:printerName/print
  • Corpo da Requisição (JSON):
{
  "lines": [
    "--------------------------------",
    "       CUPOM FISCAL       ",
    "--------------------------------",
    "Item 1 ................. R$ 10,00"
  ],
  "alignment": "center", // "left", "center", "right". Default: left
  "upsideDown": false, // Se true, imprime de cabeça para baixo
  "printerInterface": "POS-80" // Opcional se passado na URL. Suporta "tcp://192.168.1.100" ou nome da impressora.
}

Tipos (TypeScript Interfaces)

Se estiver usando TypeScript no Frontend, utilize estas interfaces:

export interface Printer {
  name: string;
  portName?: string;
  driverName?: string;
  printerStatus?: number;
  deviceId?: string;
}

export interface PrintHtmlPayload {
  html: string;
  printerName: string;
  width?: string;
  height?: string;
  jobId?: string;
}

export interface PrintTextPayload {
  lines: string[];
  alignment?: 'left' | 'center' | 'right';
  upsideDown?: boolean;
  printerInterface?: string;
}

Swagger

A documentação interativa completa (OpenAPI) está disponível em /api. Lá você pode testar todos os endpoints e ver os esquemas detalhados de cada DTO.