mirror of
https://github.com/dadosfera/maestro.git
synced 2026-11-10 01:59:07 +00:00
REFACTOR: create builder for parser reporterand fix pdf
This commit is contained in:
@@ -61,6 +61,7 @@ import {
|
||||
RegisterDatasetWithMetatadaRequest,
|
||||
} from '@dadosfera/protospack-v2/dist/lib/Catalog/interfaces/messages';
|
||||
import { Response } from 'express';
|
||||
import { TypeParser } from 'src/utils/FileParser/parser-types';
|
||||
|
||||
@ApiTags('Catalog')
|
||||
@ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }])
|
||||
@@ -864,29 +865,24 @@ export class CatalogController {
|
||||
@RequireModule(
|
||||
DADOSFERA_MODULES_KEYS.PII
|
||||
)
|
||||
async getPiiReporter(@User() user: RequestUser, @Res() res: Response, @Query('type') type: "html" | "csv") {
|
||||
async getPiiReporter(@User() user: RequestUser, @Res() res: Response, @Query('type') contentType: TypeParser = "pdf") {
|
||||
this.logger.info('GET pii-reporter');
|
||||
const metadata = PackTheMetadata(user);
|
||||
|
||||
try {
|
||||
const reporter = await this.catalogService.getPiiReporter(metadata, type);
|
||||
|
||||
if (type === "html") {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
} else if (type === "csv") {
|
||||
res.setHeader('Content-Type', 'text/csv');
|
||||
} else if (type === "pdf") {
|
||||
res.setHeader('Content-Type', 'application/pdf');
|
||||
}
|
||||
|
||||
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
||||
const filename = `relatorio-pii-${timestamp}.${type}`;
|
||||
|
||||
const {
|
||||
file,
|
||||
filename,
|
||||
type
|
||||
} = await this.catalogService.getPiiReporter(metadata, contentType);
|
||||
res.setHeader('Content-Disposition', `attachment; filename="${filename}"`);
|
||||
res.setHeader('Content-Type', type);
|
||||
|
||||
return res.send(reporter);
|
||||
// use res.end to send buffer
|
||||
return res.end(file);
|
||||
} catch (error) {
|
||||
this.logger.error(error);
|
||||
console.error(error)
|
||||
this.logger.error(error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import {
|
||||
AddRlsRuleRequest,
|
||||
GetNimbusDashboardsRequest,
|
||||
GetRlsRulesRequest,
|
||||
PiiMetadata,
|
||||
} from '@dadosfera/protospack-v2/dist/lib/Catalog/interfaces/messages';
|
||||
import { writeFileSync } from 'fs';
|
||||
import path from 'path';
|
||||
@@ -40,6 +41,8 @@ import { HtmlParser } from 'src/utils/FileParser/html-parser';
|
||||
import { PiiDto } from './dtos/pii.dto';
|
||||
import { CsvParser } from 'src/utils/FileParser/csv-parser';
|
||||
import { PDFParser } from 'src/utils/FileParser/pdf-parser';
|
||||
import { TypeParser } from 'src/utils/FileParser/parser-types';
|
||||
import { ParserBuilder } from 'src/utils/FileParser/parser.builder';
|
||||
|
||||
class CatalogService implements OnModuleInit {
|
||||
catalogReadService: ReadService.CatalogReadServices;
|
||||
@@ -86,7 +89,8 @@ class CatalogService implements OnModuleInit {
|
||||
)}.dadosfera.ai`;
|
||||
}
|
||||
|
||||
async getPiiReporter(metadata: Metadata, type: "html"| "csv") {
|
||||
async getPiiReporter(metadata: Metadata, type: TypeParser) {
|
||||
this.logger.info('getPiiReporter: ' + type)
|
||||
try {
|
||||
const {
|
||||
data
|
||||
@@ -94,37 +98,29 @@ class CatalogService implements OnModuleInit {
|
||||
this.catalogWriteService.GetPiiReporter({}, metadata)
|
||||
)
|
||||
this.logger.info("Finish grpc call")
|
||||
|
||||
// 3. Ler o template HTML
|
||||
const templatePath = path.join(
|
||||
__dirname,
|
||||
'../../../src/template/pii-reporter.html',
|
||||
);
|
||||
|
||||
this.logger.info("templatePath: " + templatePath);
|
||||
const parser = ParserBuilder.build<PiiMetadata>(type);
|
||||
|
||||
if (type === "html") {
|
||||
const htmlParser = new HtmlParser<PiiDto>(templatePath);
|
||||
return htmlParser.parse(data);
|
||||
} else if (type === "csv") {
|
||||
const csvParser = new CsvParser<PiiDto>();
|
||||
return await csvParser.parse(data)
|
||||
} else if (type === "pdf") {
|
||||
const htmlParser = new HtmlParser<PiiDto>(templatePath);
|
||||
const pdfParser = new PDFParser();
|
||||
const pdf = await pdfParser.parse(htmlParser.parse(data));
|
||||
const pdfPath = path.join(
|
||||
__dirname,
|
||||
'../../../src/template/teste.pdf',
|
||||
);
|
||||
writeFileSync(pdfPath, pdf);
|
||||
return pdf
|
||||
this.logger.info('parser file to: ' + type)
|
||||
const file = await parser.parse(data)
|
||||
this.logger.info('finish parser')
|
||||
const mimeTypes: Record<TypeParser, string> = {
|
||||
'csv': 'text/csv',
|
||||
'html': 'text/html',
|
||||
'pdf': 'application/pdf'
|
||||
}
|
||||
|
||||
throw new Error("Unsupported Type: " + type)
|
||||
|
||||
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
||||
const filename = `relatorio-pii-${timestamp}.${type}`;
|
||||
|
||||
return {
|
||||
file,
|
||||
filename: filename,
|
||||
type: mimeTypes[type]
|
||||
}
|
||||
} catch (error) {
|
||||
this.logger.error(error);
|
||||
this.logger.error(error.message);
|
||||
throw error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user