diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index 5184ea77..ee3f8c30 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -97,6 +97,7 @@ class database_api_impl : public std::enable_shared_from_this // Peerplays vector list_sports() const; + vector list_event_groups(sport_id_type sport_id) const; // Markets / feeds vector get_limit_orders(asset_id_type a, asset_id_type b, uint32_t limit)const; @@ -891,15 +892,25 @@ vector database_api::list_sports() const vector database_api_impl::list_sports() const { - const auto& sport_index = _db.get_index_type().indices().get(); + const auto& sport_object_idx = _db.get_index_type().indices().get(); vector result; - for (const sport_object& sport : sport_index) + for (const sport_object& sport : sport_object_idx) { result.emplace_back(sport); } return result; } +vector database_api_impl::list_event_groups(sport_id_type sport_id) const +{ + vector result; + const auto& event_group_idx = _db.get_index_type().indices().get(); + for (const event_group_object& event_group : event_group_idx) + { + result.emplace_back(event_group); + } + return result; +} ////////////////////////////////////////////////////////////////////// // // // Markets / feeds // diff --git a/libraries/app/include/graphene/app/database_api.hpp b/libraries/app/include/graphene/app/database_api.hpp index 938b57f6..28cf6af1 100644 --- a/libraries/app/include/graphene/app/database_api.hpp +++ b/libraries/app/include/graphene/app/database_api.hpp @@ -39,6 +39,8 @@ #include #include #include +#include + #include #include @@ -322,6 +324,11 @@ class database_api */ vector list_sports() const; + /** + * @brief Return a list of all event groups for a sport (e.g. all soccer leagues in soccer) + */ + vector list_event_groups(sport_id_type sport_id) const; + ///////////////////// // Markets / feeds // ///////////////////// diff --git a/libraries/chain/include/graphene/chain/event_group_object.hpp b/libraries/chain/include/graphene/chain/event_group_object.hpp index a5d4584d..f47eda31 100644 --- a/libraries/chain/include/graphene/chain/event_group_object.hpp +++ b/libraries/chain/include/graphene/chain/event_group_object.hpp @@ -31,6 +31,8 @@ namespace graphene { namespace chain { class database; +struct by_sport_id; + class event_group_object : public graphene::db::abstract_object< event_group_object > { public: @@ -44,7 +46,9 @@ class event_group_object : public graphene::db::abstract_object< event_group_obj typedef multi_index_container< event_group_object, indexed_by< - ordered_unique< tag, member< object, object_id_type, &object::id > > > > event_group_object_multi_index_type; + ordered_unique< tag, member< object, object_id_type, &object::id > >, + ordered_non_unique< tag, member< event_group_object, sport_id_type, &event_group_object::sport_id > > > + > event_group_object_multi_index_type; typedef generic_index event_group_object_index; } } // graphene::chain