pdf: fix route
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
61a1631519
commit
09405409a2
6 files changed
+190
-3
No files matched your search
+100
@@ -0,0 +1,100 @@
|
|||||||
|
# Passos para ativar a funcionalidade de PDF
|
||||||
|
|
||||||
|
## 1. Instalar Dependências
|
||||||
|
|
||||||
|
Execute o seguinte comando para instalar todas as dependências necessárias:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install pdf-lib pdf-parse pdf2pic tesseract.js
|
||||||
|
npm install --save-dev @types/pdf-parse
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Executar Migration do Banco de Dados
|
||||||
|
|
||||||
|
Execute a migration para criar a tabela de operações de PDF:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx prisma migrate dev --name add_operacoes_pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou simplesmente:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run prisma:migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Gerar Cliente Prisma
|
||||||
|
|
||||||
|
Gere o cliente Prisma atualizado:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run prisma:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Criar Diretórios
|
||||||
|
|
||||||
|
Os diretórios serão criados automaticamente, mas você pode criá-los manualmente:
|
||||||
|
|
||||||
|
**No Windows (PowerShell):**
|
||||||
|
```powershell
|
||||||
|
New-Item -Path "storage\temp\pdf-ops" -ItemType Directory -Force
|
||||||
|
New-Item -Path "storage\pdf-output" -ItemType Directory -Force
|
||||||
|
New-Item -Path "storage\temp\uploads" -ItemType Directory -Force
|
||||||
|
```
|
||||||
|
|
||||||
|
**No Linux/Mac:**
|
||||||
|
```bash
|
||||||
|
mkdir -p storage/temp/pdf-ops
|
||||||
|
mkdir -p storage/pdf-output
|
||||||
|
mkdir -p storage/temp/uploads
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Reiniciar o Servidor
|
||||||
|
|
||||||
|
Após instalar as dependências e executar as migrations, reinicie o servidor:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev:full
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou apenas o backend:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run server
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verificação
|
||||||
|
|
||||||
|
Após seguir todos os passos:
|
||||||
|
|
||||||
|
1. Acesse a aplicação no navegador
|
||||||
|
2. Faça login
|
||||||
|
3. Clique no item "PDFs" no menu lateral
|
||||||
|
4. Teste a funcionalidade de compressão enviando um PDF
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Se continuar dando erro 404:
|
||||||
|
|
||||||
|
1. Verifique se o servidor foi reiniciado após as mudanças
|
||||||
|
2. Verifique se as dependências foram instaladas corretamente
|
||||||
|
3. Verifique os logs do servidor para erros de importação
|
||||||
|
|
||||||
|
### Se der erro de módulo não encontrado:
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm run prisma:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Se der erro no banco de dados:
|
||||||
|
|
||||||
|
Execute:
|
||||||
|
```bash
|
||||||
|
npx prisma migrate reset
|
||||||
|
npx prisma migrate dev
|
||||||
|
npm run prisma:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
**ATENÇÃO:** O comando `migrate reset` apaga todos os dados do banco!
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import { PrismaClient } from '@prisma/client';
|
||||||
import { PDFService } from '../services/pdfService';
|
import { PDFService } from '../../src/services/pdfService';
|
||||||
import multer from 'multer';
|
import multer from 'multer';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs/promises';
|
import fs from 'fs/promises';
|
||||||
|
|||||||
@@ -22,12 +22,13 @@ CREATE TABLE "operacoes_pdf" (
|
|||||||
"detalhesOCR" JSONB,
|
"detalhesOCR" JSONB,
|
||||||
"tempoProcessamento" INTEGER,
|
"tempoProcessamento" INTEGER,
|
||||||
"criadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
"criadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
"atualizadoEm" TIMESTAMP(3) NOT NULL,
|
"atualizadoEm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
CONSTRAINT "operacoes_pdf_pkey" PRIMARY KEY ("id")
|
CONSTRAINT "operacoes_pdf_pkey" PRIMARY KEY ("id")
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Adicionar foreign key para usuariosALTER TABLE "operacoes_pdf" ADD CONSTRAINT "operacoes_pdf_usuarioId_fkey" FOREIGN KEY ("usuarioId") REFERENCES "usuarios"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
-- Adicionar foreign key para usuarios
|
||||||
|
ALTER TABLE "operacoes_pdf" ADD CONSTRAINT "operacoes_pdf_usuarioId_fkey" FOREIGN KEY ("usuarioId") REFERENCES "usuarios"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
-- Criar índice para melhor performance nas consultas
|
-- Criar índice para melhor performance nas consultas
|
||||||
CREATE INDEX "operacoes_pdf_usuarioId_idx" ON "operacoes_pdf"("usuarioId");
|
CREATE INDEX "operacoes_pdf_usuarioId_idx" ON "operacoes_pdf"("usuarioId");
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import {
|
|||||||
CurrencyDollarIcon,
|
CurrencyDollarIcon,
|
||||||
CalculatorIcon,
|
CalculatorIcon,
|
||||||
BriefcaseIcon,
|
BriefcaseIcon,
|
||||||
|
DocumentDuplicateIcon,
|
||||||
} from "@heroicons/react/24/outline";
|
} from "@heroicons/react/24/outline";
|
||||||
import { Menu, Transition } from "@headlessui/react";
|
import { Menu, Transition } from "@headlessui/react";
|
||||||
import api from "../../services/api";
|
import api from "../../services/api";
|
||||||
@@ -91,6 +92,7 @@ export const MainLayout: React.FC = () => {
|
|||||||
{ path: "/atendimentos", label: "Atendimentos", icon: UserIcon },
|
{ path: "/atendimentos", label: "Atendimentos", icon: UserIcon },
|
||||||
{ path: "/tarefas", label: "Tarefas", icon: ClipboardDocumentCheckIcon },
|
{ path: "/tarefas", label: "Tarefas", icon: ClipboardDocumentCheckIcon },
|
||||||
{ path: "/documentos", label: "Documentos", icon: DocumentTextIcon },
|
{ path: "/documentos", label: "Documentos", icon: DocumentTextIcon },
|
||||||
|
{ path: "/pdf", label: "PDFs", icon: DocumentDuplicateIcon },
|
||||||
{
|
{
|
||||||
path: null,
|
path: null,
|
||||||
label: "Cálculos",
|
label: "Cálculos",
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import indicesMonetariosRoutes from './routes/indicesMonetarios';
|
|||||||
import pensaoAlimenticiaRouter from './routes/pensaoAlimenticia'; // Importar router de pensão alimentícia
|
import pensaoAlimenticiaRouter from './routes/pensaoAlimenticia'; // Importar router de pensão alimentícia
|
||||||
import financeiroPainelRoutes from './routes/financeiroPainel'; // Importar rotas do financeiro painel
|
import financeiroPainelRoutes from './routes/financeiroPainel'; // Importar rotas do financeiro painel
|
||||||
import audienciasRoutes from './routes/audiencias'; // Importar rotas de audiências
|
import audienciasRoutes from './routes/audiencias'; // Importar rotas de audiências
|
||||||
|
import pdfRoutes from './routes/pdf'; // Importar rotas de PDF
|
||||||
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
@@ -1482,3 +1483,4 @@ app.use('/api/indices', indicesMonetariosRoutes);
|
|||||||
app.use('/api/pensao-alimenticia', pensaoAlimenticiaRouter);
|
app.use('/api/pensao-alimenticia', pensaoAlimenticiaRouter);
|
||||||
app.use('/api/financeiro-painel', financeiroPainelRoutes); // Adicionar uso das rotas do financeiro painel
|
app.use('/api/financeiro-painel', financeiroPainelRoutes); // Adicionar uso das rotas do financeiro painel
|
||||||
app.use('/api/audiencias', audienciasRoutes); // Adicionar uso das rotas de audiências
|
app.use('/api/audiencias', audienciasRoutes); // Adicionar uso das rotas de audiências
|
||||||
|
app.use('/api/pdf', pdfRoutes); // Adicionar uso das rotas de PDF
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
import express from 'express';
|
||||||
|
import { PDFController, uploadMiddleware } from '../../backend/controllers/pdfController';
|
||||||
|
import { authMiddleware } from '../../middleware/auth';
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotas para manipulação de PDF
|
||||||
|
* Todas as rotas requerem autenticação
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Comprime PDFs
|
||||||
|
router.post(
|
||||||
|
'/compress',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 10),
|
||||||
|
PDFController.compress
|
||||||
|
);
|
||||||
|
|
||||||
|
// Divide PDF
|
||||||
|
router.post(
|
||||||
|
'/split',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 1),
|
||||||
|
PDFController.split
|
||||||
|
);
|
||||||
|
|
||||||
|
// Mescla PDFs
|
||||||
|
router.post(
|
||||||
|
'/merge',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 50),
|
||||||
|
PDFController.merge
|
||||||
|
);
|
||||||
|
|
||||||
|
// Converte PDF para imagens
|
||||||
|
router.post(
|
||||||
|
'/pdf-to-images',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 1),
|
||||||
|
PDFController.pdfToImages
|
||||||
|
);
|
||||||
|
|
||||||
|
// Converte imagens para PDF
|
||||||
|
router.post(
|
||||||
|
'/images-to-pdf',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 100),
|
||||||
|
PDFController.imagesToPDF
|
||||||
|
);
|
||||||
|
|
||||||
|
// Realiza OCR em PDF
|
||||||
|
router.post(
|
||||||
|
'/ocr',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 1),
|
||||||
|
PDFController.performOCR
|
||||||
|
);
|
||||||
|
|
||||||
|
// Obtém informações de um PDF
|
||||||
|
router.post(
|
||||||
|
'/info',
|
||||||
|
authMiddleware,
|
||||||
|
uploadMiddleware.array('files', 1),
|
||||||
|
PDFController.getInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
// Obtém histórico de operações
|
||||||
|
router.get(
|
||||||
|
'/history',
|
||||||
|
authMiddleware,
|
||||||
|
PDFController.getHistory
|
||||||
|
);
|
||||||
|
|
||||||
|
// Download de arquivo processado
|
||||||
|
router.get(
|
||||||
|
'/download/:operacaoId/:fileIndex',
|
||||||
|
authMiddleware,
|
||||||
|
PDFController.downloadFile
|
||||||
|
);
|
||||||
|
|
||||||
|
export default router;
|
||||||
Reference in new issue
Block a user