diff options
| author | Fuwn <[email protected]> | 2021-03-21 18:25:57 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2021-03-21 18:25:57 +0000 |
| commit | d1de7e83e71bbcd987d7d11fb8e9ab31cffb777b (patch) | |
| tree | 4f3854a912cfbeacd0f153af421b352a1719bd32 | |
| parent | etc: publicize tables struct fields (diff) | |
| download | whirl-d1de7e83e71bbcd987d7d11fb8e9ab31cffb777b.tar.xz whirl-d1de7e83e71bbcd987d7d11fb8e9ab31cffb777b.zip | |
etc: get started on implementing db routines
http://dev.worlds.net/private/GammaDocs/WorldServer.html#RoomServer
| -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() { } |