summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorwuesk <wsk@tuta.com>2026-09-22 13:30:39 +0200
committerwuesk <wsk@tuta.com>2026-09-22 13:30:39 +0200
commit72fafe4553e075c040734e31164e50c4cdc7f319 (patch)
tree4a58557786185e993c11a5c4c27894333ab84842 /src/main.cpp
initial commitHEADmaster
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp84
1 files changed, 84 insertions, 0 deletions
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 <iostream>
+#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<GuestbookEntry> 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<std::string>();
+ entry.message = body.at("message").get<std::string>();
+
+ 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