summaryrefslogtreecommitdiff
path: root/lib/post_handlers.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/post_handlers.ml')
-rw-r--r--lib/post_handlers.ml185
1 files changed, 110 insertions, 75 deletions
diff --git a/lib/post_handlers.ml b/lib/post_handlers.ml
index 2035792..dc0f43b 100644
--- a/lib/post_handlers.ml
+++ b/lib/post_handlers.ml
@@ -1,4 +1,5 @@
open Piaf
+open Shared
type pool = ((module Rapper_helper.CONNECTION), Caqti_error.t) Caqti_eio.Pool.t
@@ -8,32 +9,47 @@ type pool = ((module Rapper_helper.CONNECTION), Caqti_error.t) Caqti_eio.Pool.t
let create_post (db_pool : pool) (request : Request.t) =
Caqti_eio.Pool.use
(fun conn ->
- (* Parse JSON body *)
- match Body.to_string request.body with
- | Error _ -> Ok (Response.create `Bad_request)
- | Ok body_str ->
- try
- let json = Yojson.Safe.from_string body_str in
- let open Yojson.Safe.Util in
- let title = json |> member "title" |> to_string in
- let content = json |> member "content" |> to_string in
- let tags = json |> member "tags" |> to_string_option |> Option.value ~default:"" in
- let url = json |> member "url" |> to_string_option |> Option.value ~default:"" in
- let date = Unix.time () |> Unix.gmtime |> fun tm ->
- Printf.sprintf "%04d-%02d-%02d %02d:%02d:%02d"
- (tm.tm_year + 1900) (tm.tm_mon + 1) tm.tm_mday
- tm.tm_hour tm.tm_min tm.tm_sec in
- (* Insert the post *)
- match Query.create_post ~title ~content ~date ~tags ~url conn with
- | Ok () ->
- let response_json = `Assoc ["message", `String "Post created successfully"] in
- Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
- | Error err ->
- Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
- Ok (Response.create `Internal_server_error)
- with
- | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
- | _ -> Ok (Response.create `Bad_request))
+ (* Parse JSON body *)
+ match Body.to_string request.body with
+ | Error _ -> Ok (Response.create `Bad_request)
+ | Ok body_str ->
+ (try
+ let json = Yojson.Safe.from_string body_str in
+ let open Yojson.Safe.Util in
+ let title = json |> member "title" |> to_string in
+ let content = json |> member "content" |> to_string in
+ let tags =
+ json |> member "tags" |> to_string_option |> Option.value ~default:""
+ in
+ let url =
+ json |> member "url" |> to_string_option |> Option.value ~default:""
+ in
+ let date =
+ Unix.time ()
+ |> Unix.gmtime
+ |> fun tm ->
+ Printf.sprintf
+ "%04d-%02d-%02d %02d:%02d:%02d"
+ (tm.tm_year + 1900)
+ (tm.tm_mon + 1)
+ tm.tm_mday
+ tm.tm_hour
+ tm.tm_min
+ tm.tm_sec
+ in
+ (* Insert the post *)
+ match Query.create_post ~title ~content ~date ~tags ~url conn with
+ | Ok () ->
+ let response_json =
+ `Assoc [ "message", `String "Post created successfully" ]
+ in
+ Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
+ | Error err ->
+ Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
+ Ok (Response.create `Internal_server_error)
+ with
+ | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
+ | _ -> Ok (Response.create `Bad_request)))
db_pool
;;
@@ -41,33 +57,50 @@ let create_post (db_pool : pool) (request : Request.t) =
let create_comment (db_pool : pool) (request : Request.t) =
Caqti_eio.Pool.use
(fun conn ->
- match Body.to_string request.body with
- | Error _ -> Ok (Response.create `Bad_request)
- | Ok body_str ->
- try
- let json = Yojson.Safe.from_string body_str in
- let open Yojson.Safe.Util in
- let content = json |> member "content" |> to_string in
- let post_id = json |> member "post_id" |> to_int in
- let parent = json |> member "parent" |> to_int_option in
- let author = json |> member "author" |> to_string in
- let tags = json |> member "tags" |> to_string_option |> Option.value ~default:"" in
- let url = json |> member "url" |> to_string_option |> Option.value ~default:"" in
- let date = Unix.time () |> Unix.gmtime |> fun tm ->
- Printf.sprintf "%04d-%02d-%02d %02d:%02d:%02d"
- (tm.tm_year + 1900) (tm.tm_mon + 1) tm.tm_mday
- tm.tm_hour tm.tm_min tm.tm_sec in
- (* Insert the comment *)
- match Query.create_comment ~content ~date ~tags ~url ~post_id ?parent ~author conn with
- | Ok () ->
- let response_json = `Assoc ["message", `String "Comment created successfully"] in
- Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
- | Error err ->
- Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
- Ok (Response.create `Internal_server_error)
- with
- | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
- | _ -> Ok (Response.create `Bad_request))
+ match Body.to_string request.body with
+ | Error _ -> Ok (Response.create `Bad_request)
+ | Ok body_str ->
+ (try
+ let json = Yojson.Safe.from_string body_str in
+ let open Yojson.Safe.Util in
+ let content = json |> member "content" |> to_string in
+ let post_id = json |> member "post_id" |> to_int in
+ let parent = json |> member "parent" |> to_int_option in
+ let author = json |> member "author" |> to_string in
+ let tags =
+ json |> member "tags" |> to_string_option |> Option.value ~default:""
+ in
+ let url =
+ json |> member "url" |> to_string_option |> Option.value ~default:""
+ in
+ let date =
+ Unix.time ()
+ |> Unix.gmtime
+ |> fun tm ->
+ Printf.sprintf
+ "%04d-%02d-%02d %02d:%02d:%02d"
+ (tm.tm_year + 1900)
+ (tm.tm_mon + 1)
+ tm.tm_mday
+ tm.tm_hour
+ tm.tm_min
+ tm.tm_sec
+ in
+ (* Insert the comment *)
+ match
+ Query.create_comment ~content ~date ~tags ~url ~post_id ?parent ~author conn
+ with
+ | Ok () ->
+ let response_json =
+ `Assoc [ "message", `String "Comment created successfully" ]
+ in
+ Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
+ | Error err ->
+ Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
+ Ok (Response.create `Internal_server_error)
+ with
+ | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
+ | _ -> Ok (Response.create `Bad_request)))
db_pool
;;
@@ -75,26 +108,28 @@ let create_comment (db_pool : pool) (request : Request.t) =
let create_vote (db_pool : pool) (request : Request.t) =
Caqti_eio.Pool.use
(fun conn ->
- match Body.to_string request.body with
- | Error _ -> Ok (Response.create `Bad_request)
- | Ok body_str ->
- try
- let json = Yojson.Safe.from_string body_str in
- let open Yojson.Safe.Util in
- let user_id = json |> member "user_id" |> to_string in
- let vote_type = json |> member "vote_type" |> to_string in
- let post_id = json |> member "post_id" |> to_int_option in
- let comment_id = json |> member "comment_id" |> to_int_option in
- (* Insert the vote *)
- match Query.create_vote ~user_id ~vote_type ?post_id ?comment_id conn with
- | Ok () ->
- let response_json = `Assoc ["message", `String "Vote created successfully"] in
- Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
- | Error err ->
- Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
- Ok (Response.create `Internal_server_error)
- with
- | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
- | _ -> Ok (Response.create `Bad_request))
+ match Body.to_string request.body with
+ | Error _ -> Ok (Response.create `Bad_request)
+ | Ok body_str ->
+ (try
+ let json = Yojson.Safe.from_string body_str in
+ let open Yojson.Safe.Util in
+ let user_id = json |> member "user_id" |> to_string in
+ let vote_type = json |> member "vote_type" |> to_string in
+ let post_id = json |> member "post_id" |> to_int_option in
+ let comment_id = json |> member "comment_id" |> to_int_option in
+ (* Insert the vote *)
+ match Query.create_vote ~user_id ~vote_type ?post_id ?comment_id conn with
+ | Ok () ->
+ let response_json =
+ `Assoc [ "message", `String "Vote created successfully" ]
+ in
+ Ok (Response.of_string ~body:(Yojson.Safe.to_string response_json) `Created)
+ | Error err ->
+ Logs.err (fun m -> m "Database error: %a" Caqti_error.pp err);
+ Ok (Response.create `Internal_server_error)
+ with
+ | Yojson.Json_error _ -> Ok (Response.create `Bad_request)
+ | _ -> Ok (Response.create `Bad_request)))
db_pool
-;; \ No newline at end of file
+;;