pagarme-js icon indicating copy to clipboard operation
pagarme-js copied to clipboard

Filtro entre datas Node JS

Open luizgserpa opened this issue 5 years ago • 4 comments

Problemas com filtro entre datas em Node JS

Eu preciso que seja possível realizar o filtro dos recebíveis através de um range de data, porém não tenho sucesso usando o Node JS.

Estou utilizando o código abaixo:

GetReceivablesByStore(cnpj : string, amount: number, startDate : Date, endDate : Date, paymentMethod: string, type: string, status: string):Promise<Receivables>{
        return new Promise(async (resolve, reject) =>{
            let store = await this.store_repository.findById(cnpj);
            pagarme.client.connect({api_key: process.env.PAGAR_ME_API_KEY})
                .then(client => client.payables.all({
                    recipient_id: store.recipient_id,
                    amount: amount,
                    payment_date: `>=${new Date (startDate).getTime()}`,
                    payment_date: `<=${new Date (endDate).getTime()}`
                    type: type,
                    status: status
                  }))
                .then(receivables => 
                    resolve(receivables)
                ).catch(error =>
                    reject(error)
                );
        });
    }

Porém o Node JS não permite que faça a atribuição de uma mesma variável com valores diferentes.: An object literal cannot have multiple properties with the same name in strict mode

Como posso resolver essa questão?

Na documentação não fica muito claro que a data de ser no formato Unix, no exemplo de filtro de data ele menciona a respeito do ISO datetime, o qual não tive sucesso. Após algumas tentativas realizei o teste novamente e tive sucesso com o UnixTime.

Qual a solução que devo utilizar para que possa filtrar entre datas?

E qual a forma correta para saber quantos recebíveis determinada loja possui? Exite alguma maneira de utilizar um .count() e ter o total de recebíveis de cada loja?

luizgserpa avatar Apr 23 '19 23:04 luizgserpa

Boa noite @LuizSerpa , de fato um objeto no JS não deve ter múltiplas atribuições, pelo que testei a última atribuição é o que sempre prevalece 🤔 Ex:

const foo = {
  bar: 1,
  bar: 2,
}

console.log(foo) // { bar: 2 }

Isso sem o strict, com strict realmente deve reclamar de que não é válido =/.

Fazendo um testes locais diretamente no node consegui reproduzir o seu objetivo mandando a posição do array já na chave da queryString, como no exemplo:

fetch('https://endk1mq20lgfs.x.pipedream.net?payment_date[0]=>=data_1&payment_date[1]=data_2')
	.then(console.log)

Com a interpretação do servidor como: Screen Shot 2019-04-23 at 21 01 54

Apesar de não ter testado com a sdk do PagaMe acredito que irá funcionar 🤔

Quanto a documentação, pelo que eu li, realmente diz que deve ser toISOString, mas pelo seu relato acredito estar desatualizada 🤔 😞

lucianopf avatar Apr 24 '19 00:04 lucianopf

Fiz conforme orientado e não tive sucesso.

pagarme.client.connect({api_key: process.env.PAGAR_ME_API_KEY})
                .then(client => client.payables.all({
                    recipient_id: store.recipient_id,
                    amount: amount,
                    payment_date: `[>=${new Date (startDate).getTime()}, <=${new Date(endDate).getTime()}]`,
                    //payment_date: `<=${new Date (endDate).getTime()}`,
                    type: type,
                    status: status
                  }))

RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined

Teria alguma outra solução?

luizgserpa avatar Apr 24 '19 12:04 luizgserpa

Na verdade o que tinha falado era pra testar assim

pagarme.client.connect({api_key: process.env.PAGAR_ME_API_KEY})
                .then(client => client.payables.all({
                    recipient_id: store.recipient_id,
                    amount: amount,
                    'payment_date[0]': `>=${new Date (startDate).getTime()}`,
                    'payment_date[1]': `<=${new Date (endDate).getTime()}`,
                    type: type,
                    status: status
                  }))

Será que funciona? 🤔 😬

lucianopf avatar Apr 24 '19 12:04 lucianopf

Opa, deve jeito funcionou perfeitamente!

O que eu posso fazer para pegar o total de recebíveis que eu tenho para determinado recipient_id ?

luizgserpa avatar Apr 24 '19 16:04 luizgserpa