From 85e819185f46437931f9abbe988451d1bf476905 Mon Sep 17 00:00:00 2001 From: Eric Frias Date: Thu, 10 Aug 2017 15:44:07 -0400 Subject: [PATCH] Allow bookie API to return deleted betting_market, betting_market_group, and event objects --- libraries/plugins/bookie/bookie_api.cpp | 45 ++++++++++++++++--- libraries/plugins/bookie/bookie_plugin.cpp | 19 ++------ .../graphene/bookie/bookie_objects.hpp | 21 +++------ 3 files changed, 49 insertions(+), 36 deletions(-) diff --git a/libraries/plugins/bookie/bookie_api.cpp b/libraries/plugins/bookie/bookie_api.cpp index f5c9f19f..d3c399e5 100644 --- a/libraries/plugins/bookie/bookie_api.cpp +++ b/libraries/plugins/bookie/bookie_api.cpp @@ -132,14 +132,47 @@ fc::variants bookie_api_impl::get_objects(const vector& 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().indices().get(); - auto iter = persistent_bets_by_bet_id.find(id.as()); - 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().indices().get(); + auto iter = persistent_events_by_event_id.find(id.as()); + 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().indices().get(); + auto iter = persistent_bets_by_bet_id.find(id.as()); + 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().indices().get(); + auto iter = persistent_betting_markets_by_betting_market_id.find(id.as()); + 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().indices().get(); + auto iter = persistent_betting_market_groups_by_betting_market_group_id.find(id.as()); + 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; diff --git a/libraries/plugins/bookie/bookie_plugin.cpp b/libraries/plugins/bookie/bookie_plugin.cpp index 681e2338..f4e817fe 100644 --- a/libraries/plugins/bookie/bookie_plugin.cpp +++ b/libraries/plugins/bookie/bookie_plugin.cpp @@ -152,7 +152,7 @@ bookie_plugin_impl::~bookie_plugin_impl() void bookie_plugin_impl::on_objects_changed(const vector& changed_object_ids) { graphene::chain::database& db = database(); - auto& event_id_index = db.get_index_type().indices().get(); + auto& event_id_index = db.get_index_type().indices().get(); auto& betting_market_group_id_index = db.get_index_type().indices().get(); auto& betting_market_id_index = db.get_index_type().indices().get(); @@ -183,25 +183,14 @@ void bookie_plugin_impl::on_objects_changed(const vector& 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& 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& changed_object_ids, const fc::flat_set& impacted_accounts){ my->on_objects_changed(changed_object_ids); }); //auto event_index = - database().add_index >(); + database().add_index >(); database().add_index >(); database().add_index >(); database().add_index >(); diff --git a/libraries/plugins/bookie/include/graphene/bookie/bookie_objects.hpp b/libraries/plugins/bookie/include/graphene/bookie/bookie_objects.hpp index f465fdc0..be49213f 100644 --- a/libraries/plugins/bookie/include/graphene/bookie/bookie_objects.hpp +++ b/libraries/plugins/bookie/include/graphene/bookie/bookie_objects.hpp @@ -47,19 +47,11 @@ class persistent_event_object : public graphene::db::abstract_object start_time; - - event_group_id_type event_group_id; - - event_status status; - vector scores; + event_id_type get_event_id() const { return ephemeral_event_object.id; } }; + typedef object_id persistent_event_id_type; struct by_event_id; @@ -67,9 +59,8 @@ typedef multi_index_container< persistent_event_object, indexed_by< ordered_unique, member >, - ordered_unique, member > > > persistent_event_object_multi_index_type; - -typedef generic_index persistent_event_object_index; + ordered_unique, const_mem_fun > > > persistent_event_multi_index_type; +typedef generic_index 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 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) )