diff --git a/src/controllers/splinker-controller.js b/src/controllers/splinker-controller.js index 7033283..52d8146 100644 --- a/src/controllers/splinker-controller.js +++ b/src/controllers/splinker-controller.js @@ -20,6 +20,7 @@ const { Especie, Tombo, TomboFoto, + SplinkerExecucao, } = models; function obtemNomeArquivoTxt() { @@ -259,4 +260,23 @@ export const obterModeloSPLinker = async (request, response, next) => { response.end(); }; +export const obterUltimaExecucaoSPLinker = async (request, response, next) => { + try { + const execucao = await SplinkerExecucao.findOne({ + order: [['data_hora', 'DESC']], + attributes: [ + // data_hora é "timestamp without time zone" já em horário de Brasília; + // to_char evita que o driver reinterprete o valor literal como UTC. + [models.sequelize.fn('to_char', models.sequelize.col('data_hora'), 'YYYY-MM-DD"T"HH24:MI:SS'), 'data_hora'], + 'ultimo_tombo_hcf', + 'sucesso', + ], + }); + + response.json(execucao); + } catch (error) { + next(error); + } +}; + export default {}; diff --git a/src/models/SplinkerExecucao.js b/src/models/SplinkerExecucao.js new file mode 100644 index 0000000..bcd99d2 --- /dev/null +++ b/src/models/SplinkerExecucao.js @@ -0,0 +1,37 @@ +function associate(/* models */) { + // não há associações para este model +} + +export default (Sequelize, DataTypes) => { + + const attributes = { + data_hora: { + type: DataTypes.DATE, + allowNull: true, + }, + ultimo_tombo_hcf: { + type: DataTypes.INTEGER, + allowNull: true, + }, + sucesso: { + type: DataTypes.BOOLEAN, + allowNull: true, + }, + log_saida: { + type: DataTypes.TEXT, + allowNull: true, + }, + }; + + const options = { + freezeTableName: false, + timestamps: false, + tableName: 'splinker_execucoes', + }; + + const Model = Sequelize.define('splinker_execucoes', attributes, options); + + Model.associate = associate; + + return Model; +}; diff --git a/src/routes/splinker.js b/src/routes/splinker.js index 973bd00..d4364bd 100644 --- a/src/routes/splinker.js +++ b/src/routes/splinker.js @@ -1,4 +1,4 @@ -import { obterModeloSPLinker } from '../controllers/splinker-controller'; +import { obterModeloSPLinker, obterUltimaExecucaoSPLinker } from '../controllers/splinker-controller'; import tokensMiddleware, { TIPOS_USUARIOS } from '../middlewares/tokens-middleware'; export default app => { @@ -11,4 +11,14 @@ export default app => { ]), obterModeloSPLinker, ]); + + app.route('/splinker/ultima-execucao') + .get([ + tokensMiddleware([ + TIPOS_USUARIOS.CURADOR, + TIPOS_USUARIOS.OPERADOR, + TIPOS_USUARIOS.IDENTIFICADOR, + ]), + obterUltimaExecucaoSPLinker, + ]); };