profile pages

This commit is contained in:
2026-07-21 17:31:43 +10:00
parent 09ec5a33ec
commit 3a63c68c2d
4 changed files with 37 additions and 4 deletions

View File

@@ -169,6 +169,7 @@ int main() {
std::stringstream ss;
ss << headerTop << "<meta content='Chookchat' property='og:title' /><meta content='See posts from cool people' property='og:description' />" << headerBottom;
ss << "<div id='posts-header'><h1>posts</h1></div>";
std::lock_guard<std::mutex> lock(data_mutex);
@@ -214,6 +215,36 @@ int main() {
}
});
svr.Get("/profile/:username", [&headerTop, &headerBottom, &footer, &e404, &database, &data_mutex](const httplib::Request& request, httplib::Response& response){
std::string username = request.path_params.at("username");
std::lock_guard<std::mutex> lock(data_mutex);
try {
std::optional<User> user = database.getUserByName(username);
if (!user.has_value()) {
response.status = 404;
response.set_content(e404, "text/html");
}
std::vector<Post> posts = database.getUserPosts(user->id);
std::stringstream ss;
ss << headerTop << "<meta content='See posts from " << username << " on Chookchat' property='og:title' />" << headerBottom;
ss << "<div id='posts-header'><h1>" << username << "'s posts</h1></div>";
for (const auto& post : posts) {
ss << post.genHtml();
}
ss << footer;
response.set_content(ss.str(), "text/html");
} catch (const std::runtime_error& e) {
response.status = 500;
response.set_content("<p>there was an error :( it is: " + std::string(e.what()) + "</p>", "text/html");
} catch (const std::exception& e) {
response.status = 500;
response.set_content("<p>there was an error :( it is: " + std::string(e.what()) + "</p>", "text/html");
}
});
// endpoint to be used by HTML forms
svr.Post("/make_post", [&database, &data_mutex](const httplib::Request& request, httplib::Response& response) {