From 7ca1b5aeacd9633e5a3dca9f7596975dbc686508 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 1 Mar 2026 14:39:56 +0100 Subject: slowly preparing for actual casino --- src/bin/server/database.rs | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) (limited to 'src/bin/server/database.rs') diff --git a/src/bin/server/database.rs b/src/bin/server/database.rs index 9c51997..0fac387 100644 --- a/src/bin/server/database.rs +++ b/src/bin/server/database.rs @@ -1,22 +1,34 @@ use rusqlite::Connection; pub fn init_db() -> Connection { - let conn = Connection::open("server.db").unwrap(); + let db_path = std::env::var("SERVER_DB").unwrap_or_else(|_| "server.db".to_string()); + let conn = Connection::open(&db_path).unwrap(); conn.execute( "CREATE TABLE IF NOT EXISTS users ( username TEXT PRIMARY KEY, - hashed_password TEXT NOT NULL + hashed_password TEXT NOT NULL, + account_id INTEGER UNIQUE, + balance INTEGER DEFAULT 1000 )", [], ).unwrap(); + // Add column if not exists (for migration) + let _ = conn.execute("ALTER TABLE users ADD COLUMN account_id INTEGER UNIQUE", []); + let _ = conn.execute("ALTER TABLE users ADD COLUMN balance INTEGER DEFAULT 1000", []); conn } pub fn add_user(conn: &Connection, username: &str, hashed_password: &str) -> Result<(), Box> { - conn.execute( - "INSERT INTO users (username, hashed_password) VALUES (?1, ?2)", - [username, hashed_password], - )?; + loop { + let account_id: u32 = rand::random::(); + match conn.execute( + "INSERT INTO users (username, hashed_password, account_id, balance) VALUES (?1, ?2, ?3, ?4)", + [username, hashed_password, &account_id.to_string(), "1000"], + ) { + Ok(_) => break, + Err(_) => continue, // Retry if account_id conflict + } + } Ok(()) } @@ -29,3 +41,23 @@ pub fn get_hashed_password(conn: &Connection, username: &str) -> Option None } } + +pub fn get_account_id(conn: &Connection, username: &str) -> Option { + let mut stmt = conn.prepare("SELECT account_id FROM users WHERE username = ?1").unwrap(); + let mut rows = stmt.query([username]).unwrap(); + if let Ok(Some(row)) = rows.next() { + Some(row.get::<_, u32>(0).ok()?) + } else { + None + } +} + +pub fn get_balance(conn: &Connection, username: &str) -> Option { + let mut stmt = conn.prepare("SELECT balance FROM users WHERE username = ?1").unwrap(); + let mut rows = stmt.query([username]).unwrap(); + if let Ok(Some(row)) = rows.next() { + Some(row.get::<_, i64>(0).ok()?) + } else { + None + } +} -- cgit v1.2.3