#include "Client.h" using namespace drogon; void Client::get(const HttpRequestPtr &, std::function &&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 &&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()); }