hack-a-chain-software / indexer-kadena

0 stars 1 forks source link

[Account] Headers of the tabs (Assets, NFT, Transactions) are missing numbers in parentheses, which is frustrating since to get an overview you need to click through them. #55

Open 1Mateus opened 1 month ago

1Mateus commented 1 month ago

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

1Mateus commented 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

Image

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
    }
  }
davibauer commented 1 month ago

@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.

1Mateus commented 1 month ago

@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?

davibauer commented 1 month ago

@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.

1Mateus commented 1 month ago

@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

1Mateus commented 4 weeks ago

@davibauer algum follow up sobre isso?

davibauer commented 4 weeks ago

@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.

davibauer commented 3 weeks ago

@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.

1Mateus commented 3 weeks ago

adicionado:

Image

1Mateus commented 3 weeks ago

@davibauer aqui seria possível adicionar um contador de nfts tbm? acho que o marcim tinha validado que precisaria.

davibauer commented 3 weeks ago

@1Mateus Adicionei as colunas fungiblesCount e polyfungiblesCount.

rafaeldkb commented 2 weeks ago

Boa galera!

1Mateus commented 2 weeks ago

https://github.com/hack-a-chain-software/indexer-kadena/commit/685aa595f410410dbeed1c2149cae362947887ad