From 075862185b8f285f149d1459cd4ff6d39ae70ecb Mon Sep 17 00:00:00 2001 From: pena Date: Sun, 7 Nov 2021 01:42:18 +0100 Subject: [PATCH] add user profile page --- src/permap.ml | 5 ++++- src/user.ml | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/permap.ml b/src/permap.ml index f33e0d6..85852a7 100644 --- a/src/permap.ml +++ b/src/permap.ml @@ -57,7 +57,9 @@ let login_post request = render_unsafe (Login.f ~nick ~password request) | _ -> assert false -let user request = render_unsafe (User.list request) +let user _request = render_unsafe (User.list ()) + +let user_profile request = render_unsafe (User.profile request) let () = Dream.run ~interface:"0.0.0.0" @@ -70,5 +72,6 @@ let () = ; Dream.get "/login" login_get ; Dream.post "/login" login_post ; Dream.get "/user" user + ; Dream.get "/user/:user" user_profile ] @@ Dream.not_found diff --git a/src/user.ml b/src/user.ml index 3372a8a..263e549 100644 --- a/src/user.ml +++ b/src/user.ml @@ -70,7 +70,7 @@ let register ~email ~nick ~password = | Ok _ -> Error "nick or email already exists" | Error e -> Error (Format.sprintf "db error: %s" (Rc.to_string e)) -let list _request = +let list () = let open Sqlite3_utils in let users = Db.with_db (fun db -> @@ -85,3 +85,18 @@ let list _request = Format.fprintf fmt {|
  • %s
  • |} s s | _ -> failwith "error" ) ) users + +let profile request = + let nick = Dream.param "user" request in + let open Sqlite3_utils in + let user = + Db.with_db (fun db -> + exec_raw_args db "SELECT * FROM user WHERE nick=?;" [| Data.TEXT nick |] + ~f:Cursor.to_list + ) + in + match user with + | Ok [[| Data.TEXT nick; Data.TEXT password; Data.TEXT email |]] -> + Format.sprintf "nick = `%s`; password = `%s`; email = `%s`" nick password email + | Ok _ -> "incoherent db answer" + | Error e -> Format.sprintf "db error: %s" (Rc.to_string e)