From 88209d88236c3d865a9f5174a0dced31920859bf Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Thu, 26 Jan 2023 17:29:16 -0500 Subject: i did things --- src/database/sessions.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/database/sessions.rs (limited to 'src/database/sessions.rs') diff --git a/src/database/sessions.rs b/src/database/sessions.rs new file mode 100644 index 0000000..7866d76 --- /dev/null +++ b/src/database/sessions.rs @@ -0,0 +1,42 @@ +use rusqlite::OptionalExtension; + +use crate::{database, types::session::Session}; + +pub fn init() -> Result<(), rusqlite::Error> { + let sql = " + CREATE TABLE IF NOT EXISTS sessions ( + user_id INTEGER PRIMARY KEY NOT NULL, + token TEXT NOT NULL, + FOREIGN KEY(user_id) REFERENCES users(user_id) + ); + "; + let conn = database::connect()?; + conn.execute(sql, ())?; + Ok(()) +} + +pub fn get_session(token: &str) -> Result, rusqlite::Error> { + let conn = database::connect()?; + let mut stmt = conn.prepare("SELECT * FROM sessions WHERE token = ?")?; + let row = stmt.query_row([token], |row| { + Ok(Session { + user_id: row.get(0)?, + token: row.get(1)?, + }) + }).optional()?; + Ok(row) +} + +pub fn set_session(user_id: u64, token: &str) -> Result<(), Box> { + let conn = database::connect()?; + let sql = "INSERT OR REPLACE INTO sessions (user_id, token) VALUES (?, ?);"; + conn.execute(sql, (user_id, token))?; + Ok(()) +} + +pub fn delete_session(user_id: u64) -> Result<(), Box> { + let conn = database::connect()?; + let sql = "DELETE FROM sessions WHERE user_id = ?;"; + conn.execute(sql, [user_id])?; + Ok(()) +} \ No newline at end of file -- cgit v1.2.3-freya