diff --git a/source/business_logic/controller/db/metrics_db/metrics_db_controller.cpp b/source/business_logic/controller/db/metrics_db/metrics_db_controller.cpp index 5a38118..1900792 100644 --- a/source/business_logic/controller/db/metrics_db/metrics_db_controller.cpp +++ b/source/business_logic/controller/db/metrics_db/metrics_db_controller.cpp @@ -31,7 +31,7 @@ AMetrics_DB_Controller::AMetrics_DB_Controller(const ADB_Config& db_cfg) : // --------------------------------------------------------------------------------------------------------------------- void AMetrics_DB_Controller::Set_Metrics(const SMetrics& metrics) { - Exec_Query(std::format(R"(INSERT INTO {} (start_req, profile_req, pr_game_req, math_game_req, help_req, about_project_req, definition_req, date) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}'))", Table_Name, metrics.Start_Request_Count, metrics.Profile_Request_Count, metrics.Pr_Game_Request_Count, metrics.Math_Game_Request_Count, metrics.Help_Request_Count, metrics.About_Project_Request_Count, metrics.Definition_Request_Count, metrics.Get_Current_Date())); + Exec_Query(std::format(R"(INSERT INTO {} (start_req, profile_req, pr_game_req, math_game_req, help_req, about_project_req, definition_req, date, total_number_of_requests) VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}'))", Table_Name, metrics.Start_Request_Count, metrics.Profile_Request_Count, metrics.Pr_Game_Request_Count, metrics.Math_Game_Request_Count, metrics.Help_Request_Count, metrics.About_Project_Request_Count, metrics.Definition_Request_Count, metrics.Get_Current_Date(), metrics.Get_Total_Number_Of_Requests())); } // --------------------------------------------------------------------------------------------------------------------- @@ -42,8 +42,15 @@ SMetrics AMetrics_DB_Controller::Get_Metrics(std::int64_t metrics_id) } // --------------------------------------------------------------------------------------------------------------------- -std::int64_t AMetrics_DB_Controller::Get_Available_Metrics_Count() +std::pair AMetrics_DB_Controller::Get_Metrics_Range() { - auto response{ Exec_Query(std::format(R"(SELECT MAX(id) FROM {})", Table_Name)) }; - return response[0][0].as(); + auto response{ Exec_Query(std::format(R"(SELECT MIN(id) AS min_val, MAX(id) AS max_val FROM {})", Table_Name)) }; + return { response[0]["min_val"].as(), response[0]["max_val"].as() }; +} + +// --------------------------------------------------------------------------------------------------------------------- +SMetrics AMetrics_DB_Controller::Get_Best_Metrics() +{ + auto response{ Exec_Query(std::format(R"(SELECT start_req, profile_req, pr_game_req, math_game_req, help_req, about_project_req, definition_req, date FROM {} WHERE total_number_of_requests = (SELECT MAX(total_number_of_requests) FROM {}))", Table_Name, Table_Name)) }; + return SMetrics{ response[0][0].as(), response[0][1].as(), response[0][2].as(), response[0][3].as(), response[0][4].as(), response[0][5].as(), response[0][6].as(), response[0][7].as() }; } \ No newline at end of file diff --git a/source/business_logic/controller/db/metrics_db/metrics_db_controller.hpp b/source/business_logic/controller/db/metrics_db/metrics_db_controller.hpp index 1c0256d..2951f8a 100644 --- a/source/business_logic/controller/db/metrics_db/metrics_db_controller.hpp +++ b/source/business_logic/controller/db/metrics_db/metrics_db_controller.hpp @@ -23,6 +23,8 @@ #pragma once +#include + #include #include @@ -34,5 +36,8 @@ class AMetrics_DB_Controller : public ABase_DB_Controller void Set_Metrics(const SMetrics& metrics); SMetrics Get_Metrics(std::int64_t metrics_id); - std::int64_t Get_Available_Metrics_Count(); + + // return min id and max id + std::pair Get_Metrics_Range(); + SMetrics Get_Best_Metrics(); }; \ No newline at end of file diff --git a/source/business_logic/model/metrics/metrics_model.cpp b/source/business_logic/model/metrics/metrics_model.cpp index 19e45a9..b0643d8 100644 --- a/source/business_logic/model/metrics/metrics_model.cpp +++ b/source/business_logic/model/metrics/metrics_model.cpp @@ -46,6 +46,12 @@ const std::string& SMetrics::Get_Current_Date() const return Current_Date; } +// --------------------------------------------------------------------------------------------------------------------- +std::int64_t SMetrics::Get_Total_Number_Of_Requests() const +{ + return Start_Request_Count + Profile_Request_Count + Pr_Game_Request_Count + Math_Game_Request_Count + Help_Request_Count + About_Project_Request_Count + Definition_Request_Count; +} + // --------------------------------------------------------------------------------------------------------------------- void SMetrics::Clear() { diff --git a/source/business_logic/model/metrics/metrics_model.hpp b/source/business_logic/model/metrics/metrics_model.hpp index 9fbdc64..1f88feb 100644 --- a/source/business_logic/model/metrics/metrics_model.hpp +++ b/source/business_logic/model/metrics/metrics_model.hpp @@ -39,6 +39,7 @@ struct SMetrics void Set_Current_Date(); [[nodiscard]] const std::string& Get_Current_Date() const; + [[nodiscard]] std::int64_t Get_Total_Number_Of_Requests() const; void Clear(); public: diff --git a/source/view/handlers/message_handler/message_handler.cpp b/source/view/handlers/message_handler/message_handler.cpp index cd02ac9..7318077 100644 --- a/source/view/handlers/message_handler/message_handler.cpp +++ b/source/view/handlers/message_handler/message_handler.cpp @@ -125,24 +125,39 @@ void AMessage_Handler::Bind_Commands() TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Not_Found_Word_Definition_Msg()); }); - TG_Bot.getEvents().onCommand(SMessage_Commands::Metrics_Count.data(), [this](TgBot::Message::Ptr message) -> void + TG_Bot.getEvents().onCommand(SMessage_Commands::Metrics_Range.data(), [this](TgBot::Message::Ptr message) -> void { if (!Is_Root_User(message->from->id)) { return; } - auto metrics_count{ Metrics_DB_Controller.Get_Available_Metrics_Count() }; - TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Metrics_Count_Msg(metrics_count)); + auto metrics_range{ Metrics_DB_Controller.Get_Metrics_Range() }; + TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Metrics_Range_Msg(metrics_range)); }); TG_Bot.getEvents().onCommand(SMessage_Commands::Get_Metrics.data(), [this](TgBot::Message::Ptr message) -> void { + if (!Is_Root_User(message->from->id)) + { + return; + } + Cut_User_Input(message->text, SMessage_Commands::Get_Metrics.size()); std::int64_t metrics_id{ strtoll(message->text.c_str(), nullptr, 10) }; auto metrics{ Metrics_DB_Controller.Get_Metrics(metrics_id) }; TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Metrics_Msg(metrics)); }); + TG_Bot.getEvents().onCommand(SMessage_Commands::Get_Best_Metric.data(), [this](TgBot::Message::Ptr message) -> void + { + if (!Is_Root_User(message->from->id)) + { + return; + } + + auto best_metric{ Metrics_DB_Controller.Get_Best_Metrics() }; + TG_Bot.getApi().sendMessage(message->chat->id, AMessage_Reply::Get_Metrics_Msg(best_metric)); + }); } // --------------------------------------------------------------------------------------------------------------------- diff --git a/source/view/texts/message_commands/message_commands.cpp b/source/view/texts/message_commands/message_commands.cpp index e98a067..61514be 100644 --- a/source/view/texts/message_commands/message_commands.cpp +++ b/source/view/texts/message_commands/message_commands.cpp @@ -31,5 +31,6 @@ constinit std::string_view SMessage_Commands::Answer{ "answer" }; constinit std::string_view SMessage_Commands::Help{ "help" }; constinit std::string_view SMessage_Commands::About_Project{ "about_project" }; constinit std::string_view SMessage_Commands::Definiton{ "def" }; -constinit std::string_view SMessage_Commands::Metrics_Count{ "metrics_count" }; -constinit std::string_view SMessage_Commands::Get_Metrics{ "get_metrics" }; \ No newline at end of file +constinit std::string_view SMessage_Commands::Metrics_Range{"metrics_range" }; +constinit std::string_view SMessage_Commands::Get_Metrics{ "get_metrics" }; +constinit std::string_view SMessage_Commands::Get_Best_Metric{ "get_best_metric" }; \ No newline at end of file diff --git a/source/view/texts/message_commands/message_commands.hpp b/source/view/texts/message_commands/message_commands.hpp index 89837b6..802c4e3 100644 --- a/source/view/texts/message_commands/message_commands.hpp +++ b/source/view/texts/message_commands/message_commands.hpp @@ -35,6 +35,7 @@ struct SMessage_Commands constinit static std::string_view Help; constinit static std::string_view About_Project; constinit static std::string_view Definiton; - constinit static std::string_view Metrics_Count; + constinit static std::string_view Metrics_Range; constinit static std::string_view Get_Metrics; + constinit static std::string_view Get_Best_Metric; }; \ No newline at end of file diff --git a/source/view/texts/message_reply/message_reply.cpp b/source/view/texts/message_reply/message_reply.cpp index 63688ff..2b8a7f6 100644 --- a/source/view/texts/message_reply/message_reply.cpp +++ b/source/view/texts/message_reply/message_reply.cpp @@ -90,17 +90,18 @@ std::string AMessage_Reply::Get_Not_Found_Word_Definition_Msg() } // --------------------------------------------------------------------------------------------------------------------- -std::string AMessage_Reply::Get_Metrics_Count_Msg(std::int64_t metrics_count) +std::string AMessage_Reply::Get_Metrics_Range_Msg(const std::pair& metrics_range) { - return std::format("Кількість доступних метрик: {}", metrics_count); + return std::format("Діапазон ID метрик: від {} до {}", metrics_range.first, metrics_range.second); } // --------------------------------------------------------------------------------------------------------------------- std::string AMessage_Reply::Get_Metrics_Msg(const SMetrics& metrics) { - return std::format("Метрики Arbuz-Bot\n\nДата: {}\n\nКількість реквестів на команди:\nStart: {}\nProfile: {}\nProgrammer Game: {}\nMath Game: {}\nHelp: {}\nAbout Project: {}\nDefinition: {}", metrics.Get_Current_Date(), metrics.Start_Request_Count, metrics.Profile_Request_Count, metrics.Pr_Game_Request_Count, metrics.Math_Game_Request_Count, metrics.Help_Request_Count, metrics.About_Project_Request_Count, metrics.Definition_Request_Count); + return std::format("Метрики Arbuz-Bot\n\nДата: {}\n\nЗагальна кількість реквестів: {}\n\nКількість реквестів на команди:\nStart: {}\nProfile: {}\nProgrammer Game: {}\nMath Game: {}\nHelp: {}\nAbout Project: {}\nDefinition: {}", metrics.Get_Current_Date(), metrics.Get_Total_Number_Of_Requests(), metrics.Start_Request_Count, metrics.Profile_Request_Count, metrics.Pr_Game_Request_Count, metrics.Math_Game_Request_Count, metrics.Help_Request_Count, metrics.About_Project_Request_Count, metrics.Definition_Request_Count); } +// --------------------------------------------------------------------------------------------------------------------- std::string AMessage_Reply::Get_Limit_Api_Requests_Msg() { return std::string{ "Нажаль ліміт запросів перевищено!\nСпробуйте пізніше)" }; diff --git a/source/view/texts/message_reply/message_reply.hpp b/source/view/texts/message_reply/message_reply.hpp index 08a5dc6..aec224c 100644 --- a/source/view/texts/message_reply/message_reply.hpp +++ b/source/view/texts/message_reply/message_reply.hpp @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -51,7 +52,7 @@ class AMessage_Reply static std::string Get_Info_About_Project_Msg(); static std::string Get_Word_Definition_Msg(std::string_view primary_word, std::string_view definiton); static std::string Get_Not_Found_Word_Definition_Msg(); - static std::string Get_Metrics_Count_Msg(std::int64_t metrics_count); + static std::string Get_Metrics_Range_Msg(const std::pair& metrics_range); static std::string Get_Metrics_Msg(const SMetrics& metrics); static std::string Get_Limit_Api_Requests_Msg(); }; \ No newline at end of file