diff options
author | Tyler Murphy <=> | 2023-07-26 01:04:39 -0400 |
---|---|---|
committer | Tyler Murphy <=> | 2023-07-26 01:04:39 -0400 |
commit | a2c89301d5c63f573ac6680f9c11acda69043a78 (patch) | |
tree | 5d3cccf39438a41f9465e87e06c8bb43834d12f6 /src/types | |
parent | allow port env (diff) | |
download | xssbook-a2c89301d5c63f573ac6680f9c11acda69043a78.tar.gz xssbook-a2c89301d5c63f573ac6680f9c11acda69043a78.tar.bz2 xssbook-a2c89301d5c63f573ac6680f9c11acda69043a78.zip |
start dms
Diffstat (limited to 'src/types')
-rw-r--r-- | src/types/chat.rs | 98 | ||||
-rw-r--r-- | src/types/mod.rs | 1 |
2 files changed, 99 insertions, 0 deletions
diff --git a/src/types/chat.rs b/src/types/chat.rs new file mode 100644 index 0000000..dadcf10 --- /dev/null +++ b/src/types/chat.rs @@ -0,0 +1,98 @@ +use serde::Serialize; +use tracing::instrument; +use crate::{types::http::{ResponseCode, Result}, database::Database}; + +#[derive(Serialize, Clone, Debug)] +pub struct ChatRoom { + pub room_id: u64, + pub users: Vec<u64>, + pub name: String +} + +#[derive(Serialize, Clone, Debug)] +pub struct ChatMessage { + pub message_id: u64, + pub user_id: u64, + pub room_id: u64, + pub date: u64, + pub content: String +} + +impl ChatRoom { + + #[instrument(skip(db))] + pub fn new(db: &Database, users: Vec<u64>, name: String) -> Result<Self> { + let Ok(room) = db.create_room(users, name) else { + tracing::error!("Failed to create room"); + return Err(ResponseCode::InternalServerError.text("Failed to create room")) + }; + + Ok(room) + } + + #[instrument(skip(db))] + pub fn from_user_id(db: &Database, user_id: u64) -> Result<Vec<Self>> { + let Ok(rooms) = db.get_rooms(user_id) else { + tracing::error!("Failed to get rooms"); + return Err(ResponseCode::InternalServerError.text("Failed to get rooms")) + }; + + Ok(rooms) + } + + #[instrument(skip(db))] + pub fn from_user_and_room_id(db: &Database, user_id: u64, room_id: u64) -> Result<Self> { + let Ok(rooms) = db.get_rooms(user_id) else { + tracing::error!("Failed to get room"); + return Err(ResponseCode::InternalServerError.text("Failed to get room")) + }; + + for room in rooms { + if room.room_id == room_id { + return Ok(room); + } + } + + return Err(ResponseCode::BadRequest.text("Room doesnt exist or you are not in it")) + } + + #[instrument(skip(db))] + pub fn add_user(&self, db: &Database, user_id: u64) -> Result<bool> { + let Ok(success) = db.add_user_to_room(self.room_id, user_id) else { + tracing::error!("Failed to add user to room"); + return Err(ResponseCode::InternalServerError.text("Failed to add user to room")) + }; + + Ok(success) + } + + #[instrument(skip(db))] + pub fn remove_user(&self, db: &Database, user_id: u64) -> Result<bool> { + let Ok(success) = db.remove_user_from_room(self.room_id, user_id) else { + tracing::error!("Failed to remove user from room"); + return Err(ResponseCode::InternalServerError.text("Failed to remove user from room")) + }; + + Ok(success) + } + + #[instrument(skip(db))] + pub fn send_message(&self, db: &Database, user_id: u64, content: String) -> Result<ChatMessage> { + let Ok(msg) = db.create_message(self.room_id, user_id, content) else { + tracing::error!("Failed to create messgae"); + return Err(ResponseCode::InternalServerError.text("Failed to create message")) + }; + + Ok(msg) + } + + #[instrument(skip(db))] + pub fn load_old_chat_messagegs(&self, db: &Database, newest_message: u64, page: u64) -> Result<Vec<ChatMessage>> { + let Ok(msgs) = db.load_old_chat_messages(self.room_id, newest_message, page) else { + tracing::error!("Failed to load messgaes"); + return Err(ResponseCode::InternalServerError.text("Failed to load messages")) + }; + + Ok(msgs) + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs index 1ee2d08..a325ff9 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -1,3 +1,4 @@ +pub mod chat; pub mod comment; pub mod extract; pub mod http; |