#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 app, Services& services) { (void)services; auto leaf = std::make_shared(); 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(); mid->mount("/app1", leaf); auto top = std::make_shared(); top->mount("/app1", mid); app->mount("/app1", top); } } // namespace molo::example::app