From af0bb4a437cd7fd3a45f0d9cd5e533ef6a805852 Mon Sep 17 00:00:00 2001 From: Emmanuel Kiametis Date: Wed, 10 Jul 2019 14:52:05 -0300 Subject: [PATCH] =?UTF-8?q?Implementando=20confirmacao=201-1=20quando=20o?= =?UTF-8?q?=20tipo=20da=20opera=C3=A7=C3=A3o=20for=20transfer=C3=AAncia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 ++-- api/database/model/operacao.js | 24 ++++++++++++++++++--- api/service/pagamento-service.js | 20 +++++++++++------ api/templates/mensagens/error-messages.yaml | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- templates/message/error-messages.yaml | 3 +++ 7 files changed, 46 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index d420a6c..084c79d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM keymetrics/pm2:8-alpine +FROM keymetrics/pm2:10-alpine ENV USER="qrpague" ENV HOME="/home/qrpague" @@ -46,7 +46,7 @@ RUN chown -R $USER:$USER $HOME && \ chmod -R g=u $APP /etc/passwd # Instalar dependências -RUN npm install +RUN npm install --verbose # Selecionar o usuário USER $USER diff --git a/api/database/model/operacao.js b/api/database/model/operacao.js index ce1e33c..02559b8 100644 --- a/api/database/model/operacao.js +++ b/api/database/model/operacao.js @@ -99,7 +99,7 @@ module.exports = (db, mongoose, promise) => { return await Asset.findOneAndUpdate({ uuid }, { situacao, autorizacaoOperacao }); }, - OperacaoModel.confirmarOperacao = async (uuid, confirmacaoOperacao) => { + OperacaoModel.confirmarOperacao = async (uuid, confirmacaoOperacao, isTransferencia = false) => { Logger.debug('Confirmação da Operação'); confirmacaoOperacao.dataHoraConfirmacao = Date.now(); @@ -109,7 +109,18 @@ module.exports = (db, mongoose, promise) => { session = await db.startSession(); session.startTransaction(); const situacao = (confirmacaoOperacao.operacaoConfirmada) ? SITUACAO.CONFIRMADO : SITUACAO.CANCELADO; - const query = { uuid, situacao: SITUACAO.EMITIDO } + let query = { uuid, situacao: SITUACAO.EMITIDO } + + if(isTransferencia){ + query = { + ...query, + "$and": [ + {"pagamentos": {"$exists": true}}, + {"pagamentos": {"$size": 1}} + ] + } + } + let operacao = await OperacaoModel.findOne(query).populate('pagamentos'); if(!operacao){ @@ -121,7 +132,14 @@ module.exports = (db, mongoose, promise) => { for(let i=0; i < pagamentos.length; i++){ let idPagamento = pagamentos[i]._id; let pagamento = await db.model('Pagamento').findOne({ _id: idPagamento }); - if(situacao === SITUACAO.CANCELADO || !pagamento.confirmacaoPagamento) { + if(isTransferencia === true) { + pagamento.situacao = SITUACAO.CONFIRMADO; + pagamento.confirmacaoPagamento = { + pagamentoConfirmado: true, + dataHoraConfirmacao: Date.now() + } + await pagamento.save(); + } else if(situacao === SITUACAO.CANCELADO || !pagamento.confirmacaoPagamento) { pagamento.situacao = SITUACAO.CANCELADO; pagamento.confirmacaoPagamento = { pagamentoConfirmado: false, diff --git a/api/service/pagamento-service.js b/api/service/pagamento-service.js index 8471e79..dedb179 100644 --- a/api/service/pagamento-service.js +++ b/api/service/pagamento-service.js @@ -200,7 +200,6 @@ const consultarPagamento = async ({ uuid, tokenInstituicao }) => { const confirmarPagamento = async ({ uuid, confirmacao }) => { - try { let pagamento = await Pagamento.consultarPagamento(uuid); @@ -214,14 +213,23 @@ const confirmarPagamento = async ({ uuid, confirmacao }) => { Err.throwError(Response.HTTP_STATUS.UNPROCESSABLE, 5000, 5, { uuidOperacao }); } if(!operacao.isValida()) { - confirmacao = { pagamentoConfirmado:false } + confirmacao = { pagamentoConfirmado: false } await Pagamento.confirmarPagamento(uuid, confirmacao); Err.throwError(Response.HTTP_STATUS.BAD_REQUEST, 5000, 6, { uuidOperacao }); } - - pagamento = await Pagamento.confirmarPagamento(uuid, confirmacao); - if (!pagamento) { - Err.throwError(Response.HTTP_STATUS.UNPROCESSABLE, 5000, 2, { uuid }); + + const isTransferencia = (operacao.tipoOperacao === Operacao.TIPO_OPERACAO.TRANSFERENCIA); + if(isTransferencia) { + confirmacao = { operacaoConfirmada: true } + let operacaoConfirmada = await Operacao.confirmarOperacao(uuidOperacao, confirmacao, isTransferencia); + if (!operacaoConfirmada) { + Err.throwError(Response.HTTP_STATUS.UNPROCESSABLE, 5000, 7, { uuidOperacao }); + } + } else { + pagamento = await Pagamento.confirmarPagamento(uuid, confirmacao); + if (!pagamento) { + Err.throwError(Response.HTTP_STATUS.UNPROCESSABLE, 5000, 2, { uuid }); + } } } catch(err) { diff --git a/api/templates/mensagens/error-messages.yaml b/api/templates/mensagens/error-messages.yaml index 0e27b19..b0dba3d 100644 --- a/api/templates/mensagens/error-messages.yaml +++ b/api/templates/mensagens/error-messages.yaml @@ -85,6 +85,9 @@ erros: - operacao_invalida: codigoDetalheErro: 6 detalheErro: O pagamento não pode ser efetuado porque a operação ${uuidOperacao} não é mais válida + - operacao_nao_pode_ser_confirmada: + codigoDetalheErro: 7 + detalheErro: A operação ${uuidOperacao} associada a este pagamento já foi confirmada/cancelada. - confirmacao_operacao: codigoErro: 6000 mensagemErro: Erro de confirmação de operação diff --git a/package-lock.json b/package-lock.json index 1b223bf..661beed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "qrpague-server", - "version": "2.1.0", + "name": "qrpague-server-nodejs", + "version": "3.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 96721ef..1b99ce3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "qrpague-server-nodejs", - "version": "3.0.2", + "version": "3.1.0", "scripts": { "start": "pm2 start app.js", "debug": "node index.js", diff --git a/templates/message/error-messages.yaml b/templates/message/error-messages.yaml index 0e27b19..b0dba3d 100644 --- a/templates/message/error-messages.yaml +++ b/templates/message/error-messages.yaml @@ -85,6 +85,9 @@ erros: - operacao_invalida: codigoDetalheErro: 6 detalheErro: O pagamento não pode ser efetuado porque a operação ${uuidOperacao} não é mais válida + - operacao_nao_pode_ser_confirmada: + codigoDetalheErro: 7 + detalheErro: A operação ${uuidOperacao} associada a este pagamento já foi confirmada/cancelada. - confirmacao_operacao: codigoErro: 6000 mensagemErro: Erro de confirmação de operação