From aef1bbd2a7a41ab3b51b93aa3c9273822f2c5f8d Mon Sep 17 00:00:00 2001 From: Erin Nova Date: Sun, 18 Jul 2021 11:37:11 -0400 Subject: [PATCH] Add message storage and fetching --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + README.md | 4 ++-- message.zsh | 1 + src/chat.rs | 17 ++++++++++++++++- src/main.rs | 3 ++- src/message.rs | 2 +- 7 files changed, 30 insertions(+), 5 deletions(-) create mode 100755 message.zsh diff --git a/Cargo.lock b/Cargo.lock index 7382254..16038bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -632,6 +632,12 @@ dependencies = [ "libc", ] +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + [[package]] name = "opaque-debug" version = "0.3.0" @@ -679,6 +685,7 @@ dependencies = [ "chrono", "env_logger", "log 0.4.14", + "once_cell", "rocket", "rocket_contrib", "serde", diff --git a/Cargo.toml b/Cargo.toml index 0b8ab7f..ae04496 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,4 @@ log = "0.4.0" env_logger = "0.8.4" chrono = { version = "0.4.11", features = ["serde"] } rocket_contrib = { version = "0.4.10", default-features = false, features = ["json"] } +once_cell = "1.8.0" diff --git a/README.md b/README.md index 7047b82..c9890d2 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ Whenever user sends a message, client will send message & token and backend will - status is main thing to deal with, ok/fail/panic - reason is for more details, mainly just for debugging? - [ ] Basic messaging system - - [ ] Finish up `chat::create_message()` - - [ ] Create `chat::read_messages()` + - [x] Finish up `chat::create_message()` + - [x] Create `chat::fetch_messages()` - [ ] Create `chat::delete_message()` - [ ] Different types of message events? eg. default, announcement, command - [ ] Emote support? diff --git a/message.zsh b/message.zsh new file mode 100755 index 0000000..f80ed8b --- /dev/null +++ b/message.zsh @@ -0,0 +1 @@ +http POST 'http://localhost:8000/api/message/send' name=Sarah body="meow" date=2021-07-01 token=NULL diff --git a/src/chat.rs b/src/chat.rs index 835889a..c96c33c 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1,5 +1,7 @@ /* Contains Rocket code for chat/message functionality */ extern crate log; +use once_cell::sync::Lazy; +use std::sync::Mutex; use crate::file_io::read_json; use crate::message::{Message, MessageInput}; use rocket_contrib::json::{Json, JsonValue}; @@ -7,6 +9,17 @@ use chrono::prelude::*; use uuid::Uuid; use crate::user::User; +static MESSAGES: Lazy>> = Lazy::new(|| Mutex::new(Vec::new())); + +#[get("/api/message/messages.json")] +pub fn fetch_messages() -> Json> { + let messages = { + let messages = MESSAGES.lock().unwrap(); + messages.to_vec() + }; + Json(messages) +} + // Create full message object and write to file fn create_message(message: Json, file: &str, user: &User) -> JsonValue { // create full message object @@ -37,7 +50,9 @@ fn create_message(message: Json, file: &str, user: &User) -> JsonV body: message.body.to_string(), created_at: date, }; - println!("{:?}", message_obj); + info!("created mesage: {:?}", message_obj); + let mut messages = MESSAGES.lock().unwrap(); + messages.push(message_obj.to_owned()); return json!({ "status": "ok", "reason": "message created", diff --git a/src/main.rs b/src/main.rs index 13d0f7f..23a6d43 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,8 @@ fn main() { auth::change, auth::get_user_name, auth::get_user_pronouns, - chat::send_message + chat::send_message, + chat::fetch_messages ], ) .attach(cors_fairing) diff --git a/src/message.rs b/src/message.rs index c6f0d9d..f85a865 100644 --- a/src/message.rs +++ b/src/message.rs @@ -11,7 +11,7 @@ pub struct MessageInput<'r> { pub token: &'r str, } -#[derive(Debug)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Message { pub id: Uuid, pub user: User,