backend: Some refactoring

Reuse "check if player exists" fn where needed. Also, the same fn was
refactored to handle using an existing DB Connection.
This commit is contained in:
Stephen Seo 2022-03-29 17:10:12 +09:00
parent fe56adf562
commit c5b9156df3

View file

@ -53,19 +53,19 @@ impl DBHandler {
} }
let conn = conn_result.unwrap(); let conn = conn_result.unwrap();
loop { loop {
let stmt_result = conn.prepare("SELECT id FROM players WHERE id = ?;"); let exists_result = self.check_if_player_exists(Some(&conn), player_id);
if let Err(e) = stmt_result { if let Ok(exists) = exists_result {
println!("Failed to create sqlite statement: {:?}", e); if exists {
player_id = thread_rng().gen();
} else {
break;
}
} else {
let error = exists_result.unwrap_err();
println!("Failed to check if player exists in db: {:?}", error);
self.shutdown_tx.send(()).ok(); self.shutdown_tx.send(()).ok();
return true; return true;
} }
let mut stmt = stmt_result.unwrap();
match stmt.query_row([player_id], |_row| Ok(())) {
Ok(_) => {
player_id = thread_rng().gen();
}
Err(_) => break,
}
} }
let insert_result = conn.execute( let insert_result = conn.execute(
"INSERT INTO players (id, date_added) VALUES (?, datetime());", "INSERT INTO players (id, date_added) VALUES (?, datetime());",
@ -243,7 +243,7 @@ impl DBHandler {
fn check_if_player_is_paired(&self, player_id: u32) -> Result<CheckPairingType, String> { fn check_if_player_is_paired(&self, player_id: u32) -> Result<CheckPairingType, String> {
{ {
let player_exists_result = self.check_if_player_exists(player_id); let player_exists_result = self.check_if_player_exists(None, player_id);
if player_exists_result.is_err() || !player_exists_result.unwrap() { if player_exists_result.is_err() || !player_exists_result.unwrap() {
// player doesn't exist // player doesn't exist
return Ok((false, false, true)); return Ok((false, false, true));
@ -271,17 +271,24 @@ impl DBHandler {
} }
} }
fn check_if_player_exists(&self, player_id: u32) -> Result<bool, String> { fn check_if_player_exists(
let conn = self.get_conn(DBFirstRun::NotFirstRun)?; &self,
conn: Option<&Connection>,
let check_player_row = player_id: u32,
conn.query_row("SELECT id FROM players WHERE id = ?;", [player_id], |row| { ) -> Result<bool, String> {
row.get::<usize, u32>(0) if let Some(conn) = conn {
}); let check_player_row =
if let Ok(_id) = check_player_row { conn.query_row("SELECT id FROM players WHERE id = ?;", [player_id], |row| {
Ok(true) row.get::<usize, u32>(0)
});
if let Ok(_id) = check_player_row {
Ok(true)
} else {
Ok(false)
}
} else { } else {
Ok(false) let conn = self.get_conn(DBFirstRun::NotFirstRun)?;
self.check_if_player_exists(Some(&conn), player_id)
} }
} }
} }