adding filtered methods

This commit is contained in:
Filip Bucek 2019-11-19 13:53:05 +01:00
parent 7f369b075d
commit c038568124
3 changed files with 21 additions and 9 deletions

View File

@ -13,9 +13,10 @@ DatabaseTable::DatabaseTable(QObject *parent) : QObject(parent)
{ {
} }
QByteArray DatabaseTable::jsonData() const QByteArray DatabaseTable::jsonData(const QSet<QString> &filters) const
{ {
QJsonDocument doc = QJsonDocument::fromVariant(this->toVariantMap()); auto variantMap = this->toVariantMap(filters);
QJsonDocument doc = QJsonDocument::fromVariant(variantMap);
return doc.toJson(QJsonDocument::Compact); return doc.toJson(QJsonDocument::Compact);
} }
@ -31,7 +32,7 @@ bool DatabaseTable::fromJson(const QByteArray &data)
} }
/** Creates universal variant structure to hold key / value pairs */ /** Creates universal variant structure to hold key / value pairs */
QVariantMap DatabaseTable::toVariantMap() const QVariantMap DatabaseTable::toVariantMap(const QSet<QString> &filters) const
{ {
QVariantMap variantMap; QVariantMap variantMap;
@ -44,6 +45,11 @@ QVariantMap DatabaseTable::toVariantMap() const
// Get key -> value pairs // Get key -> value pairs
QString name = prop.name(); QString name = prop.name();
// Filter property
if (filters.contains(name))
continue;
QVariant::Type type = prop.type(); QVariant::Type type = prop.type();
QVariant value(type); QVariant value(type);
value.setValue(prop.read(this)); value.setValue(prop.read(this));
@ -53,6 +59,7 @@ QVariantMap DatabaseTable::toVariantMap() const
return variantMap; return variantMap;
} }
bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap) bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap)
{ {

View File

@ -2,6 +2,7 @@
#include <QObject> #include <QObject>
#include <QVariantMap> #include <QVariantMap>
#include <QSet>
#include <memory> #include <memory>
@ -87,7 +88,7 @@ public:
* @brief Creates JSON from QMetaObject data ( Q_PROPERTY ) -> TABLE_PROPERTY * @brief Creates JSON from QMetaObject data ( Q_PROPERTY ) -> TABLE_PROPERTY
* @return text json e.g. { "id": 00344 } * @return text json e.g. { "id": 00344 }
*/ */
virtual QByteArray jsonData() const; virtual QByteArray jsonData(const QSet<QString> &filters = {}) const;
/** /**
* @brief Populates object with JSON {"id": 300} ) * @brief Populates object with JSON {"id": 300} )
@ -99,7 +100,7 @@ public:
* @brief Creates VariantMap from QMetaObject data ( Q_PROPERTY ) * @brief Creates VariantMap from QMetaObject data ( Q_PROPERTY )
* @return QVariantMap containing property with key/value pairs * @return QVariantMap containing property with key/value pairs
*/ */
virtual QVariantMap toVariantMap() const; virtual QVariantMap toVariantMap(const QSet<QString> &filters = {}) const;
/** /**

View File

@ -32,9 +32,9 @@ class EnumTest : public serversdk::DatabaseTable
TABLE_PROPERTY(bool, noValidity, setNoValidity, false); TABLE_PROPERTY(bool, noValidity, setNoValidity, false);
TABLE_PROPERTY(QString, subjectId, setSubjectId, QString()); TABLE_PROPERTY(QString, subjectId, setSubjectId, QString());
public: public:
QByteArray jsonData() const override QByteArray jsonData(const QSet<QString> &filters = QSet<QString>()) const override
{ {
auto variantMap = this->toVariantMap(); auto variantMap = this->toVariantMap(filters);
auto enabled = variantMap["enabled"].toBool(); auto enabled = variantMap["enabled"].toBool();
auto noValidity = variantMap["noValidity"].toBool(); auto noValidity = variantMap["noValidity"].toBool();
variantMap.remove("enabled"); variantMap.remove("enabled");
@ -149,8 +149,12 @@ void DatabaseTableTest::enum_test()
void DatabaseTableTest::filter_json_test() void DatabaseTableTest::filter_json_test()
{ {
auto book = std::make_shared<BookTable>(); auto book = std::make_shared<BookTable>();
QCOMPARE(book->jsonData(), QByteArray("{\"author\":\"Me\",\"id\":0,\"name\":\"Test\",\"uuid\":\"\"}")); QCOMPARE(book->jsonData(), QByteArray(R"({"author":"Me","id":0,"name":"Test","uuid":""})"));
QCOMPARE(book->filteredJson(), QByteArray("{\"id\":0,\"name\":\"Test\",\"uuid\":\"\"}"));
const QByteArray filtered(R"({"id":0,"name":"Test","uuid":""})");
QCOMPARE(book->filteredJson(), filtered);
QCOMPARE(book->jsonData({"author"}), filtered);
} }