diff --git a/bi-queries/index.ts b/bi-queries/index.ts index 5414144..21a87b1 100644 --- a/bi-queries/index.ts +++ b/bi-queries/index.ts @@ -2,32 +2,27 @@ import { Microservice } from '@andes/bootstrap'; import * as mongoose from 'mongoose'; import { execQueryStream, execQueryToExport, execQueryToDelete, buildPipeline, execQueryToCreateTable, execQuery } from './controller/queries.controller'; import { csvTransform } from './controller/csv-stream'; - const MONGO_HOST = process.env.MONGO_HOST || 'mongodb://localhost:27017/andes'; mongoose.connect(MONGO_HOST); - require('./schemas/query'); require('./schemas/query_mapping'); - const pkg = require('./package.json'); const ms = new Microservice(pkg); - const router = ms.router(); - router.get('/queries', async (req, res, next) => { const Query = mongoose.model('queries'); const activas = { 'inactiva.estado': { $ne: true } }; - const query = {...req.query, ...activas}; + const query = { ...req.query, ...activas }; const queries = await Query.find(query); return res.json(queries); }); + router.get('/queries/:id', async (req, res, next) => { const Query = mongoose.model('queries'); const queries = await Query.findById(req.params.id); return res.json(queries); }); - router.get('/queries/:id/plain', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); @@ -35,7 +30,6 @@ router.get('/queries/:id/plain', async (req, res, next) => { const fields = req.query.fields; delete req.query.fields; // const mapping = req.body.mapping || []; - try { const stream = execQueryStream(queries, params, [], fields); stream.pipe(csvTransform()).pipe(res); @@ -46,7 +40,6 @@ router.get('/queries/:id/plain', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - // Retorna los resultados de la consulta en formato json router.get('/queries/:id/json', async (req, res, next) => { const Query = mongoose.model('queries'); @@ -61,14 +54,12 @@ router.get('/queries/:id/json', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - router.get('/queries/:id/create-table', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); const params = req.query; const fields = req.query.fields; delete req.query.fields; - try { const stream = await execQueryToCreateTable(queries, params, [], fields); let modelKey = {}; @@ -89,7 +80,6 @@ router.get('/queries/:id/create-table', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - router.get('/queries/:id/pipeline', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); @@ -104,7 +94,6 @@ router.get('/queries/:id/pipeline', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - router.get('/queries/:id/csv', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); @@ -123,14 +112,12 @@ router.get('/queries/:id/csv', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - router.post('/queries/:id/csv', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); const params = req.body.params; const mapping = req.body.mapping || []; const fields = req.body.fields; - try { const stream = execQueryStream(queries, params, mapping, fields); res.set('Content-Type', 'text/csv'); @@ -143,17 +130,14 @@ router.post('/queries/:id/csv', async (req, res, next) => { res.status(400).json({ error: e.message }); } }); - router.post('/queries/:id/export', async (req, res, next) => { const Query = mongoose.model('queries'); const queries: any = await Query.findOne({ nombre: req.params.id }); const params = req.body.params; const mapping = req.body.mapping || []; const fields = req.body.fields; - try { const stream = await execQueryToExport(queries, params, mapping, fields); - stream.on('data', () => { }); stream.on('end', () => { res.json({ status: 'OK' }); @@ -187,5 +171,31 @@ router.post('/queries/:id/delete', async (req, res, next) => { } }); +router.patch('/queries/:id', async (req, res, next) => { + try { + const Query = mongoose.model('queries'); + const id = req.params.id; + const data = req.body; + + const query = await Query.findByIdAndUpdate(id, { + $set: { + ...(data.nombre && { nombre: data.nombre }), + ...(data.descripcion && { descripcion: data.descripcion }), + ...(data['inactiva.estado'] !== undefined && { 'inactiva.estado': data['inactiva.estado'] }), + ...(data.desdeAndes !== undefined && { desdeAndes: data.desdeAndes }) + } + }, { new: true }); + + if (!query) { + return res.status(404).json({ message: 'Query no encontrada' }); + } + + return res.json(query); + } catch (e) { + return res.status(500).json({ error: e.message }); + } +}); + + ms.add(router); -ms.start(); +ms.start(); \ No newline at end of file