backend: Move fn init_conn into handler struct

This commit is contained in:
Stephen Seo 2022-03-29 15:05:23 +09:00
parent 40b2333767
commit 545b5a3a1b

View file

@ -37,7 +37,7 @@ impl DBHandler {
DBHandlerRequest::GetID(player_tx) => { DBHandlerRequest::GetID(player_tx) => {
// got request to create new player, create new player // got request to create new player, create new player
let mut player_id: u32 = thread_rng().gen(); let mut player_id: u32 = thread_rng().gen();
let conn_result = init_conn(&self.sqlite_path, DBFirstRun::NotFirstRun); let conn_result = self.get_conn(DBFirstRun::NotFirstRun);
if let Err(e) = conn_result { if let Err(e) = conn_result {
println!("Failed to get sqlite db connection: {:?}", e); println!("Failed to get sqlite db connection: {:?}", e);
self.shutdown_tx.send(()).ok(); self.shutdown_tx.send(()).ok();
@ -80,52 +80,52 @@ impl DBHandler {
false false
} }
}
fn init_conn(sqlite_path: &str, first_run: DBFirstRun) -> Result<Connection, String> { fn get_conn(&self, first_run: DBFirstRun) -> Result<Connection, String> {
if let Ok(conn) = Connection::open(sqlite_path) { if let Ok(conn) = Connection::open(&self.sqlite_path) {
conn.execute("PRAGMA foreign_keys = ON;", []) conn.execute("PRAGMA foreign_keys = ON;", [])
.map_err(|e| format!("Should be able to handle \"foreign_keys\": {:?}", e))?; .map_err(|e| format!("Should be able to handle \"foreign_keys\": {:?}", e))?;
let result = conn.execute( let result = conn.execute(
" "
CREATE TABLE players (id INTEGER PRIMARY KEY NOT NULL, CREATE TABLE players (id INTEGER PRIMARY KEY NOT NULL,
date_added TEXT NOT NULL, date_added TEXT NOT NULL,
game_id INTEGER, game_id INTEGER,
FOREIGN KEY(game_id) REFERENCES games(id) ON DELETE CASCADE); FOREIGN KEY(game_id) REFERENCES games(id) ON DELETE CASCADE);
", ",
[], [],
); );
if result.is_ok() { if result.is_ok() {
if first_run == DBFirstRun::FirstRun { if first_run == DBFirstRun::FirstRun {
println!("Created \"players\" table"); println!("Created \"players\" table");
}
} else if first_run == DBFirstRun::FirstRun {
println!("\"players\" table exists");
} }
} else if first_run == DBFirstRun::FirstRun {
println!("\"players\" table exists");
}
let result = conn.execute( let result = conn.execute(
" "
CREATE TABLE games (id INTEGER PRIMARY KEY NOT NULL, CREATE TABLE games (id INTEGER PRIMARY KEY NOT NULL,
cyan_player INTEGER UNIQUE, cyan_player INTEGER UNIQUE,
magenta_player INTEGER UNIQUE, magenta_player INTEGER UNIQUE,
date_added TEXT NOT NULL, date_added TEXT NOT NULL,
board TEXT NOT NULL, board TEXT NOT NULL,
status INTEGER NOT NULL, status INTEGER NOT NULL,
FOREIGN KEY(cyan_player) REFERENCES players (id), FOREIGN KEY(cyan_player) REFERENCES players (id),
FOREIGN KEY(magenta_player) REFERENCES players (id)); FOREIGN KEY(magenta_player) REFERENCES players (id));
", ",
[], [],
); );
if result.is_ok() { if result.is_ok() {
if first_run == DBFirstRun::FirstRun { if first_run == DBFirstRun::FirstRun {
println!("Created \"games\" table"); println!("Created \"games\" table");
}
} else if first_run == DBFirstRun::FirstRun {
println!("\"games\" table exists");
} }
} else if first_run == DBFirstRun::FirstRun { Ok(conn)
println!("\"games\" table exists"); } else {
Err(String::from("Failed to open connection"))
} }
Ok(conn)
} else {
Err(String::from("Failed to open connection"))
} }
} }
@ -141,7 +141,7 @@ pub fn start_db_handler_thread(
}; };
thread::spawn(move || { thread::spawn(move || {
// temporarily get conn which should initialize on first setup of db // temporarily get conn which should initialize on first setup of db
if let Ok(_conn) = init_conn(&handler.sqlite_path, DBFirstRun::FirstRun) { if let Ok(_conn) = handler.get_conn(DBFirstRun::FirstRun) {
} else { } else {
println!("ERROR: Failed init sqlite db connection"); println!("ERROR: Failed init sqlite db connection");
handler.shutdown_tx.send(()).ok(); handler.shutdown_tx.send(()).ok();