aboutsummaryrefslogtreecommitdiff
path: root/src/request.gleam
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-05-14 06:37:52 +0000
committerFuwn <[email protected]>2024-05-14 06:37:52 +0000
commit71a9af2b1d79f2bdd70de171aa77e2f9ccd638a3 (patch)
treefc3dec26c9280af36357100e33a30bf29998b908 /src/request.gleam
downloadmayu-71a9af2b1d79f2bdd70de171aa77e2f9ccd638a3.tar.xz
mayu-71a9af2b1d79f2bdd70de171aa77e2f9ccd638a3.zip
feat: initial release
Diffstat (limited to 'src/request.gleam')
-rw-r--r--src/request.gleam57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/request.gleam b/src/request.gleam
new file mode 100644
index 0000000..8476fd5
--- /dev/null
+++ b/src/request.gleam
@@ -0,0 +1,57 @@
+import database
+import gleam/json
+import gleam/string_builder
+import svg
+import wisp.{type Response}
+
+fn middleware(
+ request: wisp.Request,
+ handle: fn(wisp.Request) -> wisp.Response,
+) -> wisp.Response {
+ let request = wisp.method_override(request)
+
+ use <- wisp.log_request(request)
+ use <- wisp.rescue_crashes
+ use request <- wisp.handle_head(request)
+
+ handle(request)
+}
+
+pub fn handle(request, connection) -> Response {
+ use _ <- middleware(request)
+
+ case wisp.path_segments(request) {
+ ["heart-beat"] ->
+ wisp.html_response(string_builder.from_string("alive"), 200)
+ ["get", "@" <> name] ->
+ wisp.ok()
+ |> wisp.set_header("Content-Type", "image/svg+xml")
+ |> wisp.string_body(svg.xml(
+ case wisp.get_query(request) {
+ [#("theme", theme)] -> theme
+ _ -> "asoul"
+ },
+ database.get_counter(connection, name).num,
+ ))
+ ["record", "@" <> name] -> {
+ let counter = database.get_counter(connection, name)
+
+ case
+ Ok(
+ json.to_string_builder(
+ json.object([
+ #("name", json.string(counter.name)),
+ #("num", json.int(counter.num)),
+ #("updated_at", json.string(counter.updated_at)),
+ #("created_at", json.string(counter.created_at)),
+ ]),
+ ),
+ )
+ {
+ Ok(builder) -> wisp.json_response(builder, 200)
+ Error(_) -> wisp.unprocessable_entity()
+ }
+ }
+ _ -> wisp.html_response(string_builder.from_string("Not found"), 404)
+ }
+}