From 8d66325e8886768f125e07790d5d4311dbaf3f03 Mon Sep 17 00:00:00 2001 From: curly Date: Tue, 7 Feb 2023 08:44:42 -0700 Subject: doc + added routes --- src/main.rs | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 11 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 150f297..f6163ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,22 +29,48 @@ fn get_message_id_list(id_start: usize, id_end: usize, db: &State) -> Json(Response(Ok(list))) } } +#[get("/get_message_id_newest")] +fn get_message_id_newest(db: &State) -> Json> { + let lock = db.sdb.lock().unwrap(); + match lock.get_message_newest_id() { + Some(n) => Json(Response(Ok(n))), + None => Json(Response(Err("No messages"))) + } +} + #[get("/send_message//")] -fn send_message(user_id: usize, msg: String, db: &State) -> Json> { +fn send_message(user_id: usize, msg: String, db: &State) -> Json> { let mut lock = db.sdb.lock().unwrap(); let user = match lock.get_user(user_id) { Some(n) => n, None => return Json(Response(Err("User not found"))) }; - let msg = Message{ - sender: user.clone(), - message: msg, - date: Date::now(), - id: lock.get_next_message_id(), + let msg = Message::new(msg, user, lock.get_next_message_id(), None); + + lock.send_message(&msg); + Json(Response(Ok(msg.id))) +} + +#[get("/send_reply///")] +fn send_reply(user_id: usize, message_id: usize, msg: String, db: &State) -> Json> { + let mut lock = db.sdb.lock().unwrap(); + + let user = match lock.get_user(user_id) { + Some(n) => n, + None => return Json(Response(Err("User not found"))) }; - lock.send_message(msg.clone()); - Json(Response(Ok(msg))) + let msg = Message::new(msg, user, lock.get_next_message_id(), Some(message_id)); + + lock.send_message(&msg); + Json(Response(Ok(msg.id))) +} + +#[get("/delete_message/")] +fn delete_message(id: usize, db: &State) -> Json> { + let mut lock = db.sdb.lock().unwrap(); + + Json(Response(lock.delete_message(id))) } #[get("/get_user/")] @@ -100,11 +126,31 @@ impl Database { fn get_next_message_id(&self) -> usize { self.messagemap.len() } - fn send_message(&mut self, msg: Message) { - self.messagemap.insert(msg.id, msg); + 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()), @@ -185,6 +231,25 @@ struct Message { 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)] @@ -228,7 +293,10 @@ fn rocket() -> _ { ping, get_user, create_user, - get_user_by_name + get_user_by_name, + get_message_id_newest, + send_reply, + delete_message, ]) .mount("/", routes![api_index]) .manage(SharedDB{sdb: Mutex::new(Database::new())}) -- cgit v1.2.3