#260 fix get_workers_by_account()
This commit is contained in:
parent
6bcea17f28
commit
9c7c3d2e14
3 changed files with 38 additions and 26 deletions
|
|
@ -200,7 +200,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;
|
||||||
fc::optional<worker_object> get_worker_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;
|
||||||
|
|
||||||
// Votes
|
// Votes
|
||||||
vector<variant> lookup_vote_ids(const vector<vote_id_type> &votes) const;
|
vector<variant> lookup_vote_ids(const vector<vote_id_type> &votes) const;
|
||||||
|
|
@ -1927,8 +1927,8 @@ vector<optional<worker_object>> database_api::get_workers(const vector<worker_id
|
||||||
return my->get_workers(worker_ids);
|
return my->get_workers(worker_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
fc::optional<worker_object> database_api::get_worker_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_worker_by_account(account_id_or_name);
|
return my->get_workers_by_account(account_id_or_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<optional<worker_object>> database_api_impl::get_workers(const vector<worker_id_type> &worker_ids) const {
|
vector<optional<worker_object>> database_api_impl::get_workers(const vector<worker_id_type> &worker_ids) const {
|
||||||
|
|
@ -1943,13 +1943,18 @@ vector<optional<worker_object>> database_api_impl::get_workers(const vector<work
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
fc::optional<worker_object> database_api_impl::get_worker_by_account(const std::string account_id_or_name) const {
|
vector<worker_object> database_api_impl::get_workers_by_account(const std::string account_id_or_name) 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;
|
const account_id_type account = get_account_from_string(account_id_or_name)->id;
|
||||||
auto itr = idx.find(account);
|
auto itr = idx.find(account);
|
||||||
if (itr != idx.end())
|
vector<worker_object> result;
|
||||||
return *itr;
|
|
||||||
return {};
|
if (itr != idx.end() && itr->worker_account == account) {
|
||||||
|
result.emplace_back(*itr);
|
||||||
|
++itr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
@ -2213,7 +2218,7 @@ voters_info database_api_impl::get_voters(const string &account_name_or_id) cons
|
||||||
//! Fill voters_info
|
//! Fill voters_info
|
||||||
const auto& committee_member_object = get_committee_member_by_account(owner_account_id);
|
const auto& committee_member_object = get_committee_member_by_account(owner_account_id);
|
||||||
const auto& witness_object = get_witness_by_account(owner_account_id);
|
const auto& witness_object = get_witness_by_account(owner_account_id);
|
||||||
const auto& worker_object = get_worker_by_account(owner_account_id);
|
const auto& worker_objects = get_workers_by_account(owner_account_id);
|
||||||
const auto& son_object = get_son_by_account(owner_account_id);
|
const auto& son_object = get_son_by_account(owner_account_id);
|
||||||
|
|
||||||
//! Info for committee member voters
|
//! Info for committee member voters
|
||||||
|
|
@ -2237,19 +2242,26 @@ voters_info database_api_impl::get_voters(const string &account_name_or_id) cons
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Info for worker voters
|
//! Info for worker voters
|
||||||
if(worker_object) {
|
result.voters_for_workers.reserve(worker_objects.size());
|
||||||
const auto& for_worker_voters = get_voters_by_id(worker_object->vote_for);
|
result.voters_against_workers.reserve(worker_objects.size());
|
||||||
result.voters_for_worker.vote_id = worker_object->vote_for;
|
for(const auto& worker_object : worker_objects) {
|
||||||
result.voters_for_worker.voters.reserve(for_worker_voters.size());
|
voters_info_object voters_for_worker;
|
||||||
|
const auto& for_worker_voters = get_voters_by_id(worker_object.vote_for);
|
||||||
|
voters_for_worker.vote_id = worker_object.vote_for;
|
||||||
|
voters_for_worker.voters.reserve(for_worker_voters.size());
|
||||||
for(const auto& voter: for_worker_voters) {
|
for(const auto& voter: for_worker_voters) {
|
||||||
result.voters_for_worker.voters.emplace_back(voter.get_id());
|
voters_for_worker.voters.emplace_back(voter.get_id());
|
||||||
}
|
}
|
||||||
const auto& against_worker_voters = get_voters_by_id(worker_object->vote_against);
|
result.voters_for_workers.emplace_back(std::move(voters_for_worker));
|
||||||
result.voters_against_worker.vote_id = worker_object->vote_against;
|
|
||||||
result.voters_against_worker.voters.reserve(against_worker_voters.size());
|
voters_info_object voters_against_worker;
|
||||||
|
const auto& against_worker_voters = get_voters_by_id(worker_object.vote_against);
|
||||||
|
voters_against_worker.vote_id = worker_object.vote_against;
|
||||||
|
voters_against_worker.voters.reserve(against_worker_voters.size());
|
||||||
for(const auto& voter: against_worker_voters) {
|
for(const auto& voter: against_worker_voters) {
|
||||||
result.voters_against_worker.voters.emplace_back(voter.get_id());
|
voters_against_worker.voters.emplace_back(voter.get_id());
|
||||||
}
|
}
|
||||||
|
result.voters_against_workers.emplace_back(std::move(voters_against_worker));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Info for son voters
|
//! Info for son voters
|
||||||
|
|
|
||||||
|
|
@ -725,7 +725,7 @@ public:
|
||||||
* @param account_id_or_name The ID or name of the account whose worker should be retrieved
|
* @param account_id_or_name The ID or name of the account whose worker 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
|
||||||
*/
|
*/
|
||||||
fc::optional<worker_object> get_worker_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;
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Votes //
|
// Votes //
|
||||||
|
|
@ -1116,7 +1116,7 @@ FC_API(graphene::app::database_api,
|
||||||
|
|
||||||
// Workers
|
// Workers
|
||||||
(get_workers)
|
(get_workers)
|
||||||
(get_worker_by_account)
|
(get_workers_by_account)
|
||||||
|
|
||||||
// Votes
|
// Votes
|
||||||
(lookup_vote_ids)
|
(lookup_vote_ids)
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@ namespace graphene { namespace chain {
|
||||||
* @ingroup object
|
* @ingroup object
|
||||||
*/
|
*/
|
||||||
struct voters_info {
|
struct voters_info {
|
||||||
voters_info_object voters_for_committee_member;
|
voters_info_object voters_for_committee_member;
|
||||||
voters_info_object voters_for_witness;
|
voters_info_object voters_for_witness;
|
||||||
voters_info_object voters_for_worker;
|
vector<voters_info_object> voters_for_workers;
|
||||||
voters_info_object voters_against_worker;
|
vector<voters_info_object> voters_against_workers;
|
||||||
voters_info_object voters_for_son;
|
voters_info_object voters_for_son;
|
||||||
};
|
};
|
||||||
|
|
||||||
} } // graphene::chain
|
} } // graphene::chain
|
||||||
|
|
@ -35,6 +35,6 @@ FC_REFLECT( graphene::chain::voters_info_object,
|
||||||
FC_REFLECT( graphene::chain::voters_info,
|
FC_REFLECT( graphene::chain::voters_info,
|
||||||
(voters_for_committee_member)
|
(voters_for_committee_member)
|
||||||
(voters_for_witness)
|
(voters_for_witness)
|
||||||
(voters_for_worker)
|
(voters_for_workers)
|
||||||
(voters_against_worker)
|
(voters_against_workers)
|
||||||
(voters_for_son) )
|
(voters_for_son) )
|
||||||
Loading…
Reference in a new issue