Serviço profissional de processamento de arquivos em Go para extração de texto de PDFs, imagens e outros tipos de arquivo.
backend-fileprocessing/
├── cmd/
│ └── server/
│ └── main.go # Ponto de entrada da aplicação
├── internal/
│ ├── config/
│ │ └── config.go # Configurações da aplicação
│ ├── handlers/
│ │ ├── file_handler.go # Handlers para processamento de arquivos
│ │ └── health_handler.go # Handlers para health checks
│ ├── middleware/
│ │ ├── cors.go # Middleware CORS
│ │ ├── logger.go # Middleware de logging
│ │ └── recovery.go # Middleware de recovery
│ ├── models/
│ │ └── models.go # Estruturas de dados
│ ├── processors/
│ │ ├── interface.go # Interface para processadores
│ │ ├── pdf_processor.go # Processador de PDFs
│ │ ├── image_processor.go # Processador de imagens
│ │ ├── text_processor.go # Processador de textos
│ │ └── docx_processor.go # Processador de DOCX
│ └── services/
│ └── file_service.go # Serviço de processamento
├── go.mod # Dependências Go
├── go.sum # Checksums das dependências
├── Makefile # Comandos de desenvolvimento
├── Dockerfile # Container Docker
├── vercel.json # Configuração Vercel
└── README.md # Este arquivo
- PDF: Extração de texto nativa + OCR com Tesseract
- Imagens: OCR para PNG, JPG, JPEG, GIF, BMP, WEBP, TIFF
- Texto: Leitura direta de arquivos TXT
- DOCX: Extração de texto nativa + OCR como fallback
- API REST: Interface profissional com versionamento
- Middleware: CORS, Logging, Recovery
- Deploy: Suporte para Vercel, Railway, Render
- Go 1.21+
- Tesseract OCR instalado no sistema
- Bibliotecas de idioma (português e inglês)
# Via Chocolatey
choco install tesseract
# Ou baixar do site oficial
# https://github.com/UB-Mannheim/tesseract/wikisudo apt-get update
sudo apt-get install tesseract-ocr tesseract-ocr-por tesseract-ocr-engbrew install tesseract tesseract-lang- Clone o repositório
git clone <seu-repositorio>
cd backend-fileprocessing- Instale as dependências
make deps- Execute o servidor
make runmake build # Build da aplicação
make run # Executar aplicação
make dev # Executar com hot reload (requer air)
make deps # Instalar dependências
make test # Executar testes
make test-coverage # Executar testes com coverage
make lint # Executar linter
make format # Formatar código
make clean # Limpar arquivos de build
make install-tools # Instalar ferramentas de desenvolvimento
make help # Mostrar ajudamake install-toolshttp://localhost:9091/api/v1
http://localhost:9091/swagger/index.html
GET /healthResposta:
{
"success": true,
"data": {
"status": "ok",
"service": "backend-fileprocessing",
"version": "1.0.0",
"timestamp": "2025-10-16T09:30:00Z",
"uptime": "2h30m15s"
}
}GET /statusResposta:
{
"success": true,
"data": {
"service": "backend-fileprocessing",
"version": "1.0.0",
"status": "running",
"timestamp": "2025-10-16T09:30:00Z",
"environment": "debug",
"features": [
"PDF Processing",
"Image OCR",
"Text Extraction",
"DOCX Support",
"REST API"
]
}
}POST /files/process
Content-Type: multipart/form-dataParâmetros:
file: Arquivo para processar (máximo 5MB)
Resposta de Sucesso:
{
"success": true,
"data": {
"text": "Texto extraído do arquivo...",
"info": {
"fileName": "documento.pdf",
"fileType": ".pdf",
"fileSize": 1024000,
"processedAt": "2025-10-16 09:30:00",
"processingTime": "1.234s"
}
}
}Resposta de Erro:
{
"success": false,
"error": {
"code": "UNSUPPORTED_FILE_TYPE",
"message": "Tipo de arquivo não suportado: .xyz",
"details": "Tipos suportados: .pdf, .png, .jpg, .jpeg, .gif, .bmp, .webp, .tiff, .txt, .docx"
}
}GET /files/supported-typesResposta:
{
"success": true,
"data": {
"documents": [".pdf", ".txt", ".docx"],
"images": [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".tiff"],
"maxSize": "5MB",
"maxSizeBytes": 5242880
}
}PORT: Porta do servidor (padrão: 8080)GIN_MODE: Modo do Gin (release, debug, test)LOG_LEVEL: Nível de log (debug, info, warn, error)
# Health check
curl http://localhost:9091/api/v1/health
# Status detalhado
curl http://localhost:9091/api/v1/status
# Processar arquivo
curl -X POST -F "file=@documento.pdf" http://localhost:9091/api/v1/files/process
# Listar tipos suportados
curl http://localhost:9091/api/v1/files/supported-types
# Acessar documentação Swagger
open http://localhost:9091/swagger/index.html# Executar todos os testes
make test
# Executar testes com coverage
make test-coverage
# Executar testes específicos
go test -v ./internal/processors/- Deploy automático
vercel --prod- Configuração manual
- Conectar repositório GitHub
- Configurar build command:
go build -o main cmd/server/main.go - Configurar output directory:
.
- Deploy via GitHub
- Conectar repositório
- Configurar variáveis de ambiente
- Deploy automático
- Deploy via GitHub
- Conectar repositório
- Configurar build command:
go build -o main cmd/server/main.go - Configurar start command:
./main
Para integrar com o backend do NewsTrust, modifique o FileProcessor.js:
async processPdfBuffer(buffer) {
try {
const formData = new FormData();
formData.append('file', new Blob([buffer]), 'document.pdf');
const response = await fetch('https://seu-servico-golang.vercel.app/api/v1/files/process', {
method: 'POST',
body: formData
});
const result = await response.json();
if (result.success) {
return result.data.text;
} else {
throw new Error(result.error.message);
}
} catch (error) {
console.error('Erro ao processar PDF:', error);
return `[PDF] - Erro no processamento: ${error.message}`;
}
}O serviço gera logs estruturados:
- Inicialização do servidor
- Processamento de arquivos
- Erros de OCR
- Tempo de processamento
- Métricas de performance
- Tamanho máximo de arquivo: 5MB
- Timeout de processamento: 30 segundos
- Memória limitada em ambientes serverless
- Tesseract deve estar instalado no sistema
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Para suporte, abra uma issue no repositório ou entre em contato com a equipe de desenvolvimento.