From 3d882056bc78707ff57321862522ca8d1fc2a3c1 Mon Sep 17 00:00:00 2001 From: Brendan Golden Date: Sun, 7 Sep 2025 18:58:35 +0100 Subject: [PATCH] fix: proper fix for teh dissapearing id_wolves --- src/bin/update_data.rs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/bin/update_data.rs b/src/bin/update_data.rs index b99f325..3f12345 100644 --- a/src/bin/update_data.rs +++ b/src/bin/update_data.rs @@ -56,9 +56,7 @@ async fn update_wolves_id(db: &Pool) { } } -async fn get_account_hashmap(db: &Pool) -> HashMap { - // get all users, toss in hashmap then query for differences? - let mut users_existing = HashMap::new(); +async fn get_account(db: &Pool) -> Vec { match sqlx::query_as::<_, Accounts>( r#" SELECT * @@ -69,15 +67,28 @@ async fn get_account_hashmap(db: &Pool) -> HashMap { .await { Ok(res) => { - for account in &res { - users_existing.insert(account.user.to_owned(), account.to_owned()); - } + return res; } Err(e) => { dbg!(e); } } + vec![] +} + +fn get_account_hashmap_username(accounts: &Vec) -> HashMap { + let mut users_existing = HashMap::new(); + for account in accounts { + users_existing.insert(account.user.to_owned(), account.to_owned()); + } + users_existing +} +fn get_account_hashmap_email(accounts: &Vec) -> HashMap { + let mut users_existing = HashMap::new(); + for account in accounts { + users_existing.insert(account.mail.to_owned(), account.to_owned()); + } users_existing } @@ -98,7 +109,10 @@ async fn update_ldap(config: &Config, db: &Pool) { } } - let existing_accounts = get_account_hashmap(db).await; + let existing_accounts = get_account(db).await; + + let existing_accounts_username = get_account_hashmap_username(&existing_accounts); + let existing_accounts_email = get_account_hashmap_email(&existing_accounts); // use this to pre load a large chunk of data if let Ok(x) = ldap.search( @@ -129,8 +143,13 @@ async fn update_ldap(config: &Config, db: &Pool) { if tmp.attrs.contains_key("uidNumber") && !tmp.attrs["uidNumber"].is_empty() { tmp_account.uid = tmp.attrs["uidNumber"][0].clone().parse().unwrap_or(0); } + // mail is what ties them together if tmp.attrs.contains_key("mail") && !tmp.attrs["mail"].is_empty() { tmp_account.mail = tmp.attrs["mail"][0].clone(); + if let Some(x) = existing_accounts_email.get(&tmp_account.mail) { + tmp_account.student_id = x.student_id.to_owned(); + tmp_account.id_wolves = x.id_wolves; + } } if tmp.attrs.contains_key("skID") && !tmp.attrs["skID"].is_empty() { tmp_account.student_id = tmp.attrs["skID"][0].clone(); @@ -140,7 +159,7 @@ async fn update_ldap(config: &Config, db: &Pool) { } if !tmp_account.user.is_empty() { - match existing_accounts.get(&tmp_account.user) { + match existing_accounts_username.get(&tmp_account.user) { None => { update_accounts(&mut transaction, &tmp_account).await; }