From 72fafe4553e075c040734e31164e50c4cdc7f319 Mon Sep 17 00:00:00 2001 From: wuesk Date: Tue, 22 Sep 2026 13:30:39 +0200 Subject: initial commit --- src/main.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/main.cpp (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..ad0214a --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,84 @@ +#include +#include "httplib.h" +#include "views.hpp" +#include "guestbook.hpp" +#include "json.hpp" + +using json = nlohmann::json; + +int main() +{ + httplib::Server server; + + int views = loadViews(); + std::vector guestbook = loadGuestbook(); + + server.Get("/health", [](const httplib::Request& request, httplib::Response& response) + { + response.set_content("OK", "text/plain"); + }); + + server.Get("/api/views", [&views](const httplib::Request& request, httplib::Response& response) + { + response.set_content(std::to_string(views), "text/plain"); + }); + + server.Post("/api/views", [&views](const httplib::Request& request, httplib::Response& response) + { + const int newViews = views + 1; + + if (!saveViews(newViews)) + { + response.status = 500; + response.set_content("Failed to save views", "text/plain"); + return; + } + + views = newViews; + + response.set_content(std::to_string(views), "text/plain"); + }); + + server.Get("/api/guestbook", [&guestbook](const httplib::Request& request, httplib::Response& response) + { + json data = json::array(); + + for (const GuestbookEntry& entry : guestbook) + { + data.push_back({ + {"name", entry.name}, + {"message", entry.message} + }); + } + + response.set_content(data.dump(), "application/json"); + }); + + server.Post("/api/guestbook", [&guestbook](const httplib::Request& request, httplib::Response& response) + { + json body = json::parse(request.body); + + GuestbookEntry entry; + entry.name = body.at("name").get(); + entry.message = body.at("message").get(); + + guestbook.push_back(entry); + + if (!saveGuestbook(guestbook)) + { + response.status = 500; + response.set_content("Failed to save guestbook", "text/plain"); + return; + } + + response.status = 201; + response.set_content("Entry created", "text/plain"); + }); + + std::cout << "Blog backend started\n"; + std::cout << "Port: 8080\n"; + + server.listen("0.0.0.0", 8080); + + return 0; +} \ No newline at end of file -- cgit v1.2.3