Scorum
betting_service.hpp
Go to the documentation of this file.
1 #pragma once
4 #include <scorum/utils/any_range.hpp>
5 
7 
8 #include <vector>
9 #include <functional>
10 
11 namespace scorum {
12 namespace chain {
13 
14 struct bet_data;
15 enum class pending_bet_kind : uint8_t;
16 
18 
19 struct account_service_i;
20 struct database_virtual_operations_emmiter_i;
21 
22 class dynamic_global_property_object;
23 class betting_property_object;
24 class pending_bet_object;
25 class matched_bet_object;
26 
27 namespace dba {
28 template <typename> class db_accessor;
29 }
30 
32 {
33  virtual ~betting_service_i();
34 
35  virtual bool is_betting_moderator(const account_name_type& account_name) const = 0;
36 
38  const protocol::asset& stake,
40  const protocol::wincase_type& wincase,
41  uuid_type game_uuid,
42  uuid_type bet_uuid,
43  pending_bet_kind kind)
44  = 0;
45 
46  virtual void cancel_game(uuid_type game_uuid) = 0;
47  virtual void cancel_bets(uuid_type game_uuid) = 0;
48  virtual void cancel_bets(uuid_type game_uuid, fc::time_point_sec created_after) = 0;
49  virtual void cancel_bets(uuid_type game_uuid, const fc::flat_set<market_type>& cancelled_markets) = 0;
50 
52  virtual void cancel_pending_bets(uuid_type game_uuid) = 0;
53  virtual void cancel_pending_bets(uuid_type game_uuid, pending_bet_kind kind) = 0;
54  virtual void cancel_pending_bets(utils::bidir_range<const pending_bet_object> bets) = 0;
55 
56  virtual void cancel_matched_bets(uuid_type game_uuid) = 0;
57  virtual void cancel_matched_bets(utils::bidir_range<const matched_bet_object> bets, uuid_type game_uuid) = 0;
58 };
59 
61 {
62 public:
71 
72  bool is_betting_moderator(const account_name_type& account_name) const override;
73 
75  const protocol::asset& stake,
77  const protocol::wincase_type& wincase,
78  uuid_type game_uuid,
79  uuid_type bet_uuid,
80  pending_bet_kind kind) override;
81 
82  void cancel_game(uuid_type game_uuid) override;
83  void cancel_bets(uuid_type game_uuid) override;
84  void cancel_bets(uuid_type game_uuid, fc::time_point_sec created_after) override;
85  void cancel_bets(uuid_type game_uuid, const fc::flat_set<market_type>& cancelled_markets) override;
86 
87  void cancel_pending_bet(pending_bet_id_type id) override;
88  void cancel_pending_bets(uuid_type game_uuid) override;
89  void cancel_pending_bets(uuid_type game_uuid, pending_bet_kind kind) override;
90  void cancel_pending_bets(utils::bidir_range<const pending_bet_object> bets) override;
91 
92  void cancel_matched_bets(uuid_type game_uuid) override;
93  void cancel_matched_bets(utils::bidir_range<const matched_bet_object> bets, uuid_type game_uuid) override;
94 
95 private:
96  void cancel_pending_bet(const pending_bet_object& bet, uuid_type game_uuid);
97  void cancel_matched_bet(const matched_bet_object& bet, uuid_type game_uuid);
98  void return_bet(const bet_data& bet, uuid_type game_uuid);
99  void restore_pending_bet(const bet_data& bet, uuid_type game_uuid);
100  void push_matched_bet_cancelled_op(const bet_data& bet, uuid_type game_uuid);
101  void push_pending_bet_cancelled_op(const bet_data& bet, uuid_type game_uuid);
102 
103  account_service_i& _account_svc;
104  database_virtual_operations_emmiter_i& _virt_op_emitter;
105  dba::db_accessor<betting_property_object>& _betting_property_dba;
106  dba::db_accessor<matched_bet_object>& _matched_bet_dba;
107  dba::db_accessor<pending_bet_object>& _pending_bet_dba;
111 };
112 }
113 }
void cancel_pending_bets(uuid_type game_uuid) override
const pending_bet_object & create_pending_bet(const account_name_type &better, const protocol::asset &stake, protocol::odds odds, const protocol::wincase_type &wincase, uuid_type game_uuid, uuid_type bet_uuid, pending_bet_kind kind) override
void cancel_matched_bets(uuid_type game_uuid) override
bool is_betting_moderator(const account_name_type &account_name) const override
void cancel_pending_bet(pending_bet_id_type id) override
void cancel_bets(uuid_type game_uuid) override
void cancel_game(uuid_type game_uuid) override
betting_service(account_service_i &, database_virtual_operations_emmiter_i &, dba::db_accessor< betting_property_object > &, dba::db_accessor< matched_bet_object > &, dba::db_accessor< pending_bet_object > &, dba::db_accessor< game_object > &, dba::db_accessor< dynamic_global_property_object > &, dba::db_accessor< bet_uuid_history_object > &)
fc::fixed_string_16 account_name_type
Definition: types.hpp:62
fc::static_variant< result_home::yes, result_home::no, result_draw::yes, result_draw::no, result_away::yes, result_away::no, round_home::yes, round_home::no, handicap::over, handicap::under, correct_score_home::yes, correct_score_home::no, correct_score_draw::yes, correct_score_draw::no, correct_score_away::yes, correct_score_away::no, correct_score::yes, correct_score::no, goal_home::yes, goal_home::no, goal_both::yes, goal_both::no, goal_away::yes, goal_away::no, total::over, total::under, total_goals_home::over, total_goals_home::under, total_goals_away::over, total_goals_away::under > wincase_type
Definition: market.hpp:128
fc::static_variant< result_home, result_draw, result_away, round_home, handicap, correct_score_home, correct_score_draw, correct_score_away, correct_score, goal_home, goal_both, goal_away, total, total_goals_home, total_goals_away > market_type
Definition: market.hpp:97
Definition: asset.cpp:15
boost::uuids::uuid uuid_type
Definition: types.hpp:53
virtual void cancel_bets(uuid_type game_uuid, fc::time_point_sec created_after)=0
virtual void cancel_matched_bets(utils::bidir_range< const matched_bet_object > bets, uuid_type game_uuid)=0
virtual const pending_bet_object & create_pending_bet(const account_name_type &better, const protocol::asset &stake, protocol::odds odds, const protocol::wincase_type &wincase, uuid_type game_uuid, uuid_type bet_uuid, pending_bet_kind kind)=0
virtual bool is_betting_moderator(const account_name_type &account_name) const =0
virtual void cancel_game(uuid_type game_uuid)=0
virtual void cancel_pending_bets(utils::bidir_range< const pending_bet_object > bets)=0
virtual void cancel_pending_bets(uuid_type game_uuid, pending_bet_kind kind)=0
virtual void cancel_bets(uuid_type game_uuid)=0
virtual void cancel_pending_bet(pending_bet_id_type id)=0
virtual void cancel_pending_bets(uuid_type game_uuid)=0
virtual void cancel_bets(uuid_type game_uuid, const fc::flat_set< market_type > &cancelled_markets)=0
virtual void cancel_matched_bets(uuid_type game_uuid)=0