Open 1Mateus opened 1 month ago
@davibauer eu queria ver contigo a questão desses dados computados, eles estão nessas rotas que usamos com tabs para mostrar valores diferentes, por exemplo:
Na rota das accounts, temos a sessão do header com as informações da conta, que precisariamos ter já a soma de todas as transações do endereço e temos 3 tabs, uma para os assets, outra para os nfts e outra para as transações, cada uma dessas tabs deveriam mostrar o valor total de itens correspondentes no título delas, por ex: 2 assets e 300 Transactions
Minha dúvida: Eu só consigo saber quantos assets um determinado endereço tem no momento que eu faço a query na tabela dos balances e agrupo os fungible balances.
Como funcionaria para a tabs de transactions? eu deveria fazer a query de todas as transações primeiro? teria como relacionar um endereço com os dados de total de assets unicos e total de transações?
Queries que eu utilizo na página /account/[address]:
query GetBalanceByAccount($account: String!) {
allBalances(
condition: {tokenId: null, account: $account}
) {
nodes {
account
balance
chainId
createdAt
module
nodeId
network
qualname
tokenId
updatedAt
}
}
}
query GetNftBalances($first: Int, $offset: Int, $account: String!) {
allBalances(offset: $offset, orderBy: ID_DESC, first: $first, condition: {account: $account, hasTokenId: true}) {
nodes {
updatedAt
tokenId
qualname
nodeId
network
module
id
hasTokenId
createdAt
contractId
chainId
balance
account
contractByContractId {
metadata
precision
tokenId
nodeId
module
chainId
createdAt
updatedAt
type
}
}
totalCount
}
}
query GetTransactions($first: Int, $offset: Int, $sender: String) {
allTransactions(offset: $offset, orderBy: ID_DESC, first: $first, filter: {sender: { equalTo: $sender }}) {
nodes {
chainId
code
createdAt
continuation
creationtime
data
gas
gaslimit
gasprice
id
metadata
logs
nonce
nodeId
numEvents
pactid
payloadHash
proof
requestkey
result
sender
rollback
step
ttl
txid
updatedAt
}
pageInfo {
endCursor
hasNextPage
hasPreviousPage
startCursor
}
totalCount
}
}
@1Mateus Aqui neste caso seria melhor eu criar uma coluna na tabela de Balances com o total de transações daquela conta, para que você não precise calcular isso pela query.
@davibauer boa noite mano! Pode dar um overview? a tabela de balances são vários balanços, certo? entao tem tipo o mesmo endereço tem varios balances, como eu buscaria todas as transações de 1 address?
@1Mateus Sobre a tab de Transactions, seria um where na coluna sender
da tabela Transactions
, com o valor de Balances.Account
. Isso voltaria todas as transações que aquela conta fez.
@davibauer eu entendi, saquei sua ideia e acho que realmente faz sentido. Uma outra pergunta, no caso, para mostrar todos esses contadores dos NFT's, das query do NFT', de todas as transactions e dos assets, pra ter isso como tab etc, vou ter que carregar uma query grande que vai puxar todos os dados de uma vez, meio que juntando as 3 query em 1 só.
Será que vai ficar rápido? tem alguma ideia? valeuzao
@davibauer algum follow up sobre isso?
@1Mateus Nesse caso do account, conseguimos pegar o balance do KDA fazendo where no Balances.account
e no Balances.qualname
. Para o número de assets, seria um count com distinct no Balances.qualname
com where pelo Balances.account
. Já para o número de transações para a conta, precisaria ser uma coluna pré-calculada dentro da tabela Balances
com essa informação, pois a quantidade de registros seria muito grande para fazer um count pelo GraphQL diretamente. Nesse último caso, eu vou precisar criar essa coluna no banco e deixar o dado pré-calculado para buscar pela tabela.
@1Mateus Para o número de transações para a conta, foi criada uma coluna transactionsCount
na entidade Balances
, onde essa informação já vem calculada.
adicionado:
@davibauer aqui seria possível adicionar um contador de nfts tbm? acho que o marcim tinha validado que precisaria.
@1Mateus Adicionei as colunas fungiblesCount
e polyfungiblesCount
.
Boa galera!
EN
We reviewed this to avoid overloading the database by having to perform a global count and the paginate the table.
PT
Eu retirei isso pra não sobrecarregar o banco tendo que fazer um count geral e depois ficar paginando a tabela.
https://www.notion.so/Mat-Reply-Hackchain-Indexer-Explorer-Frontend-review-fa7e71e82bdf44cd9fc99821b484fb88?pvs=4#8cec24b106da40d58c1bd3b1e0a6c426