Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
statistics_manager.cpp
1#include "statistics_manager.h"
2#include <utility>
3
4namespace cavoke::server::model {
5
6StatisticsManager::StatisticsManager(
7 std::shared_ptr<SessionsStorage> mSessionStorage,
8 std::shared_ptr<GamesStorage> mGamesStorage)
9 : m_session_storage(std::move(mSessionStorage)),
10 m_games_storage(std::move(mGamesStorage)) {
11}
12
13StatisticsManager::GameStatistics StatisticsManager::get_game_statistics(
14 const std::string &game_id) {
15 return {get_avg_duration(game_id), get_avg_players_cnt(game_id),
16 get_total_time_played(game_id), get_total_games_played(game_id)};
17}
18
19StatisticsManager::UserGameStatistics
20StatisticsManager::get_user_game_statistics(const std::string &user_id,
21 const std::string &game_id) {
22 return {game_id, get_user_time_played(user_id, game_id),
23 get_user_games_played(user_id, game_id),
24 get_user_win_rate(user_id, game_id)};
25}
26
27StatisticsManager::UserStatistics StatisticsManager::get_user_statistics(
28 const std::string &user_id) {
29 return {get_user_total_time_played(user_id),
30 get_user_total_games_played(user_id)};
31}
32
33int StatisticsManager::get_avg_duration(const std::string &game_id) {
34 auto db_result = drogon::app().getDbClient()->execSqlSync(
35 "select get_average_session_time_sec($1::varchar) as res;", game_id);
36 return db_result[0]["res"].as<int>();
37}
38
39int StatisticsManager::get_total_time_played(const std::string &game_id) {
40 auto db_result = drogon::app().getDbClient()->execSqlSync(
41 "select get_total_time_sec($1::varchar) as res;", game_id);
42 return db_result[0]["res"].as<int>();
43}
44
45int StatisticsManager::get_total_games_played(const std::string &game_id) {
46 auto db_result = drogon::app().getDbClient()->execSqlSync(
47 "select get_sessions_num($1::varchar) as res;", game_id);
48 return db_result[0]["res"].as<int>();
49}
50
51int StatisticsManager::get_avg_players_cnt(const std::string &game_id) {
52 auto db_result = drogon::app().getDbClient()->execSqlSync(
53 "select get_average_players_num($1::varchar) as res;", game_id);
54 return db_result[0]["res"].as<int>();
55}
56
57int StatisticsManager::get_user_total_time_played(const std::string &user_id) {
58 auto db_result = drogon::app().getDbClient()->execSqlSync(
59 "select get_cavoke_time_sec_for_user($1::varchar) as res;", user_id);
60 return db_result[0]["res"].as<int>();
61}
62
63int StatisticsManager::get_user_total_games_played(const std::string &user_id) {
64 auto db_result = drogon::app().getDbClient()->execSqlSync(
65 "select get_cavoke_sessions_num_for_user($1::varchar) as res;",
66 user_id);
67 return db_result[0]["res"].as<int>();
68}
69
70double StatisticsManager::get_user_win_rate(const std::string &user_id,
71 const std::string &game_id) {
72 auto db_result = drogon::app().getDbClient()->execSqlSync(
73 "select get_win_rate($1::varchar, $2::varchar) as res;", game_id,
74 user_id);
75 return db_result[0]["res"].as<double>();
76}
77
78int StatisticsManager::get_user_games_played(const std::string &user_id,
79 const std::string &game_id) {
80 auto db_result = drogon::app().getDbClient()->execSqlSync(
81 "select get_sessions_num_for_user($1::varchar, $2::varchar) as res;",
82 game_id, user_id);
83 return db_result[0]["res"].as<int>();
84}
85
86int StatisticsManager::get_user_time_played(const std::string &user_id,
87 const std::string &game_id) {
88 auto db_result = drogon::app().getDbClient()->execSqlSync(
89 "select get_total_time_sec_for_user($1::varchar, $2::varchar) as res;",
90 game_id, user_id);
91 return db_result[0]["res"].as<int>();
92}
93
94} // namespace cavoke::server::model