feat: implement MoloApp plans 01-15 with integration
Full C++23 framework tree: runtime, observability, security, data, app, realtime, supervisor, clients, CLI, example plus enterprise tenancy, audit, operability, governance, supplychain. Postgres via docker compose for tests.
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
#include "App.hpp"
|
||||
|
||||
#include "../fw/Router.hpp"
|
||||
#include "../fw/View.hpp"
|
||||
|
||||
namespace molo::example::app {
|
||||
|
||||
namespace {
|
||||
|
||||
class GreetView : public fw::View {
|
||||
public:
|
||||
using fw::View::View;
|
||||
|
||||
fw::Response get() override {
|
||||
return fw::JsonResponse(
|
||||
"{\"view\":\"GreetView\",\"method\":\"GET\",\"name\":\"" +
|
||||
fw::json_escape(req_.query_or("name", "stranger")) + "\"}",
|
||||
200);
|
||||
}
|
||||
|
||||
fw::Response post() override {
|
||||
auto form = fw::parse_form(req_.body);
|
||||
auto it = form.find("name");
|
||||
std::string name = it == form.end() ? "stranger" : it->second;
|
||||
return fw::JsonResponse(
|
||||
"{\"view\":\"GreetView\",\"method\":\"POST\",\"name\":\"" +
|
||||
fw::json_escape(name) + "\"}",
|
||||
200);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
void register_routing_demo(fw::Router& router, Services& services) {
|
||||
(void)services;
|
||||
router.get("/hello/{name}", "hello", [](fw::Request req) {
|
||||
return fw::JsonResponse(
|
||||
"{\"hello\":\"" + fw::json_escape(req.param_or("name", "")) + "\"}",
|
||||
200);
|
||||
});
|
||||
|
||||
fw::Router views;
|
||||
views.get("/greet", "greet", [](fw::Request req) {
|
||||
GreetView view(std::move(req));
|
||||
return view.dispatch();
|
||||
});
|
||||
views.post("/greet", "greet-post", [](fw::Request req) {
|
||||
GreetView view(std::move(req));
|
||||
return view.dispatch();
|
||||
});
|
||||
router.include_router("/views", views, "views.");
|
||||
|
||||
fw::Router nested;
|
||||
nested.get("/deep", "deep", [](fw::Request req) {
|
||||
(void)req;
|
||||
return fw::JsonResponse("{\"nested\":true}", 200);
|
||||
});
|
||||
fw::Router middle;
|
||||
middle.include_router("/nested", nested, "nested.");
|
||||
router.include_router("/routers", middle, "routers.");
|
||||
}
|
||||
|
||||
void register_chain_demo(std::shared_ptr<fw::Application> app,
|
||||
Services& services) {
|
||||
(void)services;
|
||||
auto leaf = std::make_shared<fw::Application>();
|
||||
fw::Router r;
|
||||
r.get("/whoami", "whoami", [](fw::Request req) {
|
||||
(void)req;
|
||||
return fw::JsonResponse("{\"depth\":3,\"path\":\"/app1/app1/app1\"}", 200);
|
||||
});
|
||||
leaf->include_router("", r);
|
||||
auto mid = std::make_shared<fw::Application>();
|
||||
mid->mount("/app1", leaf);
|
||||
auto top = std::make_shared<fw::Application>();
|
||||
top->mount("/app1", mid);
|
||||
app->mount("/app1", top);
|
||||
}
|
||||
|
||||
} // namespace molo::example::app
|
||||
Reference in New Issue
Block a user