Skip to content

Commit b339005

Browse files
committed
Merge branch 'main' into feature/tests
2 parents 3b541ca + ce834b0 commit b339005

8 files changed

+195
-41
lines changed

BackendlessAPI.cpp

+37-5
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,59 @@ BackendlessAPI::BackendlessAPI(QString _appId, QString _apiKey, QString _endpoin
2222

2323
}
2424

25-
void BackendlessAPI::addItemToTable(QString tableName, QMap<QString, QString> params) {
26-
return request(
25+
void BackendlessAPI::addItemToTable(QString tableName, PostParams params) {
26+
request(
2727
&networkAccessManager,
2828
this,
2929
endpoint + appId + "/" + apiKey + "/data/" + tableName,
30-
params, true, [&](QNetworkReply* reply){
30+
params,
31+
BERequestMethod::post,
32+
[&](QNetworkReply* reply){
3133
auto replyValue = reply->readAll();
3234
qDebug() << replyValue;
3335
emit itemAdded();
3436
}
3537
);
3638
}
3739

40+
void BackendlessAPI::deleteItemFromTable(QString tableName, QString objectId) {
41+
request(
42+
&networkAccessManager,
43+
this,
44+
endpoint + appId + "/" + apiKey + "/data/" + tableName + "/" + objectId,
45+
{
46+
47+
},
48+
BERequestMethod::deleteResource,
49+
[&](QNetworkReply* reply){
50+
auto replyValue = reply->readAll();
51+
qDebug() << replyValue;
52+
extractResult<DeletionResult>(
53+
replyValue,
54+
[&](auto result) {
55+
emit deleteItemFromTableSuccess(result);
56+
},
57+
[&](auto beError) {
58+
emit deleteItemFromTableError(beError);
59+
},
60+
[&](auto jsonError) {
61+
62+
}
63+
);
64+
}
65+
);
66+
}
67+
3868
void BackendlessAPI::loadTableItems(QString tableName) {
39-
return request(
69+
request(
4070
&networkAccessManager,
4171
this,
4272
endpoint + appId + "/" + apiKey + "/data/" + tableName,
4373
{
4474

45-
}, false, [&](QNetworkReply* reply){
75+
},
76+
BERequestMethod::get,
77+
[&](QNetworkReply* reply){
4678
auto replyValue = reply->readAll();
4779
qDebug() << replyValue;
4880
#ifdef BACKENDLESS_VARIANT_RESPONSE

BackendlessAPI.hpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,34 @@
1111

1212
#include <QString>
1313
#include <QMap>
14+
#include <QJsonObject>
1415
#include <QNetworkAccessManager>
1516
#include "BackendlessUserAPI.hpp"
1617

18+
struct DeletionResult {
19+
long deletionTime;
20+
21+
DeletionResult(QJsonObject jsonObject): deletionTime(jsonObject["deletionTime"].toInteger()) { }
22+
};
23+
1724
class BackendlessAPI: public QObject, public BasicAPI {
1825
Q_OBJECT
1926

2027
public:
2128
BackendlessAPI(QString _appId, QString _apiKey, QString _endpoint = "https://eu-api.backendless.com/");
22-
void addItemToTable(QString, QMap<QString, QString>);
29+
void addItemToTable(QString, PostParams);
30+
void deleteItemFromTable(QString, QString);
2331
void loadTableItems(QString);
2432

2533
signals:
2634
void itemAdded();
35+
void deleteItemFromTableSuccess(DeletionResult);
36+
void deleteItemFromTableError(BackendlessError);
2737
#ifdef BACKENDLESS_VARIANT_RESPONSE
2838

2939
#else
3040
void loadTableItemsSuccess(QString);
31-
void loadTableItemsError(BackendlessErrorCode);
41+
void loadTableItemsError(BackendlessError);
3242
#endif
3343

3444
public:

BackendlessUser.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111
BasicBackendlessRegisterUser::BasicBackendlessRegisterUser(
1212
QString _email,
1313
QString _password
14-
): email(_email), password(_password) {
14+
): email(new StringPostParam(_email)), password(new StringPostParam(_password)) {
1515
}
1616

17-
QMap<QString, QString> BasicBackendlessRegisterUser::getAllParams() {
17+
BasicBackendlessRegisterUser::~BasicBackendlessRegisterUser() {
18+
delete email;
19+
delete password;
20+
}
21+
22+
PostParams BasicBackendlessRegisterUser::getAllParams() {
1823
return {
1924
{"email", email},
2025
{"password", password}

BackendlessUser.hpp

+13-6
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99
#ifndef BACKENDLESS_USER_H
1010
#define BACKENDLESS_USER_H
1111

12+
#include <QJsonObject>
1213
#include <QMap>
1314
#include <QString>
15+
#include <QJsonParseError>
16+
#include "BasicAPI.hpp"
1417

1518
class BackendlessRegisterUserRepresentable {
1619
public:
17-
virtual QMap<QString, QString> getAllParams() = 0;
20+
virtual ~BackendlessRegisterUserRepresentable() = default;
21+
virtual PostParams getAllParams() = 0;
1822
};
1923

2024
struct BasicBackendlessRegisterUser: BackendlessRegisterUserRepresentable {
@@ -23,20 +27,23 @@ struct BasicBackendlessRegisterUser: BackendlessRegisterUserRepresentable {
2327
QString _email,
2428
QString _password
2529
);
30+
~BasicBackendlessRegisterUser() override;
2631

27-
QMap<QString, QString> getAllParams() override;
32+
PostParams getAllParams() override;
2833

2934
protected:
30-
QString email;
31-
QString password;
35+
StringPostParam* email;
36+
StringPostParam* password;
3237
};
3338

3439
struct BackendlessSignInUser {
3540
QString userToken;
3641

3742
BackendlessSignInUser(
38-
QString _userToken
39-
): userToken(_userToken) { }
43+
QJsonObject jsonObject
44+
): userToken(jsonObject["user-token"].toString()) {
45+
46+
}
4047
};
4148

4249
#endif

BackendlessUserAPI.cpp

+50-12
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,26 @@
1212
#include <QNetworkReply>
1313
#include <QJsonDocument>
1414
#include <QJsonObject>
15+
#include <QStandardPaths>
16+
#include <QFile>
1517
#include "BackendlessUserAPI.hpp"
1618

1719
BackendlessUserAPI::BackendlessUserAPI(QNetworkAccessManager* _networkAccessManager, QString _appId, QString _apiKey, QString _endpoint): QObject(),
1820
networkAccessManager(_networkAccessManager),
1921
appId(_appId),
2022
apiKey(_apiKey),
2123
endpoint(_endpoint) {
22-
24+
readTokenFromDisk();
25+
qDebug() << userTokenValue;
2326
}
2427

2528
void BackendlessUserAPI::registerUser(BackendlessRegisterUserRepresentable& user) {
26-
return request(
29+
request(
2730
networkAccessManager,
2831
this,
2932
endpoint + appId + "/" + apiKey + "/users/register",
3033
user.getAllParams(),
31-
true,
34+
BERequestMethod::post,
3235
[&](QNetworkReply* reply){
3336
auto replyValue = reply->readAll();
3437
qDebug() << replyValue;
@@ -39,14 +42,16 @@ void BackendlessUserAPI::registerUser(BackendlessRegisterUserRepresentable& user
3942
}
4043

4144
void BackendlessUserAPI::signInUser(QString login, QString password) {
42-
return request(
45+
request(
4346
networkAccessManager,
4447
this,
4548
endpoint + appId + "/" + apiKey + "/users/login",
4649
{
47-
{"login", login},
48-
{"password", password}
49-
}, true, [&](QNetworkReply* reply){
50+
{"login", new StringPostParam(login)},
51+
{"password", new StringPostParam(password)}
52+
},
53+
BERequestMethod::post,
54+
[&](QNetworkReply* reply){
5055
auto replyValue = reply->readAll();
5156
qDebug() << replyValue;
5257

@@ -67,6 +72,8 @@ void BackendlessUserAPI::signInUser(QString login, QString password) {
6772
extractResult<BackendlessSignInUser>(
6873
replyValue,
6974
[&](auto user) {
75+
userTokenValue = user.userToken;
76+
saveTokenOnDisk();
7077
emit signInUserSuccess(user);
7178
},
7279
[&](auto beError) {
@@ -81,14 +88,39 @@ void BackendlessUserAPI::signInUser(QString login, QString password) {
8188
);
8289
}
8390

91+
QString BackendlessUserAPI::tokenFilePath() {
92+
auto path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
93+
return path + "/backendless_token.txt";
94+
}
95+
96+
void BackendlessUserAPI::readTokenFromDisk() {
97+
QFile file(tokenFilePath());
98+
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
99+
QTextStream stream(&file);
100+
stream >> userTokenValue;
101+
}
102+
file.close();
103+
}
104+
105+
void BackendlessUserAPI::saveTokenOnDisk() {
106+
QFile file(tokenFilePath());
107+
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
108+
QTextStream stream(&file);
109+
stream << userTokenValue;
110+
}
111+
file.close();
112+
}
113+
84114
void BackendlessUserAPI::validateUserToken() {
85-
return request(
115+
request(
86116
networkAccessManager,
87117
this,
88-
endpoint + appId + "/" + apiKey + "/users/isvalidusertoken/" + userToken,
118+
endpoint + appId + "/" + apiKey + "/users/isvalidusertoken/" + userTokenValue,
89119
{
90120

91-
}, false, [&](QNetworkReply* reply){
121+
},
122+
BERequestMethod::get,
123+
[&](QNetworkReply* reply){
92124
auto replyValue = reply->readAll();
93125
qDebug() << replyValue;
94126

@@ -114,17 +146,23 @@ void BackendlessUserAPI::validateUserToken() {
114146
}
115147

116148
void BackendlessUserAPI::restorePassword(QString email) {
117-
return request(
149+
request(
118150
networkAccessManager,
119151
this,
120152
endpoint + appId + "/" + apiKey + "/users/restorepassword/" + email,
121153
{
122154

123-
}, false, [&](QNetworkReply* reply){
155+
},
156+
BERequestMethod::get,
157+
[&](QNetworkReply* reply){
124158
auto replyValue = reply->readAll();
125159
qDebug() << replyValue;
126160

127161
emit restorePasswordSuccess(replyValue);
128162
}
129163
);
130164
}
165+
166+
QString BackendlessUserAPI::userToken() {
167+
return userTokenValue;
168+
}

BackendlessUserAPI.hpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ class BackendlessUserAPI: public QObject, public BasicAPI {
2828
void signInUser(QString, QString);
2929
void validateUserToken();
3030
void restorePassword(QString);
31+
QString userToken();
32+
33+
private:
34+
QString tokenFilePath();
35+
void readTokenFromDisk();
36+
void saveTokenOnDisk();
3137

3238
signals:
3339
void registerUserResult();
@@ -54,7 +60,7 @@ class BackendlessUserAPI: public QObject, public BasicAPI {
5460
QString appId;
5561
QString apiKey;
5662
QString endpoint;
57-
QString userToken;
63+
QString userTokenValue;
5864
};
5965

6066
#endif

BasicAPI.cpp

+15-8
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ void BasicAPI::request(
1818
QNetworkAccessManager* networkAccessManager,
1919
const QObject* context,
2020
QString urlString,
21-
QMap<QString, QString> customParams,
22-
bool isPost,
21+
PostParams customParams,
22+
BERequestMethod method,
2323
std::function<void(QNetworkReply*)> const& handleRequest
2424
) {
2525
QUrl url(urlString);
@@ -34,9 +34,7 @@ void BasicAPI::request(
3434
params += key;
3535
params += "\"";
3636
params += ":";
37-
params += "\"";
38-
params += value;
39-
params += "\"";
37+
params += value->asParam();
4038
params += ",";
4139
}
4240

@@ -46,10 +44,19 @@ void BasicAPI::request(
4644
QObject::connect(networkAccessManager, &QNetworkAccessManager::finished, context, [handleRequest](QNetworkReply* reply) {
4745
handleRequest(reply);
4846
}, Qt::SingleShotConnection);
49-
if (isPost) {
50-
networkAccessManager->post(request, params.toUtf8());
51-
} else {
47+
switch (method) {
48+
case BERequestMethod::get:
5249
networkAccessManager->get(request);
50+
break;
51+
case BERequestMethod::post:
52+
networkAccessManager->post(request, params.toUtf8());
53+
break;
54+
case BERequestMethod::deleteResource:
55+
networkAccessManager->deleteResource(request);
56+
break;
57+
case BERequestMethod::put:
58+
networkAccessManager->put(request, params.toUtf8());
59+
break;
5360
}
5461
}
5562

0 commit comments

Comments
 (0)