From c0385681241e64538d1999b588d9980ca12aef8b Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Tue, 19 Nov 2019 13:53:05 +0100 Subject: [PATCH] adding filtered methods --- src/serversdk/databasetable.cpp | 13 ++++++++++--- src/serversdk/databasetable.h | 5 +++-- test/auto/database/tst_databasetable.cpp | 12 ++++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/serversdk/databasetable.cpp b/src/serversdk/databasetable.cpp index b03e8d9..4cce529 100644 --- a/src/serversdk/databasetable.cpp +++ b/src/serversdk/databasetable.cpp @@ -13,9 +13,10 @@ DatabaseTable::DatabaseTable(QObject *parent) : QObject(parent) { } -QByteArray DatabaseTable::jsonData() const +QByteArray DatabaseTable::jsonData(const QSet &filters) const { - QJsonDocument doc = QJsonDocument::fromVariant(this->toVariantMap()); + auto variantMap = this->toVariantMap(filters); + QJsonDocument doc = QJsonDocument::fromVariant(variantMap); return doc.toJson(QJsonDocument::Compact); } @@ -31,7 +32,7 @@ bool DatabaseTable::fromJson(const QByteArray &data) } /** Creates universal variant structure to hold key / value pairs */ -QVariantMap DatabaseTable::toVariantMap() const +QVariantMap DatabaseTable::toVariantMap(const QSet &filters) const { QVariantMap variantMap; @@ -44,6 +45,11 @@ QVariantMap DatabaseTable::toVariantMap() const // Get key -> value pairs QString name = prop.name(); + + // Filter property + if (filters.contains(name)) + continue; + QVariant::Type type = prop.type(); QVariant value(type); value.setValue(prop.read(this)); @@ -53,6 +59,7 @@ QVariantMap DatabaseTable::toVariantMap() const return variantMap; } + bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap) { diff --git a/src/serversdk/databasetable.h b/src/serversdk/databasetable.h index 01a5fc8..a90b5f8 100644 --- a/src/serversdk/databasetable.h +++ b/src/serversdk/databasetable.h @@ -2,6 +2,7 @@ #include #include +#include #include @@ -87,7 +88,7 @@ public: * @brief Creates JSON from QMetaObject data ( Q_PROPERTY ) -> TABLE_PROPERTY * @return text json e.g. { "id": 00344 } */ - virtual QByteArray jsonData() const; + virtual QByteArray jsonData(const QSet &filters = {}) const; /** * @brief Populates object with JSON {"id": 300} ) @@ -99,7 +100,7 @@ public: * @brief Creates VariantMap from QMetaObject data ( Q_PROPERTY ) * @return QVariantMap containing property with key/value pairs */ - virtual QVariantMap toVariantMap() const; + virtual QVariantMap toVariantMap(const QSet &filters = {}) const; /** diff --git a/test/auto/database/tst_databasetable.cpp b/test/auto/database/tst_databasetable.cpp index 7949a83..d246662 100644 --- a/test/auto/database/tst_databasetable.cpp +++ b/test/auto/database/tst_databasetable.cpp @@ -32,9 +32,9 @@ class EnumTest : public serversdk::DatabaseTable TABLE_PROPERTY(bool, noValidity, setNoValidity, false); TABLE_PROPERTY(QString, subjectId, setSubjectId, QString()); public: - QByteArray jsonData() const override + QByteArray jsonData(const QSet &filters = QSet()) const override { - auto variantMap = this->toVariantMap(); + auto variantMap = this->toVariantMap(filters); auto enabled = variantMap["enabled"].toBool(); auto noValidity = variantMap["noValidity"].toBool(); variantMap.remove("enabled"); @@ -149,8 +149,12 @@ void DatabaseTableTest::enum_test() void DatabaseTableTest::filter_json_test() { auto book = std::make_shared(); - QCOMPARE(book->jsonData(), QByteArray("{\"author\":\"Me\",\"id\":0,\"name\":\"Test\",\"uuid\":\"\"}")); - QCOMPARE(book->filteredJson(), QByteArray("{\"id\":0,\"name\":\"Test\",\"uuid\":\"\"}")); + QCOMPARE(book->jsonData(), QByteArray(R"({"author":"Me","id":0,"name":"Test","uuid":""})")); + + + const QByteArray filtered(R"({"id":0,"name":"Test","uuid":""})"); + QCOMPARE(book->filteredJson(), filtered); + QCOMPARE(book->jsonData({"author"}), filtered); }