diff --git a/Makefile b/Makefile index 5b8d5d9..2bef339 100644 --- a/Makefile +++ b/Makefile @@ -261,6 +261,9 @@ deleteMessages: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/deleteMessages.cpp @mkdir -p ./$(TESTS_DIR) $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/deleteMessages $(SRCS) $(EXAMPLES_DIR)/messaging/messages/deleteMessages.cpp $(LDFLAGS) +listTargets: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/listTargets.cpp + @mkdir -p ./$(TESTS_DIR) + $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/listTargets $(SRCS) $(EXAMPLES_DIR)/messaging/messages/listTargets.cpp $(LDFLAGS) # Messaging - Topics getTopic: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/getTopic.cpp @mkdir -p ./$(TESTS_DIR) diff --git a/examples/messaging/messages/listTargets.cpp b/examples/messaging/messages/listTargets.cpp new file mode 100644 index 0000000..2e4610b --- /dev/null +++ b/examples/messaging/messages/listTargets.cpp @@ -0,0 +1,22 @@ +#include "Appwrite.hpp" +#include "classes/Messaging.hpp" +#include + +int main() { + std::string projectId = ""; + std::string apiKey = ""; + std::string messageId = ""; + + std::vector queries = {}; + + Appwrite appwrite(projectId, apiKey); + + try { + std::string response = appwrite.getMessaging().listTargets(messageId, queries); + std::cout << "Message targets retrieved successfully:\n" << 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 d739aec..8fdeaf5 100644 --- a/include/classes/Messaging.hpp +++ b/include/classes/Messaging.hpp @@ -189,6 +189,14 @@ class Messaging { */ std::string deleteMessages(const std::string &messageId); + /** + * @brief List all targets for a given message. + * @param messageId ID of the message. + * @param queries Optional query filters. + * @return JSON response. + */ + std::string listTargets(const std::string &messageId, + const std::vector &queries = {}); private: std::string projectId; ///< Project ID std::string apiKey; ///< API Key diff --git a/src/services/Messaging.cpp b/src/services/Messaging.cpp index 70dd252..4e2e037 100644 --- a/src/services/Messaging.cpp +++ b/src/services/Messaging.cpp @@ -565,4 +565,36 @@ std::string Messaging::deleteMessages(const std::string &messageId) { std::to_string(statusCode) + "\nResponse: " + response); } +} + +std::string Messaging::listTargets(const std::string &messageId, + const std::vector &queries) { + if (messageId.empty()) { + throw AppwriteException("Missing required parameter: 'messageId'"); + } + + std::string url = Config::API_BASE_URL + "/messaging/messages/" + messageId + "/targets"; + 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 message targets. Status code: " + std::to_string(statusCode) + + "\n\nResponse: " + response); + } } \ No newline at end of file