add user to conv endpoint
This commit is contained in:
@@ -2,15 +2,13 @@
|
||||
use axum::{
|
||||
extract::{
|
||||
FromRequest,FromRequestParts, State,
|
||||
},
|
||||
response::IntoResponse,
|
||||
http::StatusCode,
|
||||
}, http::StatusCode, response::{sse::KeepAlive, IntoResponse}
|
||||
};
|
||||
|
||||
use rusqlite::params;
|
||||
|
||||
use crate::chat::extractor::{
|
||||
CreateConversationPayload,
|
||||
AddUserConversationPayload, CreateConversationPayload
|
||||
};
|
||||
use crate::utils::db_pool::{AppState};
|
||||
use crate::utils::auth::AuthClaims;
|
||||
@@ -41,4 +39,52 @@ pub async fn create_conversation(
|
||||
Err(err) => (StatusCode::INTERNAL_SERVER_ERROR, format!("Error when creating the conversation : {err}")),
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn add_user_to_conv(
|
||||
State(state): State<AppState>,
|
||||
AuthClaims {user_id, hotel_id,username}: AuthClaims,
|
||||
AddUserConversationPayload(payload):AddUserConversationPayload
|
||||
) -> impl IntoResponse {
|
||||
|
||||
let pool = state.hotel_pools.get_pool(hotel_id);
|
||||
|
||||
let conn = match pool.get(){
|
||||
Ok(conn) => conn,
|
||||
Err(err) => return (StatusCode::INTERNAL_SERVER_ERROR, format!("Pool error"))
|
||||
};
|
||||
|
||||
let mut statement = match conn.prepare(
|
||||
"SELECT 1 FROM conversation WHERE creator_id = ?1 AND id = ?2" ,
|
||||
){
|
||||
Ok(statement) => statement,
|
||||
Err(_) => return (StatusCode::INTERNAL_SERVER_ERROR, "prepare failed".to_string())
|
||||
};
|
||||
|
||||
if !statement.exists(params![user_id, payload.conv_id ])
|
||||
.map_err(|_| (StatusCode::INTERNAL_SERVER_ERROR, "Query failed".to_string())).unwrap()
|
||||
{
|
||||
// Early exit if not creator
|
||||
return ((StatusCode::FORBIDDEN, "Not the creator".to_string()));
|
||||
}
|
||||
|
||||
|
||||
for target_id in &payload.users {
|
||||
let rows_inserted = match conn.execute(
|
||||
"INSERT INTO conversation_participants (conversation_id, user_id) VALUES (?1, ?2)",
|
||||
params![payload.conv_id, target_id],
|
||||
) {
|
||||
Ok(n) => n,
|
||||
Err(err) => {
|
||||
return (StatusCode::INTERNAL_SERVER_ERROR, format!("Err adding user {}: {}", target_id, err));
|
||||
}
|
||||
};
|
||||
|
||||
if rows_inserted == 0 {
|
||||
return (StatusCode::NOT_FOUND, format!("Could not add user {}", target_id));
|
||||
}
|
||||
}
|
||||
|
||||
return (StatusCode::OK, "ok".to_string());
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user