diff --git a/dist/routes/csv.js b/dist/routes/csv.js index bc27a7f..5909ec6 100644 --- a/dist/routes/csv.js +++ b/dist/routes/csv.js @@ -1,7 +1,39 @@ 'use strict'; +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; Object.defineProperty(exports, '__esModule', { value: true }); const FileDAO_1 = require('../models/DAO/FileDAO'); const DateUtils_1 = require('../utils/DateUtils'); +const converter = require('json-2-csv'); const ApiResponse_1 = require('../models/ApiResponse'); const csv = (app) => { app.post('/csv', (req, res) => { @@ -106,5 +138,70 @@ const csv = (app) => { res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); }); }); + app.get('/csv/historicaljson', (req, res) => { + const campaign = req.headers.campaign; + const adOpsTeam = req.headers.adopsteam; + const advertiser = req.advertiser; + const adOpsTeamPath = adOpsTeam ? adOpsTeam : 'AdvertiserCampaigns'; + const apiResponse = new ApiResponse_1.ApiResponse(); + if (!campaign) { + apiResponse.responseText = 'Nenhuma campanha foi informada!'; + apiResponse.statusCode = 400; + res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); + return; + } + const filePath = `${advertiser}/${adOpsTeamPath}/${campaign}/historical.json`; + const fileDAO = new FileDAO_1.FileDAO(); + fileDAO + .getFromStore(filePath) + .then((fileContent) => { + const fullJosn = JSON.parse(fileContent.toString()); + delete fullJosn.campaign; + delete fullJosn.adOpsTeam; + const newJson = Object.keys(fullJosn).map((key) => { + return Object.assign(Object.assign({}, fullJosn[key]['input']), fullJosn[key]['result']); + }); + return newJson; + }) + .then((jsonFile) => { + return new Promise((resolve, reject) => { + converter.json2csv( + jsonFile, + (err, csv) => + __awaiter(void 0, void 0, void 0, function* () { + if (err) { + reject(err); + throw Error('Falha na geração do CSV!'); + } + resolve(csv); + }), + { + delimiter: { + field: ',', + }, + } + ); + }); + }) + .then((csvfile) => { + res.setHeader('Content-disposition', 'attachment; filename=data.csv'); + res.set('Content-Type', 'text/csv; charset=utf-8'); + apiResponse.responseText = csvfile; + apiResponse.statusCode = 200; + res.status(apiResponse.statusCode).send(apiResponse.responseText); + }) + .catch((err) => { + if (apiResponse.statusCode === 200) { + apiResponse.statusCode = 500; + } + apiResponse.responseText = 'Falha ao salvar o arquivo!'; + apiResponse.errorMessage = err.message; + }) + .finally(() => { + if (apiResponse.statusCode !== 200) { + res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); + } + }); + }); }; exports.default = csv; diff --git a/src/ts/routes/csv.ts b/src/ts/routes/csv.ts index dea6dfa..decf3e7 100644 --- a/src/ts/routes/csv.ts +++ b/src/ts/routes/csv.ts @@ -1,5 +1,6 @@ import { FileDAO } from '../models/DAO/FileDAO'; import { DateUtils } from '../utils/DateUtils'; +import * as converter from 'json-2-csv'; import { ApiResponse } from '../models/ApiResponse'; const csv = (app: { [key: string]: any }): void => { @@ -70,7 +71,9 @@ const csv = (app: { [key: string]: any }): void => { fileDAO .getFromStore(filePath) .then((file) => { - // const dataFormated = data[0].toString("utf8"); + // converter para csv + // pode ser JSON.parse -> string para json + //JSON.parse(file.toString()) res.setHeader('Content-disposition', 'attachment; filename=template.csv'); res.set('Content-Type', 'text/csv; charset=utf-8'); apiResponse.statusCode = 200; @@ -119,6 +122,78 @@ const csv = (app: { [key: string]: any }): void => { res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); }); }); + + app.get('/csv/historicaljson', (req: { [key: string]: any }, res: { [key: string]: any }) => { + const campaign = req.headers.campaign; + const adOpsTeam = req.headers.adopsteam; + const advertiser = req.advertiser; + const adOpsTeamPath = adOpsTeam ? adOpsTeam : 'AdvertiserCampaigns'; + const apiResponse = new ApiResponse(); + + if (!campaign) { + apiResponse.responseText = 'Nenhuma campanha foi informada!'; + apiResponse.statusCode = 400; + res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); + return; + } + + const filePath = `${advertiser}/${adOpsTeamPath}/${campaign}/historical.json`; + + const fileDAO = new FileDAO(); + fileDAO + .getFromStore(filePath) + .then((fileContent) => { + const fullJosn = JSON.parse(fileContent.toString()); + + delete fullJosn.campaign; + delete fullJosn.adOpsTeam; + + const newJson = Object.keys(fullJosn).map((key) => { + return { ...fullJosn[key]['input'], ...fullJosn[key]['result'] }; + }); + + return newJson; + }) + .then((jsonFile) => { + return new Promise((resolve, reject) => { + converter.json2csv( + jsonFile, + async (err, csv) => { + if (err) { + reject(err); + throw Error('Falha na geração do CSV!'); + } + resolve(csv); + }, + { + delimiter: { + field: ',', + }, + } + ); + }); + }) + .then((csvfile: string) => { + //essas duas primeiras linhas são estão porque é um arquivo + res.setHeader('Content-disposition', 'attachment; filename=data.csv'); + res.set('Content-Type', 'text/csv; charset=utf-8'); + apiResponse.responseText = csvfile; + apiResponse.statusCode = 200; + res.status(apiResponse.statusCode).send(apiResponse.responseText); + }) + .catch((err) => { + if (apiResponse.statusCode === 200) { + apiResponse.statusCode = 500; + } + apiResponse.responseText = 'Falha ao salvar o arquivo!'; + apiResponse.errorMessage = err.message; + }) + .finally(() => { + if (apiResponse.statusCode !== 200) { + res.status(apiResponse.statusCode).send(apiResponse.jsonResponse); + } + }); + }); }; export default csv;