first commit
This commit is contained in:
commit
c9fb67e751
423 files changed
+53287
No files matched your search
@@ -0,0 +1,99 @@
|
||||
import { provaQueue } from '../workers/ProvaWorker';
|
||||
import { prisma } from '../config/database';
|
||||
import { createHash } from 'crypto';
|
||||
import { PDFDocument, StandardFonts } from 'pdf-lib';
|
||||
import * as OpenTimestamps from 'opentimestamps';
|
||||
import sharp from 'sharp';
|
||||
|
||||
export class ProvaService {
|
||||
private fileValidator: FileValidator;
|
||||
private reportGenerator: ReportGenerator;
|
||||
|
||||
constructor() {
|
||||
this.fileValidator = new FileValidator();
|
||||
this.reportGenerator = new ReportGenerator();
|
||||
}
|
||||
|
||||
async processFile(file: Express.Multer.File, metadata: any) {
|
||||
try {
|
||||
console.log('Iniciando processamento do arquivo:', file.originalname); // Debug log
|
||||
|
||||
// Validar arquivo e metadados
|
||||
if (!file.buffer || !file.originalname) {
|
||||
throw new Error('Arquivo inválido');
|
||||
}
|
||||
|
||||
// Criar registro inicial
|
||||
const prova = await prisma.prova.create({
|
||||
data: {
|
||||
fileName: file.originalname,
|
||||
mimeType: file.mimetype,
|
||||
status: 'PENDENTE',
|
||||
metadata: {
|
||||
...metadata,
|
||||
fileSize: file.size,
|
||||
originalName: file.originalname
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Registro criado com sucesso:', prova.id); // Debug log
|
||||
|
||||
// Adicionar à fila
|
||||
await provaQueue.add('processar-prova', {
|
||||
provaId: prova.id,
|
||||
fileData: file.buffer.toString('base64'),
|
||||
metadata
|
||||
});
|
||||
|
||||
return prova;
|
||||
} catch (error) {
|
||||
console.error('Erro detalhado no processamento:', error);
|
||||
throw new Error(`Erro ao processar arquivo ${file.originalname}: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
private generateChecksums(buffer: Buffer) {
|
||||
return {
|
||||
sha256: createHash('sha256').update(buffer).digest('hex'),
|
||||
sha512: createHash('sha512').update(buffer).digest('hex'),
|
||||
md5: createHash('md5').update(buffer).digest('hex')
|
||||
};
|
||||
}
|
||||
|
||||
private async registerTimestamp(buffer: Buffer) {
|
||||
const digest = createHash('sha256').update(buffer).digest();
|
||||
const timestamp = await OpenTimestamps.stamp(digest);
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
private async processFileByType(file: Express.Multer.File) {
|
||||
if (file.mimetype.startsWith('image/')) {
|
||||
return await this.processImage(file.buffer);
|
||||
}
|
||||
return file.buffer;
|
||||
}
|
||||
|
||||
private async processImage(buffer: Buffer) {
|
||||
return await sharp(buffer)
|
||||
.resize(1200, 900, {
|
||||
fit: 'inside',
|
||||
withoutEnlargement: true
|
||||
})
|
||||
.toBuffer();
|
||||
}
|
||||
|
||||
private async generateReport(data: any) {
|
||||
const pdfDoc = await PDFDocument.create();
|
||||
const page = pdfDoc.addPage();
|
||||
const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
|
||||
|
||||
// Adicionar conteúdo ao PDF
|
||||
// ... implementar a geração do relatório ...
|
||||
|
||||
return {
|
||||
path: '/path/to/report.pdf',
|
||||
buffer: await pdfDoc.save()
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user