From b78da10743bb8493b62a802faa453cb6dd8a0e15 Mon Sep 17 00:00:00 2001 From: Thyall Date: Thu, 2 Feb 2023 14:42:35 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20:rocket:=20implementa=C3=A7=C3=A3o=20da?= =?UTF-8?q?=20nova=20rota=20de=20historical=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit implementação da nova rota do historical json fieta no arquivo csv.ts --- dist/routes/csv.js | 97 ++++++++++++++++++++++++++++++++++++++++++++ src/ts/routes/csv.ts | 77 ++++++++++++++++++++++++++++++++++- 2 files changed, 173 insertions(+), 1 deletion(-) diff --git a/dist/routes/csv.js b/dist/routes/csv.js index bc27a7f7..5909ec6a 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 dea6dfa2..decf3e73 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;