pagarme-js
pagarme-js copied to clipboard
Filtro entre datas Node JS
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?
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:
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 🤔 😞
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?
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? 🤔 😬
Opa, deve jeito funcionou perfeitamente!
O que eu posso fazer para pegar o total de recebÃveis que eu tenho para determinado recipient_id ?