aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorcurly <curlybryce@protonmail.com>2023-02-07 08:44:42 -0700
committercurly <curlybryce@protonmail.com>2023-02-07 08:44:42 -0700
commit8d66325e8886768f125e07790d5d4311dbaf3f03 (patch)
treeff843073835bcef54720f5adb1f905a404cc8f32 /src/main.rs
parenta9a90ce1ed7882c3b929bdfd537de44615b88f0b (diff)
downloadrocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.tar.gz
rocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.tar.bz2
rocket_test-8d66325e8886768f125e07790d5d4311dbaf3f03.zip
doc + added routes
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs90
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())})