Add Visione backend foundation
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#include "ApiController.h"
|
||||
|
||||
#include <drogon/drogon.h>
|
||||
#include <drogon/orm/Exception.h>
|
||||
|
||||
#include <json/json.h>
|
||||
#include <memory>
|
||||
|
||||
using drogon::HttpResponse;
|
||||
using drogon::HttpResponsePtr;
|
||||
using drogon::k503ServiceUnavailable;
|
||||
|
||||
namespace
|
||||
{
|
||||
HttpResponsePtr jsonResponse(Json::Value body,
|
||||
drogon::HttpStatusCode status = drogon::k200OK)
|
||||
{
|
||||
auto response = HttpResponse::newHttpJsonResponse(std::move(body));
|
||||
response->setStatusCode(status);
|
||||
return response;
|
||||
}
|
||||
|
||||
Json::Value mysqlReadyBody(bool ready)
|
||||
{
|
||||
Json::Value body;
|
||||
body["status"] = ready ? "ready" : "not_ready";
|
||||
body["dependencies"]["mysql"] = ready;
|
||||
return body;
|
||||
}
|
||||
}
|
||||
|
||||
void ApiController::health(
|
||||
const drogon::HttpRequestPtr &,
|
||||
std::function<void(const HttpResponsePtr &)> &&callback)
|
||||
{
|
||||
Json::Value body;
|
||||
body["status"] = "ok";
|
||||
body["service"] = "visione-backend";
|
||||
|
||||
callback(jsonResponse(std::move(body)));
|
||||
}
|
||||
|
||||
void ApiController::ready(
|
||||
const drogon::HttpRequestPtr &,
|
||||
std::function<void(const HttpResponsePtr &)> &&callback)
|
||||
{
|
||||
auto responseCallback = std::make_shared<
|
||||
std::function<void(const HttpResponsePtr &)>>(std::move(callback));
|
||||
|
||||
try
|
||||
{
|
||||
auto dbClient = drogon::app().getDbClient();
|
||||
dbClient->execSqlAsync(
|
||||
"SELECT 1",
|
||||
[responseCallback](const drogon::orm::Result &) {
|
||||
(*responseCallback)(jsonResponse(mysqlReadyBody(true)));
|
||||
},
|
||||
[responseCallback](const drogon::orm::DrogonDbException &error) {
|
||||
auto body = mysqlReadyBody(false);
|
||||
body["errors"]["mysql"] = error.base().what();
|
||||
(*responseCallback)(
|
||||
jsonResponse(std::move(body), k503ServiceUnavailable));
|
||||
});
|
||||
}
|
||||
catch (const std::exception &error)
|
||||
{
|
||||
auto body = mysqlReadyBody(false);
|
||||
body["errors"]["mysql"] = error.what();
|
||||
(*responseCallback)(
|
||||
jsonResponse(std::move(body), k503ServiceUnavailable));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user