summaryrefslogtreecommitdiff
path: root/lib/html.ml
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-27 08:24:37 +0700
committerpolwex <polwex@sortug.com>2025-06-27 08:24:37 +0700
commitf0ada28815f35f160f0e85101728d215c0f7d7f9 (patch)
tree7eb39633d934094346745d87af436d1de39c1383 /lib/html.ml
parentba350f124bab36766af6c71ba5e3dc17f33fb5ab (diff)
m
Diffstat (limited to 'lib/html.ml')
-rw-r--r--lib/html.ml49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/html.ml b/lib/html.ml
new file mode 100644
index 0000000..db5ad51
--- /dev/null
+++ b/lib/html.ml
@@ -0,0 +1,49 @@
+open Piaf
+
+type pool = ((module Rapper_helper.CONNECTION), Caqti_error.t) Caqti_eio.Pool.t
+
+(* This is the main handler function for the GET /posts endpoint. *)
+(* It takes a database connection pool and a Piaf request as input. *)
+let get_root (db_pool : pool) (request : Request.t) =
+ let _coki = Piaf.Cookies.Cookie.parse request.headers in
+ (* Use a connection from the pool. Caqti_eio.Pool.use handles acquiring and releasing the connection. *)
+ Caqti_eio.Pool.use
+ (fun conn ->
+ (* Call the get_poasts function from the Query module to fetch posts from the database. *)
+ let posts_or_error = Query.get_poasts () conn in
+ (* Pattern match on the result of the database query. *)
+ match posts_or_error with
+ (* If the query is successful, the result is a list of posts. *)
+ | Ok posts ->
+ (* Map the list of post tuples to a Yojson list. *)
+ let json =
+ `List
+ ((* For each post tuple, create a JSON object. *)
+ List.map
+ (fun (post : Query.post_summary) ->
+ `Assoc [ "title", `String post.title ])
+ posts)
+ in
+ (* Return a 200 OK response with the JSON body. *)
+ Ok (Response.of_string ~body:(Yojson.Safe.to_string json) `OK)
+ (* If the query fails, log the error and return a 500 Internal Server Error response. *)
+ | Error err ->
+ Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
+ Ok (Response.create `Internal_server_error))
+ db_pool
+;;
+
+let render page (db_pool : pool) (_request : Request.t) =
+ (* Caqti_eio.Pool.use *)
+ (* (fun conn -> *)
+ (* let posts_or = Query.get_poasts () conn in *)
+ (* match posts_or with *)
+ (* | Error err -> *)
+ (* Logs.err (fun m -> m "Database error %a" Caqti_error.pp err); *)
+ (* Ok (Response.create `Internal_server_error) *)
+ (* | Ok _posts -> Ok (page |> ReactDOM.renderToString |> Http.send_raw_html)) *)
+ (* db_pool *)
+ Caqti_eio.Pool.use
+ (fun conn -> Ok (conn |> page |> ReactDOM.renderToString |> Http.send_raw_html))
+ db_pool
+;;