Files

81 lines
2.2 KiB
C++
Raw Permalink Normal View History

#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