Skip to content

Commit

Permalink
Implementando confirmacao 1-1 quando o tipo da operação for transferê…
Browse files Browse the repository at this point in the history
…ncia
  • Loading branch information
Emmanuel Kiametis committed Jul 10, 2019
1 parent 1cfe2d2 commit af0bb4a
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 14 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM keymetrics/pm2:8-alpine
FROM keymetrics/pm2:10-alpine

ENV USER="qrpague"
ENV HOME="/home/qrpague"
Expand Down Expand Up @@ -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
Expand Down
24 changes: 21 additions & 3 deletions api/database/model/operacao.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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){
Expand All @@ -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,
Expand Down
20 changes: 14 additions & 6 deletions api/service/pagamento-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,6 @@ const consultarPagamento = async ({ uuid, tokenInstituicao }) => {

const confirmarPagamento = async ({ uuid, confirmacao }) => {


try {

let pagamento = await Pagamento.consultarPagamento(uuid);
Expand All @@ -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) {

Expand Down
3 changes: 3 additions & 0 deletions api/templates/mensagens/error-messages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
3 changes: 3 additions & 0 deletions templates/message/error-messages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit af0bb4a

Please sign in to comment.