svr-imp/README.md

120 lines
4.3 KiB
Markdown
Raw Normal View History

# Serviço de Impressão
2017-02-25 14:16:12 +00:00
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.
2017-02-25 14:16:12 +00:00
## Arquitetura e Fluxo de Dados
2018-03-26 18:42:17 +00:00
A solução utiliza uma arquitetura baseada em filas para assegurar a resiliência e a escalabilidade do processamento de impressão.
2018-03-26 18:42:17 +00:00
### 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
2017-05-14 20:57:43 +00:00
#### Impressão de Conteúdo HTML
2017-12-17 17:36:31 +00:00
Enfileira a conversão de HTML para PDF seguido da impressão física.
2018-03-26 18:42:17 +00:00
- **Método:** `POST`
- **Endpoint:** `/printer/:printerName/print-html`
- **Payload:**
2018-03-26 18:42:17 +00:00
```json
{
"html": "string",
"width": "string (ex: 80mm)",
"height": "string (ex: 40mm)",
"jobId": "string (opcional)"
}
2017-12-17 17:36:31 +00:00
```
#### Impressão Direta (ESC/POS)
2024-10-17 13:02:18 +00:00
Envio de comandos diretamente para impressoras térmicas.
2024-10-17 13:02:18 +00:00
- **Método:** `POST`
- **Endpoint:** `/printer/:printerName/print`
- **Payload:**
2024-10-17 13:02:18 +00:00
```json
{
"lines": ["string"],
"alignment": "left | center | right",
"upsideDown": "boolean"
}
2024-10-17 13:02:18 +00:00
```
---
2024-10-17 13:02:18 +00:00
## Observabilidade e Gestão
2024-08-19 10:26:13 +00:00
### Bull Board
2024-08-19 10:26:13 +00:00
A interface de monitoramento em tempo real das filas está disponível no endpoint:
`http://localhost:3000/queues`
2024-08-19 10:26:13 +00:00
Permite a visualização de tarefas ativas, concluídas e falhas, além da reinjeção manual de jobs.
2018-03-26 17:23:10 +00:00
### Swagger
2017-05-14 20:57:43 +00:00
A documentação interativa (OpenAPI) está disponível em:
`http://localhost:3000/api`
2017-05-14 20:57:43 +00:00
---
2017-10-11 10:29:26 +00:00
## Estrutura Técnica
2017-10-11 10:29:26 +00:00
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.