#319 - get_votes fix sidechain_type as map

This commit is contained in:
Vlad Dobromyslov 2022-03-17 11:24:15 +03:00
parent 34608c1c9d
commit 524b2d7fdd

View file

@ -2138,13 +2138,22 @@ vector<vote_id_type> database_api_impl::get_votes_ids(const string &account_name
votes_info database_api_impl::get_votes(const string &account_name_or_id) const {
votes_info result;
const auto &votes_ids = get_votes_ids(account_name_or_id);
const auto &committee_ids = get_votes_objects<committee_member_index, by_vote_id>(votes_ids);
const auto &witness_ids = get_votes_objects<witness_index, by_vote_id>(votes_ids);
const auto &for_worker_ids = get_votes_objects<worker_index, by_vote_for>(votes_ids);
const auto &against_worker_ids = get_votes_objects<worker_index, by_vote_against>(votes_ids);
const auto &son_bitcoin_ids = get_votes_objects<son_index, by_vote_id_bitcoin>(votes_ids, 5);
const auto &son_hive_ids = get_votes_objects<son_index, by_vote_id_hive>(votes_ids, 5);
const auto votes_ids = get_votes_ids(account_name_or_id);
const auto committee_ids = get_votes_objects<committee_member_index, by_vote_id>(votes_ids);
const auto witness_ids = get_votes_objects<witness_index, by_vote_id>(votes_ids);
const auto for_worker_ids = get_votes_objects<worker_index, by_vote_for>(votes_ids);
const auto against_worker_ids = get_votes_objects<worker_index, by_vote_against>(votes_ids);
const auto son_ids = [this, &votes_ids]()
{
flat_map<sidechain_type, vector<variant> > son_ids;
const auto son_bitcoin_ids = get_votes_objects<son_index, by_vote_id_bitcoin>(votes_ids, 5);
if (!son_bitcoin_ids.empty())
son_ids[sidechain_type::bitcoin] = std::move(son_bitcoin_ids);
const auto son_hive_ids = get_votes_objects<son_index, by_vote_id_hive>(votes_ids, 5);
if (!son_hive_ids.empty())
son_ids[sidechain_type::hive] = std::move(son_hive_ids);
return son_ids;
}();
//! Fill votes info
if (!committee_ids.empty()) {
@ -2187,20 +2196,16 @@ votes_info database_api_impl::get_votes(const string &account_name_or_id) const
result.votes_against_workers = std::move(votes_against_workers);
}
if (!son_bitcoin_ids.empty() || !son_hive_ids.empty()) {
if (!son_ids.empty()) {
flat_map<sidechain_type, vector< votes_info_object > > votes_for_sons;
if(!son_bitcoin_ids.empty()) {
votes_for_sons[sidechain_type::bitcoin].reserve(son_bitcoin_ids.size());
for (const auto &son : son_bitcoin_ids) {
for(const auto& son_sidechain_ids : son_ids)
{
const auto& sidechain = son_sidechain_ids.first;
const auto& sidechain_ids = son_sidechain_ids.second;
votes_for_sons[sidechain].reserve(sidechain_ids.size());
for (const auto &son : sidechain_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons[sidechain_type::bitcoin].emplace_back(votes_info_object{son_obj.get_bitcoin_vote_id(), son_obj.id});
}
}
if(!son_hive_ids.empty()) {
votes_for_sons[sidechain_type::hive].reserve(son_hive_ids.size());
for (const auto &son : son_hive_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons[sidechain_type::hive].emplace_back(votes_info_object{son_obj.get_hive_vote_id(), son_obj.id});
votes_for_sons[sidechain].emplace_back(votes_info_object{son_obj.get_sidechain_vote_id(sidechain), son_obj.id});
}
}
result.votes_for_sons = std::move(votes_for_sons);