diff options
author | curly <curlybryce@protonmail.com> | 2023-02-07 08:44:42 -0700 |
---|---|---|
committer | curly <curlybryce@protonmail.com> | 2023-02-07 08:44:42 -0700 |
commit | 8d66325e8886768f125e07790d5d4311dbaf3f03 (patch) | |
tree | ff843073835bcef54720f5adb1f905a404cc8f32 /src | |
parent | a9a90ce1ed7882c3b929bdfd537de44615b88f0b (diff) | |
download | rocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.tar.gz rocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.tar.bz2 rocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.zip |
doc + added routes
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 90 |
1 files changed, 79 insertions, 11 deletions
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<SharedDB>) -> Json(Response(Ok(list))) } } +#[get("/get_message_id_newest")] +fn get_message_id_newest(db: &State<SharedDB>) -> Json<Response<usize, &'static str>> { + 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/<user_id>/<msg>")] -fn send_message(user_id: usize, msg: String, db: &State<SharedDB>) -> Json<Response<Message, &'static str>> { +fn send_message(user_id: usize, msg: String, db: &State<SharedDB>) -> Json<Response<usize, &'static str>> { 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/<user_id>/<message_id>/<msg>")] +fn send_reply(user_id: usize, message_id: usize, msg: String, db: &State<SharedDB>) -> Json<Response<usize, &'static str>> { + 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/<id>")] +fn delete_message(id: usize, db: &State<SharedDB>) -> Json<Response<&'static str, &'static str>> { + let mut lock = db.sdb.lock().unwrap(); + + Json(Response(lock.delete_message(id))) } #[get("/get_user/<id>")] @@ -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<usize> { + 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<User> { 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<usize>, // Message ID + deleted: bool, +} +impl Message { + pub fn new(msg: String, sender: User, id: usize, reply_to: Option<usize>) -> 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())}) |