Allow bookie API to return deleted betting_market, betting_market_group, and event objects

This commit is contained in:
Eric Frias 2017-08-10 15:44:07 -04:00
parent a2b83c668f
commit 85e819185f
3 changed files with 49 additions and 36 deletions

View file

@ -132,14 +132,47 @@ fc::variants bookie_api_impl::get_objects(const vector<object_id_type>& ids) con
std::transform(ids.begin(), ids.end(), std::back_inserter(result),
[this, &db](object_id_type id) -> fc::variant {
if (id.type() == bet_id_type::type_id)
switch (id.type())
{
auto& persistent_bets_by_bet_id = db->get_index_type<detail::persistent_bet_index>().indices().get<by_bet_id>();
auto iter = persistent_bets_by_bet_id.find(id.as<bet_id_type>());
if (iter != persistent_bets_by_bet_id.end())
return iter->ephemeral_bet_object.to_variant();
case event_id_type::type_id:
{
auto& persistent_events_by_event_id = db->get_index_type<detail::persistent_event_index>().indices().get<by_event_id>();
auto iter = persistent_events_by_event_id.find(id.as<event_id_type>());
if (iter != persistent_events_by_event_id.end())
return iter->ephemeral_event_object.to_variant();
else
return {};
}
case bet_id_type::type_id:
{
auto& persistent_bets_by_bet_id = db->get_index_type<detail::persistent_bet_index>().indices().get<by_bet_id>();
auto iter = persistent_bets_by_bet_id.find(id.as<bet_id_type>());
if (iter != persistent_bets_by_bet_id.end())
return iter->ephemeral_bet_object.to_variant();
else
return {};
}
case betting_market_object::type_id:
{
auto& persistent_betting_markets_by_betting_market_id = db->get_index_type<detail::persistent_betting_market_index>().indices().get<by_betting_market_id>();
auto iter = persistent_betting_markets_by_betting_market_id.find(id.as<betting_market_id_type>());
if (iter != persistent_betting_markets_by_betting_market_id.end())
return iter->ephemeral_betting_market_object.to_variant();
else
return {};
}
case betting_market_group_object::type_id:
{
auto& persistent_betting_market_groups_by_betting_market_group_id = db->get_index_type<detail::persistent_betting_market_group_index>().indices().get<by_betting_market_group_id>();
auto iter = persistent_betting_market_groups_by_betting_market_group_id.find(id.as<betting_market_group_id_type>());
if (iter != persistent_betting_market_groups_by_betting_market_group_id.end())
return iter->ephemeral_betting_market_group_object.to_variant();
else
return {};
}
default:
return {};
}
return {};
});
return result;

View file

@ -152,7 +152,7 @@ bookie_plugin_impl::~bookie_plugin_impl()
void bookie_plugin_impl::on_objects_changed(const vector<object_id_type>& changed_object_ids)
{
graphene::chain::database& db = database();
auto& event_id_index = db.get_index_type<persistent_event_object_index>().indices().get<by_event_id>();
auto& event_id_index = db.get_index_type<persistent_event_index>().indices().get<by_event_id>();
auto& betting_market_group_id_index = db.get_index_type<persistent_betting_market_group_index>().indices().get<by_betting_market_group_id>();
auto& betting_market_id_index = db.get_index_type<persistent_betting_market_index>().indices().get<by_betting_market_id>();
@ -183,25 +183,14 @@ void bookie_plugin_impl::on_objects_changed(const vector<object_id_type>& change
{
ilog("Modifying persistent event object ${id}", ("id", changed_event_id));
db.modify(*old_event_obj, [&](persistent_event_object& saved_event_obj) {
saved_event_obj.name = new_event_obj->name;
saved_event_obj.season = new_event_obj->season;
saved_event_obj.start_time = new_event_obj->start_time;;
saved_event_obj.event_group_id = new_event_obj->event_group_id;
saved_event_obj.status = new_event_obj->status;
saved_event_obj.scores = new_event_obj->scores;
saved_event_obj.ephemeral_event_object = *new_event_obj;
});
}
else if (new_event_obj)
{
ilog("Creating new persistent event object ${id}", ("id", changed_event_id));
db.create<persistent_event_object>([&](persistent_event_object& saved_event_obj) {
saved_event_obj.event_object_id = new_event_obj->id;
saved_event_obj.name = new_event_obj->name;
saved_event_obj.season = new_event_obj->season;
saved_event_obj.start_time = new_event_obj->start_time;;
saved_event_obj.event_group_id = new_event_obj->event_group_id;
saved_event_obj.status = new_event_obj->status;
saved_event_obj.scores = new_event_obj->scores;
saved_event_obj.ephemeral_event_object = *new_event_obj;
});
}
}
@ -414,7 +403,7 @@ void bookie_plugin::plugin_initialize(const boost::program_options::variables_ma
database().applied_block.connect( [&]( const signed_block& b){ my->on_block_applied(b); } );
database().changed_objects.connect([&](const vector<object_id_type>& changed_object_ids, const fc::flat_set<graphene::chain::account_id_type>& impacted_accounts){ my->on_objects_changed(changed_object_ids); });
//auto event_index =
database().add_index<primary_index<detail::persistent_event_object_index> >();
database().add_index<primary_index<detail::persistent_event_index> >();
database().add_index<primary_index<detail::persistent_betting_market_group_index> >();
database().add_index<primary_index<detail::persistent_betting_market_index> >();
database().add_index<primary_index<detail::persistent_bet_index> >();

View file

@ -47,19 +47,11 @@ class persistent_event_object : public graphene::db::abstract_object<persistent_
static const uint8_t space_id = bookie_objects;
static const uint8_t type_id = persistent_event_object_type;
event_id_type event_object_id;
event_object ephemeral_event_object;
internationalized_string_type name;
internationalized_string_type season;
optional<time_point_sec> start_time;
event_group_id_type event_group_id;
event_status status;
vector<string> scores;
event_id_type get_event_id() const { return ephemeral_event_object.id; }
};
typedef object_id<bookie_objects, persistent_event_object_type, persistent_event_object> persistent_event_id_type;
struct by_event_id;
@ -67,9 +59,8 @@ typedef multi_index_container<
persistent_event_object,
indexed_by<
ordered_unique<tag<by_id>, member<object, object_id_type, &object::id> >,
ordered_unique<tag<by_event_id>, member<persistent_event_object, event_id_type, &persistent_event_object::event_object_id> > > > persistent_event_object_multi_index_type;
typedef generic_index<persistent_event_object, persistent_event_object_multi_index_type> persistent_event_object_index;
ordered_unique<tag<by_event_id>, const_mem_fun<persistent_event_object, event_id_type, &persistent_event_object::get_event_id> > > > persistent_event_multi_index_type;
typedef generic_index<persistent_event_object, persistent_event_multi_index_type> persistent_event_index;
#if 0 // we no longer have competitors, just leaving this here as an example of how to do a secondary index
class events_by_competitor_index : public secondary_index
@ -180,7 +171,7 @@ typedef generic_index<persistent_bet_object, persistent_bet_multi_index_type> pe
} } } //graphene::bookie::detail
FC_REFLECT_DERIVED( graphene::bookie::detail::persistent_event_object, (graphene::db::object), (event_object_id)(name)(season)(start_time)(event_group_id)(status)(scores) )
FC_REFLECT_DERIVED( graphene::bookie::detail::persistent_event_object, (graphene::db::object), (ephemeral_event_object) )
FC_REFLECT_DERIVED( graphene::bookie::detail::persistent_betting_market_group_object, (graphene::db::object), (ephemeral_betting_market_group_object)(total_matched_bets_amount) )
FC_REFLECT_DERIVED( graphene::bookie::detail::persistent_betting_market_object, (graphene::db::object), (ephemeral_betting_market_object) )
FC_REFLECT_DERIVED( graphene::bookie::detail::persistent_bet_object, (graphene::db::object), (ephemeral_bet_object) )