#270 add functions: get_witness_by_account_id(), get_committee_member_by_account_id(), get_workers_by_account_id()

This commit is contained in:
Vlad Dobromyslov 2022-02-08 12:14:43 +03:00
parent 87e214ff22
commit 65df816af6
2 changed files with 64 additions and 13 deletions

View file

@ -170,12 +170,14 @@ public:
// Witnesses // Witnesses
vector<optional<witness_object>> get_witnesses(const vector<witness_id_type> &witness_ids) const; vector<optional<witness_object>> get_witnesses(const vector<witness_id_type> &witness_ids) const;
fc::optional<witness_object> get_witness_by_account_id(account_id_type account) const;
fc::optional<witness_object> get_witness_by_account(const std::string account_id_or_name) const; fc::optional<witness_object> get_witness_by_account(const std::string account_id_or_name) const;
map<string, witness_id_type> lookup_witness_accounts(const string &lower_bound_name, uint32_t limit) const; map<string, witness_id_type> lookup_witness_accounts(const string &lower_bound_name, uint32_t limit) const;
uint64_t get_witness_count() const; uint64_t get_witness_count() const;
// Committee members // Committee members
vector<optional<committee_member_object>> get_committee_members(const vector<committee_member_id_type> &committee_member_ids) const; vector<optional<committee_member_object>> get_committee_members(const vector<committee_member_id_type> &committee_member_ids) const;
fc::optional<committee_member_object> get_committee_member_by_account_id(account_id_type account) const;
fc::optional<committee_member_object> get_committee_member_by_account(const std::string account_id_or_name) const; fc::optional<committee_member_object> get_committee_member_by_account(const std::string account_id_or_name) const;
map<string, committee_member_id_type> lookup_committee_member_accounts(const string &lower_bound_name, uint32_t limit) const; map<string, committee_member_id_type> lookup_committee_member_accounts(const string &lower_bound_name, uint32_t limit) const;
uint64_t get_committee_member_count() const; uint64_t get_committee_member_count() const;
@ -201,6 +203,7 @@ public:
// Workers // Workers
vector<optional<worker_object>> get_workers(const vector<worker_id_type> &witness_ids) const; vector<optional<worker_object>> get_workers(const vector<worker_id_type> &witness_ids) const;
vector<worker_object> get_workers_by_account_id(account_id_type account) const;
vector<worker_object> get_workers_by_account(const std::string account_id_or_name) const; vector<worker_object> get_workers_by_account(const std::string account_id_or_name) const;
map<string, worker_id_type> lookup_worker_accounts(const string &lower_bound_name, uint32_t limit) const; map<string, worker_id_type> lookup_worker_accounts(const string &lower_bound_name, uint32_t limit) const;
uint64_t get_worker_count() const; uint64_t get_worker_count() const;
@ -1616,17 +1619,25 @@ vector<optional<witness_object>> database_api_impl::get_witnesses(const vector<w
return result; return result;
} }
fc::optional<witness_object> database_api::get_witness_by_account_id(account_id_type account) const {
return my->get_witness_by_account_id(account);
}
fc::optional<witness_object> database_api_impl::get_witness_by_account_id(account_id_type account) const {
const auto &idx = _db.get_index_type<witness_index>().indices().get<by_account>();
auto itr = idx.find(account);
if (itr != idx.end())
return *itr;
return {};
}
fc::optional<witness_object> database_api::get_witness_by_account(const std::string account_id_or_name) const { fc::optional<witness_object> database_api::get_witness_by_account(const std::string account_id_or_name) const {
return my->get_witness_by_account(account_id_or_name); return my->get_witness_by_account(account_id_or_name);
} }
fc::optional<witness_object> database_api_impl::get_witness_by_account(const std::string account_id_or_name) const { fc::optional<witness_object> database_api_impl::get_witness_by_account(const std::string account_id_or_name) const {
const auto &idx = _db.get_index_type<witness_index>().indices().get<by_account>();
const account_id_type account = get_account_from_string(account_id_or_name)->id; const account_id_type account = get_account_from_string(account_id_or_name)->id;
auto itr = idx.find(account); return get_witness_by_account_id(account);
if (itr != idx.end())
return *itr;
return {};
} }
map<string, witness_id_type> database_api::lookup_witness_accounts(const string &lower_bound_name, uint32_t limit) const { map<string, witness_id_type> database_api::lookup_witness_accounts(const string &lower_bound_name, uint32_t limit) const {
@ -1687,17 +1698,25 @@ vector<optional<committee_member_object>> database_api_impl::get_committee_membe
return result; return result;
} }
fc::optional<committee_member_object> database_api::get_committee_member_by_account_id(account_id_type account) const {
return my->get_committee_member_by_account_id(account);
}
fc::optional<committee_member_object> database_api_impl::get_committee_member_by_account_id(account_id_type account) const {
const auto &idx = _db.get_index_type<committee_member_index>().indices().get<by_account>();
auto itr = idx.find(account);
if (itr != idx.end())
return *itr;
return {};
}
fc::optional<committee_member_object> database_api::get_committee_member_by_account(const std::string account_id_or_name) const { fc::optional<committee_member_object> database_api::get_committee_member_by_account(const std::string account_id_or_name) const {
return my->get_committee_member_by_account(account_id_or_name); return my->get_committee_member_by_account(account_id_or_name);
} }
fc::optional<committee_member_object> database_api_impl::get_committee_member_by_account(const std::string account_id_or_name) const { fc::optional<committee_member_object> database_api_impl::get_committee_member_by_account(const std::string account_id_or_name) const {
const auto &idx = _db.get_index_type<committee_member_index>().indices().get<by_account>();
const account_id_type account = get_account_from_string(account_id_or_name)->id; const account_id_type account = get_account_from_string(account_id_or_name)->id;
auto itr = idx.find(account); return get_committee_member_by_account_id(account);
if (itr != idx.end())
return *itr;
return {};
} }
map<string, committee_member_id_type> database_api::lookup_committee_member_accounts(const string &lower_bound_name, uint32_t limit) const { map<string, committee_member_id_type> database_api::lookup_committee_member_accounts(const string &lower_bound_name, uint32_t limit) const {
@ -1943,6 +1962,10 @@ vector<optional<worker_object>> database_api::get_workers(const vector<worker_id
return my->get_workers(worker_ids); return my->get_workers(worker_ids);
} }
vector<worker_object> database_api::get_workers_by_account_id(account_id_type account) const {
return my->get_workers_by_account_id(account);
}
vector<worker_object> database_api::get_workers_by_account(const std::string account_id_or_name) const { vector<worker_object> database_api::get_workers_by_account(const std::string account_id_or_name) const {
return my->get_workers_by_account(account_id_or_name); return my->get_workers_by_account(account_id_or_name);
} }
@ -1967,9 +1990,8 @@ vector<optional<worker_object>> database_api_impl::get_workers(const vector<work
return result; return result;
} }
vector<worker_object> database_api_impl::get_workers_by_account(const std::string account_id_or_name) const { vector<worker_object> database_api_impl::get_workers_by_account_id(account_id_type account) const {
const auto &idx = _db.get_index_type<worker_index>().indices().get<by_account>(); const auto &idx = _db.get_index_type<worker_index>().indices().get<by_account>();
const account_id_type account = get_account_from_string(account_id_or_name)->id;
auto itr = idx.find(account); auto itr = idx.find(account);
vector<worker_object> result; vector<worker_object> result;
@ -1981,6 +2003,11 @@ vector<worker_object> database_api_impl::get_workers_by_account(const std::strin
return result; return result;
} }
vector<worker_object> database_api_impl::get_workers_by_account(const std::string account_id_or_name) const {
const account_id_type account = get_account_from_string(account_id_or_name)->id;
return get_workers_by_account_id(account);
}
map<string, worker_id_type> database_api_impl::lookup_worker_accounts(const string &lower_bound_name, uint32_t limit) const { map<string, worker_id_type> database_api_impl::lookup_worker_accounts(const string &lower_bound_name, uint32_t limit) const {
FC_ASSERT(limit <= api_limit_lookup_worker_accounts, FC_ASSERT(limit <= api_limit_lookup_worker_accounts,
"Number of querying accounts can not be greater than ${configured_limit}", "Number of querying accounts can not be greater than ${configured_limit}",

View file

@ -560,6 +560,13 @@ public:
* @param account The ID of the account whose witness should be retrieved * @param account The ID of the account whose witness should be retrieved
* @return The witness object, or null if the account does not have a witness * @return The witness object, or null if the account does not have a witness
*/ */
fc::optional<witness_object> get_witness_by_account_id(account_id_type account) const;
/**
* @brief Get the witness owned by a given account
* @param account_id_or_name The ID or name of the account whose witness should be retrieved
* @return The witness object, or null if the account does not have a witness
*/
fc::optional<witness_object> get_witness_by_account(const std::string account_name_or_id) const; fc::optional<witness_object> get_witness_by_account(const std::string account_name_or_id) const;
/** /**
@ -588,6 +595,13 @@ public:
*/ */
vector<optional<committee_member_object>> get_committee_members(const vector<committee_member_id_type> &committee_member_ids) const; vector<optional<committee_member_object>> get_committee_members(const vector<committee_member_id_type> &committee_member_ids) const;
/**
* @brief Get the committee_member owned by a given account
* @param account The ID of the account whose committee_member should be retrieved
* @return The committee_member object, or null if the account does not have a committee_member
*/
fc::optional<committee_member_object> get_committee_member_by_account_id(account_id_type account) const;
/** /**
* @brief Get the committee_member owned by a given account * @brief Get the committee_member owned by a given account
* @param account_id_or_name The ID or name of the account whose committee_member should be retrieved * @param account_id_or_name The ID or name of the account whose committee_member should be retrieved
@ -727,7 +741,14 @@ public:
/** /**
* @brief Return the worker objects associated with this account. * @brief Return the worker objects associated with this account.
* @param account_id_or_name The ID or name of the account whose worker should be retrieved * @param account The ID of the account whose workers should be retrieved
* @return The worker object or null if the account does not have a worker
*/
vector<worker_object> get_workers_by_account_id(account_id_type account) const;
/**
* @brief Return the worker objects associated with this account.
* @param account_id_or_name The ID or name of the account whose workers should be retrieved
* @return The worker object or null if the account does not have a worker * @return The worker object or null if the account does not have a worker
*/ */
vector<worker_object> get_workers_by_account(const std::string account_id_or_name) const; vector<worker_object> get_workers_by_account(const std::string account_id_or_name) const;
@ -1104,12 +1125,14 @@ FC_API(graphene::app::database_api,
// Witnesses // Witnesses
(get_witnesses) (get_witnesses)
(get_witness_by_account_id)
(get_witness_by_account) (get_witness_by_account)
(lookup_witness_accounts) (lookup_witness_accounts)
(get_witness_count) (get_witness_count)
// Committee members // Committee members
(get_committee_members) (get_committee_members)
(get_committee_member_by_account_id)
(get_committee_member_by_account) (get_committee_member_by_account)
(lookup_committee_member_accounts) (lookup_committee_member_accounts)
(get_committee_member_count) (get_committee_member_count)
@ -1135,6 +1158,7 @@ FC_API(graphene::app::database_api,
// Workers // Workers
(get_workers) (get_workers)
(get_workers_by_account_id)
(get_workers_by_account) (get_workers_by_account)
(lookup_worker_accounts) (lookup_worker_accounts)
(get_worker_count) (get_worker_count)