Merge pull request #11017 from Chocobo1/apictrl

Improvements to APIController class
This commit is contained in:
Mike Tzou
2019-08-06 10:17:27 +08:00
committed by GitHub
5 changed files with 18 additions and 11 deletions

View File

@@ -28,6 +28,8 @@
#include "apicontroller.h"
#include <algorithm>
#include <QJsonDocument>
#include <QMetaObject>
@@ -45,8 +47,8 @@ QVariant APIController::run(const QString &action, const StringMap &params, cons
m_params = params;
m_data = data;
const QString methodName {action + QLatin1String("Action")};
if (!QMetaObject::invokeMethod(this, methodName.toLatin1().constData()))
const QByteArray methodName = action.toLatin1() + "Action";
if (!QMetaObject::invokeMethod(this, methodName.constData()))
throw APIError(APIErrorType::NotFound);
return m_result;
@@ -69,9 +71,13 @@ const DataMap &APIController::data() const
void APIController::checkParams(const QSet<QString> &requiredParams) const
{
const QSet<QString> params {this->params().keys().toSet()};
const bool hasAllRequiredParams = std::all_of(requiredParams.cbegin(), requiredParams.cend()
, [this](const QString &requiredParam)
{
return params().contains(requiredParam);
});
if (!params.contains(requiredParams))
if (!hasAllRequiredParams)
throw APIError(APIErrorType::BadParams);
}

View File

@@ -28,7 +28,7 @@
#pragma once
#include <QMap>
#include <QHash>
#include <QObject>
#include <QSet>
#include <QVariant>
@@ -36,8 +36,9 @@
class QString;
struct ISessionManager;
using StringMap = QMap<QString, QString>;
using DataMap = QMap<QString, QByteArray>;
using DataMap = QHash<QString, QByteArray>;
using StringMap = QHash<QString, QString>;
class APIController : public QObject
{