diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.h b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.h --- a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.h +++ b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -50,6 +51,8 @@ void putMessageItem(const MessageItem &item); std::shared_ptr findMessageItem(const std::string &messageID); + std::vector> + findMessageItemsByReceiever(const std::string &toDeviceID); void removeMessageItem(const std::string &messageID); }; diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.cpp b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.cpp --- a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.cpp +++ b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseManager.cpp @@ -193,6 +193,34 @@ return std::move(this->innerFindItem(request)); } +std::vector> +DatabaseManager::findMessageItemsByReceiever(const std::string &toDeviceID) { + std::vector> result; + + Aws::DynamoDB::Model::QueryRequest req; + req.SetTableName(MessageItem().getTableName()); + req.SetKeyConditionExpression( + MessageItem::FIELD_TO_DEVICE_ID + " = :valueToMatch"); + + AttributeValues attributeValues; + attributeValues.emplace(":valueToMatch", toDeviceID); + + req.SetExpressionAttributeValues(attributeValues); + req.SetIndexName("toDeviceID-index"); + + const Aws::DynamoDB::Model::QueryOutcome &outcome = + getDynamoDBClient()->Query(req); + if (!outcome.IsSuccess()) { + throw std::runtime_error(outcome.GetError().GetMessage()); + } + const Aws::Vector &items = outcome.GetResult().GetItems(); + for (auto &item : items) { + result.push_back(std::make_shared(item)); + } + + return result; +} + void DatabaseManager::removeMessageItem(const std::string &messageID) { this->innerRemoveItem(*(createItemByType()), messageID); }