Skip to content

Additional pagination support for NftRepository #25

@hendrikebbers

Description

@hendrikebbers

🆕🐥 First Timers Only

This issue is reserved for people who have never contributed to hedera-enterprise or any open source project in general.
We know that creating a pull request (PR) is a major barrier for new contributors.
The goal of this issue and all other issues labeled by 'good first issue' is to help you make your first contribution to Hedera.

👾 Description of the issue

The interface NftRepository provides query functionallity for NFTs. The functionality is based on the REST endpoints of the mirror node. The following messages uses the Page interface to support pagination for the query:

Page<Nft> findByType(@NonNull TokenId tokenId)

The Page interface provides pagination access to the query result. That is needed since a REST call to the endpoint of mirror node does not return all results but a list and possible link to a next query that will contain additional results ( and a link to a next query). Example of a JSON based result:

Query:

curl -X 'GET' \
  'https://testnet.mirrornode.hedera.com/api/v1/contracts?limit=2&order=asc' \
  -H 'accept: application/json'

Result:

{
  "contracts": [
    {
      "contract_id": "0.0.1253",
      // way more attributes that I removed for a better sample
    },
    {
      "contract_id": "0.0.1257",
      // way more attributes that I removed for a better sample
    }
  ],
  "links": {
    "next": "/api/v1/contracts?limit=2&order=asc&contract.id=gt:0.0.1257"
  }
}

The follwing 2 methods currently do not support pagination and will only return the results of the first page:

List<Nft> findByOwner(@NonNull AccountId ownerId)

List<Nft> findByOwnerAndType(@NonNull AccountId ownerId, @NonNull TokenId tokenId)

The two methods need to be refactored:

Page<Nft> findByOwner(@NonNull AccountId ownerId)

Page<Nft> findByOwnerAndType(@NonNull AccountId ownerId, @NonNull TokenId tokenId)

Suggestion for solving the issue

Refactor the NftRepository interface as described. By doing so you will see that the MirrorNodeClient interface is used internally in the implementation. That interface and the implementation of that interface (that is part of the spring module) need to be refactored, too. The MirrorNodeClientImpl implementation already contains a pagination-based implementation for the following method:

public Page<Nft> queryNftsByTokenId(@NonNull TokenId tokenId)

That method can be used as a sample how a concrete implementation should look like.

Additional information

General information about pagination can be found here and here.

Information about the rest api of the mirror node can be found here. The API can be accessed by Swagger UI. The Swagger UI frontend for testnet can be found here.

📋 Step by step guide to do a contribution

If you have never contributed to an open source project at GitHub, the following step-by-step guide will introduce you to the workflow.
A more detailed general documentation of the GitHub PR workflow can be found here.

  • Claim this issue: Comment below that you are interested in working on the issue
  • Wait for assignment: A community member with the given rights will add you as an assignee of the issue
  • Fork the repository: You can do that in GitHub (by simply clicking the 'fork' button).
  • Check out the forked repository
  • Create a feature branch for the issue. We do not have a hard naming definition for branches but it is best practice to prefix the branch name with the issue id.
  • Solve the issue in your branch.
  • Commit your changes: to your branch
  • Start a Pull Request (PR): in the hedera-enterprise repository
  • Check GitHub Actions: Several GitHub Actions will be triggered automatically for each PR. If a GitHub Action fails and you do not understand the cause of that error do not hesitate to add a comment to the PR and ask the community for support.
  • Wait for reviews: Members of the community will review your PR. If a reviewer finds any missing pieces or a problem, he or she will start a discussion with you and describe the next steps for solving the problem.
  • You did it 🎉: We will merge the fix in the develop branch. Thanks for being part of our community as an open-source contributor ❤️

🎉 Contribute to Hacktoberfest

Solve this issue as part of the Hacktoberfest event and get a chance to receive cool goodies like a T-Shirt. 🎽

🤔 Additional informantion

If you have any questions, just ask us directly in this issue by adding a comment. You can join the Hedera community chat at Discord. A general manual about open-source contributions can be found here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    good first issueReserved for newcomers 🐣hacktoberfestReserved for Hacktoberfest contribution (see https://hacktoberfest.com) 🚀👾🧑🏽‍💻help wantedExternal contribution or help is welcome 🧑‍💻🧑🏾‍💻

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions