120 lines
4.3 KiB
Markdown
120 lines
4.3 KiB
Markdown
# Serviço de Impressão
|
|
|
|
Este documento descreve as especificações técnicas, endpoints e padrões de arquitetura do Microserviço de Impressão. O sistema é projetado para o processamento assíncrono de documentos e integração com hardware de impressão local.
|
|
|
|
## Arquitetura e Fluxo de Dados
|
|
|
|
A solução utiliza uma arquitetura baseada em filas para assegurar a resiliência e a escalabilidade do processamento de impressão.
|
|
|
|
### Componentes Principais
|
|
|
|
1. **API REST**: Interface para recepção de requisições de impressão.
|
|
2. **BullMQ (Redis)**: Engine de mensageria para gestão de filas e persistência temporária de tarefas (jobs).
|
|
3. **Queue Worker (PrinterProcessor)**: Componente responsável por consumir a fila, realizar a renderização de documentos via Puppeteer e comunicar-se com os drivers do sistema operacional.
|
|
4. **Persistência (Oracle)**: Integração via TypeORM para registro de dados operacionais em base de dados corporativa.
|
|
|
|
### Fluxo de Operação
|
|
|
|
1. A API recebe uma solicitação de impressão via HTTP.
|
|
2. A tarefa é registrada na fila `printer` gerenciada pelo BullMQ.
|
|
3. O `PrinterProcessor` (WorkerHost) processa a tarefa, converte o conteúdo HTML em PDF e envia para o spooler de impressão.
|
|
|
|
---
|
|
|
|
## Configurações do Sistema
|
|
|
|
### Variáveis de Ambiente
|
|
|
|
O serviço utiliza as seguintes definições no arquivo `.env`:
|
|
|
|
| Variável | Descrição | Exemplo |
|
|
| :------------------- | :-------------------------------------------- | :------------------------ |
|
|
| `BODY_LIMIT` | Limite do body (JSON/urlencoded) | `2mb` |
|
|
| `REDIS_HOST` | Endereço do servidor Redis | `localhost` |
|
|
| `REDIS_PORT` | Porta do servidor Redis | `6379` |
|
|
| `REDIS_PASSWORD` | Senha do Redis (opcional) | `minha-senha` |
|
|
| `DB_ENABLED` | Habilita inicialização do Oracle/TypeORM | `true` |
|
|
| `DB_USERNAME` | Usuário do Banco de Dados Oracle | `admin` |
|
|
| `DB_PASSWORD` | Senha do Banco de Dados Oracle | `1234` |
|
|
| `DB_CONNECT_STRING` | String de conexão Oracle | `(DESCRIPTION=...)` |
|
|
| `DB_RETRY_ATTEMPTS` | Tentativas de conexão ao iniciar | `5` |
|
|
| `DB_RETRY_DELAY_MS` | Delay base (ms) entre tentativas | `2000` |
|
|
| `ORACLE_CLIENT_PATH` | Caminho do Oracle Instant Client (thick mode) | `C:\oracle\instantclient` |
|
|
|
|
### Pré-requisitos
|
|
|
|
- Node.js >= 20.0.0
|
|
- Redis Server
|
|
- Oracle Instant Client (Thick Mode habilitado)
|
|
|
|
---
|
|
|
|
## Endpoints da API
|
|
|
|
### 1. Sistema e Inventário
|
|
|
|
#### Listar Impressoras Disponíveis
|
|
|
|
Retorna a lista de periféricos de impressão configurados no host.
|
|
|
|
- **Método:** `GET`
|
|
- **Endpoint:** `/printer/list`
|
|
- **Resposta:** `PrinterDto[]`
|
|
|
|
### 2. Operações de Impressão
|
|
|
|
#### Impressão de Conteúdo HTML
|
|
|
|
Enfileira a conversão de HTML para PDF seguido da impressão física.
|
|
|
|
- **Método:** `POST`
|
|
- **Endpoint:** `/printer/:printerName/print-html`
|
|
- **Payload:**
|
|
|
|
```json
|
|
{
|
|
"html": "string",
|
|
"width": "string (ex: 80mm)",
|
|
"height": "string (ex: 40mm)",
|
|
"jobId": "string (opcional)"
|
|
}
|
|
```
|
|
|
|
#### Impressão Direta (ESC/POS)
|
|
|
|
Envio de comandos diretamente para impressoras térmicas.
|
|
|
|
- **Método:** `POST`
|
|
- **Endpoint:** `/printer/:printerName/print`
|
|
- **Payload:**
|
|
|
|
```json
|
|
{
|
|
"lines": ["string"],
|
|
"alignment": "left | center | right",
|
|
"upsideDown": "boolean"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Observabilidade e Gestão
|
|
|
|
### Bull Board
|
|
|
|
A interface de monitoramento em tempo real das filas está disponível no endpoint:
|
|
`http://localhost:3000/queues`
|
|
|
|
Permite a visualização de tarefas ativas, concluídas e falhas, além da reinjeção manual de jobs.
|
|
|
|
### Swagger
|
|
|
|
A documentação interativa (OpenAPI) está disponível em:
|
|
`http://localhost:3000/api`
|
|
|
|
---
|
|
|
|
## Estrutura Técnica
|
|
|
|
O projeto é construído sobre o framework NestJS, utilizando `@nestjs/bullmq` para a gestão de filas. O processador de impressão é injetado como um provider global no `AppModule` para garantir a execução contínua do worker dentro do contexto da aplicação.
|