diff --git a/migrations/2023-08-27-090522_users/up.sql b/migrations/2023-08-27-090522_users/up.sql index 5275ad4..3230564 100644 --- a/migrations/2023-08-27-090522_users/up.sql +++ b/migrations/2023-08-27-090522_users/up.sql @@ -6,9 +6,7 @@ CREATE TABLE users ( account_id INTEGER references accounts(id), registered INTEGER NOT NULL, - -- idk why but we get weird errors if we use `COLLATE case_insensitive` - -- maybe troubleshoot later, this works fine for now. - username TEXT NOT NULL, -- COLLATE case_insensitive, + username TEXT NOT NULL COLLATE case_insensitive, stars INTEGER NOT NULL DEFAULT 0, demons INTEGER NOT NULL DEFAULT 0, diff --git a/readme.md b/readme.md index d58a684..a6a70e9 100644 --- a/readme.md +++ b/readme.md @@ -34,6 +34,6 @@ _these features are implemented_ ## todo -- get users multiple pages +- ___fix the fucking get users for usernames!!!!___ - move authorization logic to (./src/helpers/accounts.rs)[./src/helpers/accounts.rs] - make gjp2 authentication faster (bcrypt?) \ No newline at end of file diff --git a/src/endpoints/users/get_users.rs b/src/endpoints/users/get_users.rs index 12ef4bf..fe8530e 100644 --- a/src/endpoints/users/get_users.rs +++ b/src/endpoints/users/get_users.rs @@ -3,6 +3,7 @@ use rocket::http::Status; use rocket::response::status; use diesel::prelude::*; +use diesel::result::Error; use crate::helpers; use crate::db; @@ -13,7 +14,7 @@ pub struct FormGetUsers { str: String } -#[post("/getGJUsers20.php", data = "")] +#[post("/accounts/getGJUsers20.php", data = "")] pub fn get_users(input: Form) -> status::Custom<&'static str> { let connection = &mut db::establish_connection_pg(); @@ -21,75 +22,53 @@ pub fn get_users(input: Form) -> status::Custom<&'static str> { use crate::schema::users::dsl::*; use crate::models::User; - let mut query_users = users.into_boxed(); + let mut query = users.into_boxed(); match input.str.parse::() { - Ok(id_value) => query_users = query_users.filter(id.eq(id_value)), - Err(_) => query_users = query_users.filter(username.ilike(input.str.to_owned() + "%")) + Ok(id_value) => query = query.filter(id.eq(id_value)), + Err(_) => query = query.filter(username.like(input.str.to_owned() + "%")) }; - let mut results: Vec = vec![]; + let results = query + .order(stars.desc()) + .limit(10) + .offset(input.page * 10) + .get_result::(connection) + .expect("Fatal error loading users"); - for result in { - query_users - .order(stars.desc()) - .offset(input.page * 10) - .limit(10) - .get_results::(connection) - .expect("Fatal error loading users") - } { - let formatted_result = helpers::format::format(hashmap! { - 1 => result.username, - 2 => result.id.to_string(), - 3 => result.stars.to_string(), - 4 => result.demons.to_string(), - 8 => result.creator_points.to_string(), - 9 => { - vec![ - result.cube, - result.ship, - result.ball, - result.ufo, - result.wave, - result.robot - ][result.icon_type as usize].to_string() - }, - 10 => result.color1.to_string(), - 11 => result.color2.to_string(), - 13 => result.coins.to_string(), - 14 => result.icon_type.to_string(), - 15 => result.special.to_string(), - 16 => { - match result.account_id { - Some(account_id_value) => account_id_value.to_string(), - None => match result.udid { - Some(udid_value) => udid_value.to_string(), - None => panic!("user has no account_id or udid?!?!?") - } + let response = helpers::format::format(hashmap! { + 1 => results.username, + 2 => results.id.to_string(), + 3 => results.stars.to_string(), + 4 => results.demons.to_string(), + 8 => results.creator_points.to_string(), + 9 => { + vec![ + results.cube, + results.ship, + results.ball, + results.ufo, + results.wave, + results.robot + ][results.icon_type as usize].to_string() + }, + 10 => results.color1.to_string(), + 11 => results.color2.to_string(), + 13 => results.coins.to_string(), + 14 => results.icon_type.to_string(), + 15 => results.special.to_string(), + 16 => { + match results.account_id { + Some(account_id_value) => account_id_value.to_string(), + None => match results.udid { + Some(udid_value) => udid_value.to_string(), + None => panic!("user has no account_id or udid?!?!?") } } - }); + } + }); - results.push(formatted_result) - }; + println!("{}", response); - let mut query_users_count = users.into_boxed(); - - match input.str.parse::() { - Ok(id_value) => query_users_count = query_users_count.filter(id.eq(id_value)), - Err(_) => query_users_count = query_users_count.filter(username.ilike(input.str.to_owned() + "%")) - }; - - let amount = query_users_count - .count() - .get_result::(connection) - .expect("Error querying user count"); - - let response = if amount < 1 { - String::from("-1") - } else { - vec![results.join("|"), format!("{}:#{}:10", amount, input.page * 10)].join("#") - }; - - return status::Custom(Status::Ok, Box::leak(response.into_boxed_str())) + return status::Custom(Status::Ok, "1") } \ No newline at end of file