1#include "statistics_manager.h"
4namespace cavoke::server::model {
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)) {
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)};
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)};
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)};
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>();
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>();
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>();
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>();
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>();
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;",
67 return db_result[0][
"res"].as<
int>();
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,
75 return db_result[0][
"res"].as<
double>();
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;",
83 return db_result[0][
"res"].as<
int>();
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;",
91 return db_result[0][
"res"].as<
int>();