diff options
Diffstat (limited to 'lib/html.ml')
-rw-r--r-- | lib/html.ml | 49 |
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 +;; |