diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/db/routines.rs | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/src/db/routines.rs b/src/db/routines.rs index 0827d24..884944d 100644 --- a/src/db/routines.rs +++ b/src/db/routines.rs @@ -1,6 +1,61 @@ -fn modify_account_status() { } +use rusqlite::{params, Connection, Result}; +use crate::db::tables::SerialNumbers; -fn delete_account() { } +#[repr(i32)] #[derive(Debug, PartialEq)] +enum AccountStatus { + AccountInactive = 0, + AccountActive = 1, +} + +fn modify_account_status(username: &str, status: AccountStatus) -> Result<()> { + let connection = Connection::open("worlds.db")?; + + // language=SQLite + connection.execute( + "UPDATE user_registration \ + SET account_status = (?1) \ + where username = '(?2)'", + params![status as i32, username] + )?; + + Ok(()) +} + +fn delete_account(username: &str) -> Result<()> { + let connection = Connection::open("worlds.db")?; + + // Get serial_number from `username`'s row. + // language=SQLite + connection.query_row( + "SELECT * FROM serial_numbers WHERE username = '(?1)'", + params![username], + |row| row.get(0) + ); + + let mut row = connection.prepare( + "SELECT * \ + FROM serial_numbers \ + WHERE username = '(?1)';" + )?; + let row_iter = row.query_map(params![username], |row| { + Ok(SerialNumbers { + serial_number: row.get(0)?, + user_name: row.get(1)?, + serial_status: row.get(2)?, + }) + })?; + + // Reset serial number so it can be reused. + // language=SQLite + connection.execute( + "UPDATE serial_numbers \ + SET username = 'none', serial_status = 0 \ + WHERE serial_number = '(?1)'", + params![row_iter.] + )?; + + Ok(()) +} fn set_account_host() { } |