-
Notifications
You must be signed in to change notification settings - Fork 24
Description
🆕🐥 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.