88 lines
2.4 KiB
C++
88 lines
2.4 KiB
C++
#include "Client.h"
|
|
|
|
using namespace drogon;
|
|
|
|
void Client::get(const HttpRequestPtr &,
|
|
std::function<void(const HttpResponsePtr &)> &&callback,
|
|
std::string key)
|
|
{
|
|
nosql::RedisClientPtr redisClient = app().getRedisClient();
|
|
|
|
redisClient->execCommandAsync(
|
|
[callback](const nosql::RedisResult &r) {
|
|
if (r.type() == nosql::RedisResultType::kNil)
|
|
{
|
|
auto resp = HttpResponse::newHttpResponse();
|
|
resp->setStatusCode(k404NotFound);
|
|
callback(resp);
|
|
return;
|
|
}
|
|
|
|
std::string redisResponse = r.asString();
|
|
Json::Value response;
|
|
|
|
Json::CharReaderBuilder builder;
|
|
Json::CharReader *reader = builder.newCharReader();
|
|
|
|
Json::Value json;
|
|
std::string errors;
|
|
|
|
bool parsingSuccessful =
|
|
reader->parse(redisResponse.c_str(),
|
|
redisResponse.c_str() + redisResponse.size(),
|
|
&json,
|
|
&errors);
|
|
|
|
delete reader;
|
|
|
|
response["response"] = redisResponse;
|
|
if (parsingSuccessful)
|
|
{
|
|
response["response"] = json;
|
|
}
|
|
|
|
auto resp = HttpResponse::newHttpJsonResponse(response);
|
|
|
|
callback(resp);
|
|
},
|
|
[](const std::exception &err) {
|
|
LOG_ERROR << "something failed!!! " << err.what();
|
|
},
|
|
"get %s",
|
|
key.c_str());
|
|
}
|
|
|
|
void Client::post(const HttpRequestPtr &req,
|
|
std::function<void(const HttpResponsePtr &)> &&callback,
|
|
std::string key)
|
|
{
|
|
nosql::RedisClientPtr redisClient = app().getRedisClient();
|
|
auto json = req->getJsonObject();
|
|
|
|
if (!json)
|
|
{
|
|
auto resp = HttpResponse::newHttpResponse();
|
|
resp->setBody("missing 'value' in body");
|
|
resp->setStatusCode(k400BadRequest);
|
|
callback(resp);
|
|
return;
|
|
}
|
|
|
|
std::string value = (*json)["value"].asString();
|
|
|
|
redisClient->execCommandAsync(
|
|
[callback](const nosql::RedisResult &) {
|
|
auto resp = HttpResponse::newHttpResponse();
|
|
|
|
resp->setStatusCode(k201Created);
|
|
|
|
callback(resp);
|
|
},
|
|
[](const std::exception &err) {
|
|
LOG_ERROR << "something failed!!! " << err.what();
|
|
},
|
|
"set %s %s",
|
|
key.c_str(),
|
|
value.c_str());
|
|
}
|