81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
#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
|