summaryrefslogtreecommitdiff
path: root/src/database/user.rs
diff options
context:
space:
mode:
authorniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-26 12:25:13 +0100
committerniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-26 12:25:13 +0100
commit5898e5ab4359945ef52dc7460bb2937a85603fc2 (patch)
tree0ef4c760bd6e30df2897e9cc725552ef54e51983 /src/database/user.rs
parente3f0f700bf2de3b8e7d7c72893a4d6cb128f000d (diff)
authentication done
Diffstat (limited to 'src/database/user.rs')
-rw-r--r--src/database/user.rs84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/database/user.rs b/src/database/user.rs
new file mode 100644
index 0000000..ff7b1ab
--- /dev/null
+++ b/src/database/user.rs
@@ -0,0 +1,84 @@
+use crate::database::DatabaseWrapper;
+use serde::{Deserialize, Serialize};
+use sqlx::mysql::MySqlQueryResult;
+
+#[derive(Deserialize, Serialize)]
+pub struct User {
+ pub id: Option<i32>,
+ pub name: Option<String>,
+ password: Option<String>,
+}
+
+#[derive(Deserialize, Serialize)]
+pub struct UserForm {
+ name: Option<String>,
+ password: Option<String>,
+}
+
+impl DatabaseWrapper {
+ pub async fn register(&self, data: UserForm) -> Result<MySqlQueryResult, sqlx::Error> {
+ if data.name.is_none() || data.password.is_none() {
+ return Err(sqlx::Error::RowNotFound);
+ }
+
+ sqlx::query!(
+ "INSERT INTO user (name, password)
+ VALUE (?, PASSWORD(?))",
+ data.name,
+ data.password,
+ )
+ .execute(&self.db_pool)
+ .await
+ }
+
+ pub async fn login(&self, data: UserForm) -> Result<Option<User>, sqlx::Error> {
+ if data.name.is_none() || data.password.is_none() {
+ return Err(sqlx::Error::RowNotFound);
+ }
+
+ sqlx::query_as!(
+ User,
+ "SELECT * FROM user
+ WHERE ? = name
+ AND password(?) = password
+ ",
+ data.name,
+ data.password,
+ )
+ .fetch_optional(&self.db_pool)
+ .await
+ }
+
+ pub async fn delete_user(&self, data: UserForm) -> Result<MySqlQueryResult, sqlx::Error> {
+ if data.name.is_none() || data.password.is_none() {
+ return Err(sqlx::Error::RowNotFound);
+ }
+
+ match sqlx::query_as!(
+ User,
+ "SELECT * FROM user
+ WHERE name = ?
+ AND password = password(?)
+ ",
+ data.name,
+ data.password,
+ )
+ .fetch_one(&self.db_pool)
+ .await
+ {
+ Ok(_) => (),
+ Err(_) => return Err(sqlx::Error::RowNotFound),
+ };
+
+ sqlx::query!(
+ "DELETE FROM user
+ WHERE name = ?
+ AND password = password(?)
+ ",
+ data.name,
+ data.password,
+ )
+ .execute(&self.db_pool)
+ .await
+ }
+}