# 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:**
```json
[
{
"Name": "POS-80",
"DriverName": "Generic / Text Only",
"PrinterStatus": 0
},
{
"Name": "Microsoft Print to PDF",
"DriverName": "Microsoft Print To PDF",
"PrinterStatus": 0
}
]
```
> Nota: atualmente esse endpoint repassa o resultado do PowerShell `Get-Printer` (Windows) com chaves em PascalCase.
---
### 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):**
```json
{
"html": "
Minha Etiqueta
...",
"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.
}
```
- **Exemplo de Resposta:**
```json
{
"success": true,
"message": "Tarefa enviada para a fila de impressão",
"jobId": "123"
}
```
- **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):**
```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.
}
```
- **Exemplo de Resposta:**
```json
{
"success": true,
"message": "Print successful!"
}
```
## Tipos (TypeScript Interfaces)
Se estiver usando TypeScript no Frontend, utilize estas interfaces:
```typescript
export interface Printer {
Name: string;
DriverName?: string;
PrinterStatus?: number;
}
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;
}
export interface PrintHtmlResponse {
success: boolean;
message: string;
jobId?: string;
}
export interface PrintTextResponse {
success: boolean;
message: 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.