Add message storage and fetching

pull/5/head
~erin 2021-07-18 11:37:11 -04:00
parent 0302f816ec
commit aef1bbd2a7
Signed by: erin
GPG Key ID: DA70E064A8C70F44
7 changed files with 30 additions and 5 deletions

7
Cargo.lock generated
View File

@ -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",

View File

@ -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"

View File

@ -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?

1
message.zsh Executable file
View File

@ -0,0 +1 @@
http POST 'http://localhost:8000/api/message/send' name=Sarah body="meow" date=2021-07-01 token=NULL

View File

@ -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<Mutex<Vec<Message>>> = Lazy::new(|| Mutex::new(Vec::new()));
#[get("/api/message/messages.json")]
pub fn fetch_messages() -> Json<Vec<Message>> {
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<MessageInput>, file: &str, user: &User) -> JsonValue {
// create full message object
@ -37,7 +50,9 @@ fn create_message(message: Json<MessageInput>, 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",

View File

@ -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)

View File

@ -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,