Endpoints de Exportação
Endpoints de Exportação
Seção intitulada “Endpoints de Exportação”Endpoints de API para exportar sessões de briefing como documentos PDF e formatos futuros.
GET /api/export/pdf/[sessionId]
Seção intitulada “GET /api/export/pdf/[sessionId]”Gera e faz download de um documento PDF a partir de uma sessão de briefing concluída.
Fonte: src/app/api/export/pdf/[sessionId]/route.ts
Requisição
Seção intitulada “Requisição”| Parâmetro | Local | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
sessionId | Path | string | Sim | ID da sessão de briefing a exportar |
Autenticação: Obrigatória via auth() de @/lib/auth. Ignorada quando ENABLE_DEV_AUTH=true.
Resposta
Seção intitulada “Resposta”Sucesso 200:
| Header | Valor |
|---|---|
| Content-Type | application/pdf |
| Content-Disposition | attachment; filename="briefing-{short-id}.pdf" |
Corpo: dados binários brutos do PDF.
Erros:
| Status | Corpo | Causa |
|---|---|---|
| 401 | { error: 'Unauthorized' } | Sessão de autenticação ausente ou inválida |
| 404 | { error: 'Session not found' } | Nenhum bloco existe para o sessionId informado |
Exemplo
Seção intitulada “Exemplo”# Baixar PDF do briefing (requer cookie de autenticação)curl -o briefing.pdf \ -H "Cookie: next-auth.session-token=..." \ http://localhost:3000/api/export/pdf/abc-12345No browser, o download é acionado navegando para a URL ou usando window.open():
window.open(`/api/export/pdf/${sessionId}`, '_blank');Pipeline de Geração do PDF
Seção intitulada “Pipeline de Geração do PDF”O PDF é gerado no lado do servidor por generateBriefingPDF() em src/lib/pdf/generator.ts:
- Carregar blocos — Busca todos os blocos da sessão no SQLite via
getBlocksDB() - Extrair por tipo — Encontra os tipos
delivery,diagnosis,risk_balance,precedente outros - Construir o documento — Cria uma instância do jsPDF com tamanho de página A4
- Renderizar seções — Renderiza cada tipo de bloco em seções do PDF com formatação adequada
- Tratar overflow — Usa
checkPage()para detectar quando o conteúdo excede a altura da página e adiciona novas páginas - Quebra de texto — Usa
doc.splitTextToSize(text, maxWidth)para conteúdo de texto longo - Retornar bytes — Gera
new Uint8Array(doc.output('arraybuffer'))
Futuro: Exportação DOCX
Seção intitulada “Futuro: Exportação DOCX”Planejado para v0.5 (Issue #158):
- Exportar briefing como memorando jurídico profissional em formatos PDF e DOCX
- DOCX usará um template com formatação adequada para documentos jurídicos
- Suportará o mesmo pipeline de renderização bloco a seção usado no PDF