Users can join and leave
This commit is contained in:
@@ -192,6 +192,42 @@ impl RealmChat for RealmChatServer {
|
|||||||
format!("Hello, {name}!")
|
format!("Hello, {name}!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn join_server(self, _: Context, stoken: String, user: User) -> Result<(), ErrorCode> {
|
||||||
|
if !self.is_stoken_valid(&user.userid, &stoken).await {
|
||||||
|
return Err(Unauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.is_user_in_server(&user.userid).await {
|
||||||
|
return Err(AlreadyJoinedServer)
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = query!(
|
||||||
|
"INSERT INTO user (userid, name, online, admin) VALUES (?,?,?,?)",
|
||||||
|
user.userid, user.name, false, false).execute(&self.db_pool).await;
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(_) => Ok(()),
|
||||||
|
Err(_) => Err(MalformedDBResponse),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn leave_server(self, _: Context, stoken: String, user: User) -> Result<(), ErrorCode> {
|
||||||
|
if !self.is_stoken_valid(&user.userid, &stoken).await {
|
||||||
|
return Err(Unauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !self.is_user_in_server(&user.userid).await {
|
||||||
|
return Err(NotInServer)
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = query!("DELETE FROM user WHERE userid = ?",user.userid).execute(&self.db_pool).await;
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(_) => Ok(()),
|
||||||
|
Err(_) => Err(MalformedDBResponse),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async fn send_message(self, _: Context, stoken: String, mut message: Message) -> Result<Message, ErrorCode> {
|
async fn send_message(self, _: Context, stoken: String, mut message: Message) -> Result<Message, ErrorCode> {
|
||||||
if !self.is_stoken_valid(&message.user.userid, &stoken).await { // Check sender userid
|
if !self.is_stoken_valid(&message.user.userid, &stoken).await { // Check sender userid
|
||||||
return Err(Unauthorized)
|
return Err(Unauthorized)
|
||||||
@@ -356,10 +392,6 @@ impl RealmChat for RealmChatServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn join_server(self, _: Context, stoken: String, user: User) -> Result<User, ErrorCode> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn create_room(self, _: Context, stoken: String, room: Room) -> Result<Room, ErrorCode> {
|
async fn create_room(self, _: Context, stoken: String, room: Room) -> Result<Room, ErrorCode> {
|
||||||
if !self.is_user_admin(&stoken).await {
|
if !self.is_user_admin(&stoken).await {
|
||||||
return Err(Unauthorized)
|
return Err(Unauthorized)
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ use crate::types::MessageData::*;
|
|||||||
pub trait RealmChat {
|
pub trait RealmChat {
|
||||||
async fn test(name: String) -> String;
|
async fn test(name: String) -> String;
|
||||||
|
|
||||||
|
async fn join_server(stoken: String, user: User) -> Result<(), ErrorCode>;
|
||||||
|
async fn leave_server(stoken: String, user: User) -> Result<(), ErrorCode>;
|
||||||
|
|
||||||
//NOTE: Any user authorized as themselves
|
//NOTE: Any user authorized as themselves
|
||||||
async fn send_message(stoken: String, message: Message) -> Result<Message, ErrorCode>;
|
async fn send_message(stoken: String, message: Message) -> Result<Message, ErrorCode>;
|
||||||
async fn start_typing(stoken: String, userid: String, roomid: String) -> ErrorCode;
|
async fn start_typing(stoken: String, userid: String, roomid: String) -> ErrorCode;
|
||||||
@@ -27,7 +30,6 @@ pub trait RealmChat {
|
|||||||
async fn get_user(userid: String) -> Result<User, ErrorCode>;
|
async fn get_user(userid: String) -> Result<User, ErrorCode>;
|
||||||
async fn get_users() -> Result<Vec<User>, ErrorCode>;
|
async fn get_users() -> Result<Vec<User>, ErrorCode>;
|
||||||
async fn get_online_users() -> Result<Vec<User>, ErrorCode>;
|
async fn get_online_users() -> Result<Vec<User>, ErrorCode>;
|
||||||
async fn join_server(stoken: String, user: User) -> Result<User, ErrorCode>;
|
|
||||||
async fn create_room(stoken: String, room: Room) -> Result<Room, ErrorCode>;
|
async fn create_room(stoken: String, room: Room) -> Result<Room, ErrorCode>;
|
||||||
async fn delete_room(stoken: String, roomid: String) -> Result<(), ErrorCode>;
|
async fn delete_room(stoken: String, roomid: String) -> Result<(), ErrorCode>;
|
||||||
async fn rename_room(stoken: String, roomid: String, new_name: String) -> Result<(), ErrorCode>;
|
async fn rename_room(stoken: String, roomid: String, new_name: String) -> Result<(), ErrorCode>;
|
||||||
|
|||||||
Reference in New Issue
Block a user