From fdbc7ed756ce455c956dd7a5885db6b6eabfd578 Mon Sep 17 00:00:00 2001 From: mrw1593 Date: Sat, 13 May 2023 13:49:56 -0400 Subject: Add the ability to search users --- src/services/db.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src/services/db.rs') diff --git a/src/services/db.rs b/src/services/db.rs index b24c640..d717594 100644 --- a/src/services/db.rs +++ b/src/services/db.rs @@ -101,6 +101,54 @@ pub async fn get_user_by_username<'c>( Ok(Some(record.try_into()?)) } +pub async fn search_users<'c>( + conn: impl Executor<'c, Database = MySql>, + username: &str, +) -> Result, RawUnexpected> { + let username = format!("%{username}%"); + let records = query_as!( + UserRow, + r"SELECT user_id, username, password_hash, password_salt, password_version + FROM users + WHERE LOCATE(?, username) != 0", + username, + ) + .fetch_all(conn) + .await?; + + Ok(records + .into_iter() + .map(|u| u.try_into()) + .collect::, RawUnexpected>>()?) +} + +pub async fn search_users_limit<'c>( + conn: impl Executor<'c, Database = MySql>, + username: &str, + offset: u32, + limit: u32, +) -> Result, RawUnexpected> { + let username = format!("%{username}%"); + let records = query_as!( + UserRow, + r"SELECT user_id, username, password_hash, password_salt, password_version + FROM users + WHERE LOCATE(?, username) != 0 + LIMIT ? + OFFSET ?", + username, + offset, + limit + ) + .fetch_all(conn) + .await?; + + Ok(records + .into_iter() + .map(|u| u.try_into()) + .collect::, RawUnexpected>>()?) +} + pub async fn get_username<'c>( conn: impl Executor<'c, Database = MySql>, user_id: Uuid, -- cgit v1.2.3