From 26a0935e5f6707c5c0d28e9c1c4772146d259f48 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Wed, 11 May 2022 00:53:47 +0530 Subject: [PATCH] feat: implement user registration for postgres via sqlx --- db/db-sqlx-postgres/src/errors.rs | 9 +++++++-- db/db-sqlx-postgres/src/lib.rs | 29 +++++++++++++++++++++++++++++ sqlx-data.json | 29 ----------------------------- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/db/db-sqlx-postgres/src/errors.rs b/db/db-sqlx-postgres/src/errors.rs index 74ea9484..29d2e843 100644 --- a/db/db-sqlx-postgres/src/errors.rs +++ b/db/db-sqlx-postgres/src/errors.rs @@ -26,8 +26,13 @@ pub fn map_register_err(e: Error) -> DBError { if let Error::Database(err) = e { if err.code() == Some(Cow::from("23505")) { let msg = err.message(); - if msg.contains("mcaptcha_users_username_key") { - unimplemented!(); + println!("{}", msg); + if msg.contains("mcaptcha_users_name_key") { + DBError::UsernameTaken + } else if msg.contains("mcaptcha_users_email_key") { + DBError::EmailTaken + } else if msg.contains("mcaptcha_users_secret_key") { + DBError::SecretTaken } else { DBError::DBError(Box::new(Error::Database(err))) } diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index f351addd..0cc424f7 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -100,6 +100,35 @@ impl MCDatabase for Database { false } } + + /// register a new user + async fn register(&self, p: &Register) -> DBResult<()> { + let res; + if let Some(email) = &p.email { + res = sqlx::query!( + "insert into mcaptcha_users + (name , password, email, secret) values ($1, $2, $3, $4)", + &p.username, + &p.hash, + &email, + &p.secret, + ) + .execute(&self.pool) + .await; + } else { + res = sqlx::query!( + "INSERT INTO mcaptcha_users + (name , password, secret) VALUES ($1, $2, $3)", + &p.username, + &p.hash, + &p.secret, + ) + .execute(&self.pool) + .await; + }; + res.map_err(map_register_err)?; + Ok(()) + } } fn now_unix_time_stamp() -> i64 { diff --git a/sqlx-data.json b/sqlx-data.json index a42738ec..6baf437a 100644 --- a/sqlx-data.json +++ b/sqlx-data.json @@ -169,21 +169,6 @@ }, "query": "SELECT time FROM mcaptcha_pow_confirmed_stats \n WHERE \n config_id = (\n SELECT config_id FROM mcaptcha_config \n WHERE \n key = $1\n AND\n user_id = (\n SELECT \n ID FROM mcaptcha_users WHERE name = $2))\n ORDER BY time DESC" }, - "45d9e9fb6344fe3a18c2529d50c935d3837bfe25c96595beb6970d6067720578": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Varchar", - "Varchar" - ] - } - }, - "query": "insert into mcaptcha_users \n (name , password, email, secret) values ($1, $2, $3, $4)" - }, "47fa50aecfb1499b0a18fa9299643017a1a8d69d4e9980032e0d8f745465d14f": { "describe": { "columns": [ @@ -387,20 +372,6 @@ }, "query": "DELETE FROM mcaptcha_levels \n WHERE config_id = (\n SELECT config_id FROM mcaptcha_config where key = ($1) \n AND user_id = (\n SELECT ID from mcaptcha_users WHERE name = $2\n )\n )" }, - "81c779ed4bb59f8b94dea730cbda31f7733ef16d509a3ed607388b5ddef74638": { - "describe": { - "columns": [], - "nullable": [], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Varchar" - ] - } - }, - "query": "INSERT INTO mcaptcha_users \n (name , password, secret) VALUES ($1, $2, $3)" - }, "84484cb6892db29121816bc5bff5702b9e857e20aa14e79d080d78ae7593153b": { "describe": { "columns": [