import { addPost, modPost, rmPost, } from "./models/admin.js"; import { getPostByURL } from "./models/blog.js"; import { RenderDelete, RenderEdit, RenderEditForm, RenderForm, RenderNewForm, RenderResponse, } from "./views/admin/admin.js"; const domain: string = "https://xero.0w.nz"; Bun.serve({ port: 8888, hostname: "xero.0w.nz", tls: { cert: Bun.file("/etc/ssl/private/letsencrypt-domain.pem"), key: Bun.file("/etc/ssl/private/letsencrypt-domain.key"), }, async fetch(req) { const url = new URL(req.url); let form: string; switch (url.pathname) { case "/": form = await RenderForm(domain); return new Response(form, { headers: { "Content-Type": "text/html", }, }); case "/new": switch (req.method) { case "GET": form = await RenderNewForm(req.headers.has("HX-Request"), domain); return new Response(form, { headers: { "Content-Type": "text/html", }, }); case "POST": const newdata = await req.formData(); const newpost = { id: newdata.get("post_id"), live: newdata.get("live"), date: newdata.get("date"), title: newdata.get("title"), url: newdata.get("url"), subtitle: newdata.get("subtitle"), excerpt: newdata.get("excerpt"), content: newdata.get("content"), tags: newdata.getAll("tags").filter(function(el) { return el != ""; }), cats: newdata.getAll("cats").filter(function(el) { return el != ""; }), }; addPost(newpost); const html = await RenderResponse( "new post saved!", 'high five!' ); return new Response(html, { headers: { "Content-Type": "text/html", }, }); } case "/edit": switch (req.method) { case "POST": const postid = await req.formData(); form = await RenderEditForm( postid.get("post_id")?.toString(), domain, ); return new Response(form, { headers: { "Content-Type": "text/html", }, }); case "PUT": const editdata = await req.formData(); const editpost = { id: editdata.get("post_id"), live: editdata.get("live"), date: editdata.get("date"), title: editdata.get("title"), url: editdata.get("url"), subtitle: editdata.get("subtitle"), excerpt: editdata.get("excerpt"), content: editdata.get("content"), tags: editdata.getAll("tags").filter(function(el) { return el != ""; }), cats: editdata.getAll("cats").filter(function(el) { return el != ""; }), }; modPost(editpost); const html = await RenderResponse( "update complete", 'ok', ); return new Response(html, { headers: { "Content-Type": "text/html", }, }); case "GET": form = await RenderEdit(req.headers.has("HX-Request"), domain); return new Response(form, { headers: { "Content-Type": "text/html", }, }); } case "/delete": if (req.method == "DELETE") { const post:any = await req.formData(); const id = getPostByURL(post.get("post_id")?.toString()); rmPost(id[0].post_id); const html = await RenderResponse( 'RIP THAT POST ', 'rip', ); return new Response(html, { headers: { "Content-Type": "text/html", }, }); } else { form = await RenderDelete(req.headers.has("HX-Request"), domain); return new Response(form, { headers: { "Content-Type": "text/html", }, }); } default: return new Response("404!"); } }, });