check nick and email are unique
This commit is contained in:
parent
a951a7584a
commit
6f7a3c568c
2 changed files with 17 additions and 7 deletions
|
|
@ -5,7 +5,7 @@ let f ?email ?nick ?password request =
|
||||||
% begin match User.register ~email ~nick ~password with
|
% begin match User.register ~email ~nick ~password with
|
||||||
% | Error e ->
|
% | Error e ->
|
||||||
Error: <%s e %>
|
Error: <%s e %>
|
||||||
% | Ok _ ->
|
% | Ok _ (* TODO: do not match on _ *) ->
|
||||||
User created !
|
User created !
|
||||||
% end;
|
% end;
|
||||||
% | _ ->
|
% | _ ->
|
||||||
|
|
|
||||||
12
src/user.ml
12
src/user.ml
|
|
@ -48,8 +48,16 @@ let register ~email ~nick ~password =
|
||||||
if not valid then
|
if not valid then
|
||||||
Error "Something is wrong"
|
Error "Something is wrong"
|
||||||
else
|
else
|
||||||
(* TODO: add check uniqueness of id *)
|
|
||||||
let open Sqlite3_utils in
|
let open Sqlite3_utils in
|
||||||
|
let unique =
|
||||||
|
Db.with_db (fun db ->
|
||||||
|
exec_raw_args db
|
||||||
|
"SELECT EXISTS(SELECT 1 FROM user WHERE nick=? OR email=?);"
|
||||||
|
[| Data.TEXT nick; Data.TEXT email |]
|
||||||
|
~f:Cursor.to_list )
|
||||||
|
in
|
||||||
|
match unique with
|
||||||
|
| Ok [ [| Data.INT 0L |] ] -> (
|
||||||
let res =
|
let res =
|
||||||
Db.with_db (fun db ->
|
Db.with_db (fun db ->
|
||||||
exec_raw_args db "INSERT INTO user VALUES (?, ?, ?);"
|
exec_raw_args db "INSERT INTO user VALUES (?, ?, ?);"
|
||||||
|
|
@ -58,4 +66,6 @@ let register ~email ~nick ~password =
|
||||||
in
|
in
|
||||||
match res with
|
match res with
|
||||||
| Ok res -> Ok res
|
| Ok res -> Ok res
|
||||||
|
| Error e -> Error (Format.sprintf "db error: %s" (Rc.to_string e)) )
|
||||||
|
| Ok _ -> Error "nick or email already exists"
|
||||||
| Error e -> Error (Format.sprintf "db error: %s" (Rc.to_string e))
|
| Error e -> Error (Format.sprintf "db error: %s" (Rc.to_string e))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue