From 9d8ea69fee5b26d804529d877d54c01229ba2322 Mon Sep 17 00:00:00 2001 From: curly Date: Tue, 7 Feb 2023 13:44:31 -0700 Subject: I hate sql --- src/main.rs | 194 +++++------------------------------------------------------- 1 file changed, 15 insertions(+), 179 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index f6163ab..a9db22e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,17 @@ #[macro_use] extern crate rocket; + +mod database; + use rocket::serde::json::Json; -use std::collections::HashMap; use rocket::State; use std::sync::Mutex; -use std::time::SystemTime; +use database::types::{Message, User, Info}; +struct SharedDB { + sdb: Mutex +} + #[derive(serde::Serialize)] struct Response (Result); @@ -48,8 +54,8 @@ fn send_message(user_id: usize, msg: String, db: &State) -> Json//")] @@ -62,8 +68,8 @@ fn send_reply(user_id: usize, message_id: usize, msg: String, db: &State")] @@ -82,7 +88,7 @@ fn get_user(id: usize, db: &State) -> Json")] -fn get_user_by_name(name: String, db: &State) -> Json, &'static str>> { +fn get_user_by_name(name: String, db: &State) -> Json> { let lock = db.sdb.lock().unwrap(); match lock.get_user_by_name(name) { Some(n) => Json(Response(Ok(n))), @@ -90,182 +96,12 @@ fn get_user_by_name(name: String, db: &State) -> Json")] -fn create_user(name: String, db: &State) -> Json> { +fn create_user(name: String, db: &State) -> Json> { let mut lock = db.sdb.lock().unwrap(); Json(Response(lock.create_user(name))) } -struct SharedDB { - sdb: Mutex -} - -struct Database { - usermap: HashMap, - messagemap: HashMap, -} -impl Database { - fn get_message(&self, id: usize) -> Option { - match self.messagemap.get(&id) { - Some(n) => Some(n.to_owned()), - None => None, - } - } - fn get_message_id_list(&self, id_start: usize, id_end: usize) -> Vec { - let mut message_id_vec: Vec = vec![]; - - for x in id_start..=id_end { - match self.messagemap.get(&x) { - Some(_) => message_id_vec.push(x), - None => (), - } - } - - return message_id_vec; - } - fn get_next_message_id(&self) -> usize { - self.messagemap.len() - } - fn get_message_newest_id(&self) -> Option { - let newest = self.get_next_message_id() as isize - 1; - let newest = if newest < 0 {0} else {newest as usize}; - match self.messagemap.get(&newest) { - Some(_) => Some(newest), - None => None, - } - } - - fn send_message(&mut self, msg: &Message) { - self.messagemap.insert(msg.id, msg.clone()); - println!("{:?}", self.messagemap.get(&0)); - } - - fn delete_message(&mut self, id: usize) -> Result<&'static str, &'static str> { - let msg = match self.messagemap.get_mut(&id) { - Some(n) => n, - None => return Err("Message not found"), - }; - - msg.delete(); - - Ok("Deleted") - } - - fn get_user(&self, id: usize) -> Option { - match self.usermap.get(&id) { - Some(n) => Some(n.to_owned()), - None => None - } - } - fn get_user_by_name(&self, name: String) -> Option> { - let list: Vec> = self.usermap.values().map(|x| if x.username == name {Some(x.clone())} else {None}).collect(); - - let mut users = vec![]; - for x in list { - match x { - Some(n) => users.push(n), - None => () - } - } - - if users.len() == 0 { - None - } else { - Some(users) - } - } - - fn create_user(&mut self, name: String) -> Result { - let id = self.usermap.len(); - let user = User::new(name.clone(), id); - - match self.get_user_by_name(name) { - Some(_) => return Err("ID taken"), - None => (), - } - - match self.usermap.get(&id) { - Some(_) => Err("ID taken"), - None => {self.usermap.insert(id, user.clone()); Ok(user)}, - } - } - - pub fn new() -> Database { - Database { - usermap: HashMap::new(), - messagemap: HashMap::new(), - - } - } -} - -#[derive(serde::Serialize, Clone, Debug)] -struct Date { - date: u64, -} -impl Date { - pub fn now() -> Date { - Date{ - date: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs() - } - } -} - -#[derive(serde::Serialize, Clone, Debug)] -struct User { - username: String, - id: usize -} -impl User { - pub fn new(name: String, id: usize) -> User { - User{ - username: name, - id: id - } - } -} - -#[derive(serde::Serialize, Clone, Debug)] -struct Message { - date: Date, - message: String, - sender: User, - id: usize, - reply_to: Option, // Message ID - deleted: bool, -} -impl Message { - pub fn new(msg: String, sender: User, id: usize, reply_to: Option) -> Message { - Message { - date: Date::now(), - sender: sender, - message: msg, - id: id, - reply_to: reply_to, - deleted: false, - } - } - - fn delete(&mut self) { - self.message.clear(); - self.deleted = true; - } -} - -#[derive(serde::Serialize)] -struct Info { - name: String, - users: usize, -} -impl Info { - pub fn get(db: std::sync::MutexGuard) -> Info { - Info{ - name: String::from("Testing"), - users: db.usermap.len(), - } - } -} - #[get("/ping")] fn ping() -> Json> { Json(Response(Ok("pong"))) @@ -299,5 +135,5 @@ fn rocket() -> _ { delete_message, ]) .mount("/", routes![api_index]) - .manage(SharedDB{sdb: Mutex::new(Database::new())}) + .manage(SharedDB{sdb: Mutex::new(database::Database::new())}) } -- cgit v1.2.3