From 76ed35af2ef36c9578077319a39214298e657da3 Mon Sep 17 00:00:00 2001 From: Srdjan Obucina Date: Thu, 16 Jul 2020 14:09:44 +0200 Subject: [PATCH] New DB API, list all NFTs, list NFTs by owner --- libraries/app/database_api.cpp | 33 +++++++++++++++++++ .../app/include/graphene/app/database_api.hpp | 19 +++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index 0f3d4b6b..d94e73c7 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -195,6 +195,8 @@ class database_api_impl : public std::enable_shared_from_this uint64_t nft_get_total_supply(const nft_metadata_id_type nft_metadata_id) const; nft_object nft_token_by_index(const nft_metadata_id_type nft_metadata_id, const uint64_t token_idx) const; nft_object nft_token_of_owner_by_index(const nft_metadata_id_type nft_metadata_id, const account_id_type owner, const uint64_t token_idx) const; + vector nft_get_all_tokens() const; + vector nft_get_tokens_by_owner(const account_id_type owner) const; //private: const account_object* get_account_from_string( const std::string& name_or_id, @@ -2481,6 +2483,37 @@ nft_object database_api_impl::nft_token_of_owner_by_index(const nft_metadata_id_ return {}; } +vector database_api::nft_get_all_tokens() const +{ + return my->nft_get_all_tokens(); +} + +vector database_api_impl::nft_get_all_tokens() const +{ + const auto &idx_nft = _db.get_index_type().indices().get(); + vector result; + for (auto itr = idx_nft.begin(); itr != idx_nft.end(); ++itr) { + result.push_back(*itr); + } + return result; +} + +vector database_api::nft_get_tokens_by_owner(const account_id_type owner) const +{ + return my->nft_get_tokens_by_owner(owner); +} + +vector database_api_impl::nft_get_tokens_by_owner(const account_id_type owner) const +{ + const auto &idx_nft = _db.get_index_type().indices().get(); + auto idx_nft_range = idx_nft.equal_range(owner); + vector result; + for (auto itr = idx_nft_range.first; itr != idx_nft_range.second; ++itr) { + result.push_back(*itr); + } + return result; +} + ////////////////////////////////////////////////////////////////////// // // // Private methods // diff --git a/libraries/app/include/graphene/app/database_api.hpp b/libraries/app/include/graphene/app/database_api.hpp index 0082f3bf..862d67ea 100644 --- a/libraries/app/include/graphene/app/database_api.hpp +++ b/libraries/app/include/graphene/app/database_api.hpp @@ -780,14 +780,27 @@ class database_api nft_object nft_token_by_index(const nft_metadata_id_type nft_metadata_id, const uint64_t token_idx) const; /** - * @brief Returns NFT URI + * @brief Returns NFT by owner and index * @param nft_metadata_id NFT metadata ID * @param owner NFT owner * @param token_idx NFT index in the list of tokens - * @return NFT URI + * @return NFT object */ nft_object nft_token_of_owner_by_index(const nft_metadata_id_type nft_metadata_id, const account_id_type owner, const uint64_t token_idx) const; + /** + * @brief Returns list of all available NTF's + * @return List of all available NFT's + */ + vector nft_get_all_tokens() const; + + /** + * @brief Returns NFT's owned by owner + * @param owner NFT owner + * @return List of NFT owned by owner + */ + vector nft_get_tokens_by_owner(const account_id_type owner) const; + private: std::shared_ptr< database_api_impl > my; }; @@ -937,5 +950,7 @@ FC_API(graphene::app::database_api, (nft_get_total_supply) (nft_token_by_index) (nft_token_of_owner_by_index) + (nft_get_all_tokens) + (nft_get_tokens_by_owner) )