diff --git a/Makefile b/Makefile index 6d49cc2..b5333ca 100644 --- a/Makefile +++ b/Makefile @@ -300,7 +300,9 @@ createTopic: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/createTopic.cpp updateTopic: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/updateTopic.cpp @mkdir -p ./$(TESTS_DIR) $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/updateTopic $(SRCS) $(EXAMPLES_DIR)/messaging/topics/updateTopic.cpp $(LDFLAGS) - +listTopicLogs: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/listTopicLogs.cpp + @mkdir -p ./$(TESTS_DIR) + $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/listTopicLogs $(SRCS) $(EXAMPLES_DIR)/messaging/topics/listTopicLogs.cpp $(LDFLAGS) # Messaging - subscribers getSubscriber: $(SRCS) $(EXAMPLES_DIR)/messaging/subscribers/getSubscriber.cpp @mkdir -p ./$(TESTS_DIR) diff --git a/examples/messaging/topics/listTopicLogs.cpp b/examples/messaging/topics/listTopicLogs.cpp new file mode 100644 index 0000000..6160592 --- /dev/null +++ b/examples/messaging/topics/listTopicLogs.cpp @@ -0,0 +1,21 @@ +#include "Appwrite.hpp" +#include + +int main() { + std::string projectId = ""; + std::string apiKey = ""; + Appwrite appwrite(projectId, apiKey); + + std::string topicId = ""; + + std::vector queries = {}; + + try { + std::string response = appwrite.getMessaging().listTopicLogs(topicId, queries); + + std::cout << "Topic Logs: " << response << std::endl; + } catch (const AppwriteException &e) { + std::cerr << "Appwrite error: " << e.what() << std::endl; + } + return 0; +} diff --git a/include/classes/Messaging.hpp b/include/classes/Messaging.hpp index f2eef99..57a8650 100644 --- a/include/classes/Messaging.hpp +++ b/include/classes/Messaging.hpp @@ -261,6 +261,15 @@ class Messaging { */ std::string listTargets(const std::string &messageId, const std::vector &queries = {}); + + /** + * @brief List all logs for a given topic. + * @param topicID ID of the message. + * @param queries Optional query filters. + * @return JSON response. + */ + std::string listTopicLogs(const std::string &topicId, + const std::vector &queries = {}); private: std::string projectId; ///< Project ID diff --git a/src/services/Messaging.cpp b/src/services/Messaging.cpp index e74c2d3..8c3e4d3 100644 --- a/src/services/Messaging.cpp +++ b/src/services/Messaging.cpp @@ -737,3 +737,34 @@ std::string Messaging::listTargets(const std::string &messageId, } +std::string Messaging::listTopicLogs(const std::string &topicId, + const std::vector &queries) { + if (topicId.empty()) { + throw AppwriteException("Missing required parameter: 'topicId'"); + } + + std::string url = Config::API_BASE_URL + "/messaging/topics/" + topicId + "/logs"; + + std::string queryParam = ""; + if (!queries.empty()) { + queryParam += "?queries[]=" + Utils::urlEncode(queries[0]); + for (size_t i = 1; i < queries.size(); ++i) { + queryParam += "&queries[]=" + Utils::urlEncode(queries[i]); + } + } + url += queryParam; + + std::vector headers = Config::getHeaders(projectId); + headers.push_back("X-Appwrite-Key: " + apiKey); + std::string response; + + int statusCode = Utils::getRequest(url, headers, response); + if (statusCode == HttpStatus::OK) { + return response; + } else { + throw AppwriteException( + "Error fetching topic logs. Status code: " + std::to_string(statusCode) + + "\n\nResponse: " + response); + } +} +