src/server.ts
import {
RenderDelete,
RenderEdit,
RenderEditForm,
RenderForm,
} 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",
},
});
break;
case "/new":
form = "new";
return new Response(form, {
headers: {
"Content-Type": "text/html",
},
});
break;
case "/edit":
if (req.method == "POST") {
const post = await req.formData();
form = await RenderEditForm(post.get("post_id")?.toString(), domain);
return new Response(form, {
headers: {
"Content-Type": "text/html",
},
});
} else {
form = await RenderEdit(req.headers.has("HX-Request"), domain);
return new Response(form, {
headers: {
"Content-Type": "text/html",
},
});
}
break;
case "/delete":
if (req.method == "DELETE") {
const post = await req.formData();
return new Response(
'<h1>RIP THAT POST <i class="nf nf-md-coffin"></i></h1>',
{
headers: {
"Content-Type": "text/html",
},
},
);
} else {
form = await RenderDelete(req.headers.has("HX-Request"), domain);
return new Response(form, {
headers: {
"Content-Type": "text/html",
},
});
}
break;
default:
return new Response("404!");
break;
}
},
});