You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

48 lines
1.3 KiB

#pragma once
#include <drogon/HttpController.h>
#include <drogon/HttpResponse.h>
#include <json/json.h>
using namespace drogon;
class ApiController : public HttpController<ApiController>
{
public:
METHOD_LIST_BEGIN
ADD_METHOD_TO(ApiController::getInfo, "/api/info", Get);
ADD_METHOD_TO(ApiController::postData, "/api/data", Post);
METHOD_LIST_END
void getInfo(const HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
{
Json::Value ret;
ret["status"] = "ok";
ret["version"] = "1.0.0";
ret["message"] = "Welcome to CppServerProject";
auto resp = HttpResponse::newHttpJsonResponse(ret);
callback(resp);
}
void postData(const HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
{
auto json = req->getJsonObject();
if (!json)
{
auto resp = HttpResponse::newHttpResponse();
resp->setStatusCode(k400BadRequest);
resp->setBody("Invalid JSON data");
callback(resp);
return;
}
Json::Value ret;
ret["status"] = "received";
ret["data"] = *json;
auto resp = HttpResponse::newHttpJsonResponse(ret);
callback(resp);
}
};