Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
statistics_manager.h
1#ifndef CAVOKE_STATISTICS_MANAGER_H
2#define CAVOKE_STATISTICS_MANAGER_H
3
4#include <memory>
5#include "model/sessions/sessions_storage.h"
6
7namespace cavoke::server::model {
8
10 std::shared_ptr<SessionsStorage> m_session_storage;
11 std::shared_ptr<GamesStorage> m_games_storage;
12
13public:
14 explicit StatisticsManager(std::shared_ptr<SessionsStorage> mSessionStorage,
15 std::shared_ptr<GamesStorage> mGamesStorage);
16
18 int average_duration_sec;
19 int average_players_count;
20 int total_time_played_sec;
21 int total_games_played;
22 };
23
25 std::string game_id;
26 int time_played_sec;
27 int games_played;
28 double win_rate;
29 };
30
32 int total_time_played_sec;
33 int total_games_played;
34 };
35
36 GameStatistics get_game_statistics(const std::string &game_id);
37 UserGameStatistics get_user_game_statistics(const std::string &user_id,
38 const std::string &game_id);
39 StatisticsManager::UserStatistics get_user_statistics(
40 const std::string &user_id);
41
42private:
43 int get_avg_duration(const std::string &game_id);
44 int get_avg_players_cnt(const std::string &game_id);
45 int get_total_time_played(const std::string &game_id);
46 int get_total_games_played(const std::string &game_id);
47 int get_user_total_time_played(const std::string &user_id);
48 int get_user_total_games_played(const std::string &user_id);
49 double get_user_win_rate(const std::string &user_id,
50 const std::string &game_id);
51 int get_user_games_played(const std::string &user_id,
52 const std::string &game_id);
53 int get_user_time_played(const std::string &user_id,
54 const std::string &game_id);
55};
56
57NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(StatisticsManager::GameStatistics,
58 average_duration_sec,
59 average_players_count,
60 total_time_played_sec,
61 total_games_played);
62
63NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(StatisticsManager::UserGameStatistics,
64 time_played_sec,
65 games_played,
66 win_rate);
67
68NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(StatisticsManager::UserStatistics,
69 total_time_played_sec,
70 total_games_played);
71
72} // namespace cavoke::server::model
73
74#endif // CAVOKE_STATISTICS_MANAGER_H