diff --git a/src/db.rs b/src/db.rs index 2b0bfea..cf2269c 100644 --- a/src/db.rs +++ b/src/db.rs @@ -23,3 +23,14 @@ pub async fn room_id_from_uuid(db: &PgPool, room_uuid: Uuid) -> Result Result { + sqlx::query_scalar("SELECT username FROM user_ WHERE uuid = $1") + .bind(user_uuid) + .fetch_one(db) + .await + .map_err(|_| (StatusCode::UNAUTHORIZED, String::from("Wrong token"))) +} diff --git a/src/routes/messages.rs b/src/routes/messages.rs index f6eb8b5..76632ef 100644 --- a/src/routes/messages.rs +++ b/src/routes/messages.rs @@ -7,12 +7,12 @@ use axum::{ use sqlx::PgPool; use uuid::Uuid; -use crate::db::user_id_from_uuid; +use crate::db::{user_id_from_uuid, username_from_uuid}; use crate::{auth::verify_jwt, db::room_id_from_uuid}; #[derive(sqlx::FromRow, serde::Serialize, Debug)] pub struct Message { - pub sender: Uuid, + pub sender: String, pub message_type: String, pub content: String, } @@ -57,7 +57,7 @@ async fn list_messages( let messages = sqlx::query_as::<_, Message>( r#" SELECT - u.uuid AS sender, + u.username AS sender, r.uuid AS room, m.type AS message_type, m.content @@ -106,10 +106,12 @@ async fn create_message( .await .map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create message")))?; + let sender_name = username_from_uuid(&db, claims.sub).await?; + Ok(( StatusCode::CREATED, Json(Message { - sender: claims.sub, + sender: sender_name, message_type: payload.message_type, content: payload.content, }), diff --git a/src/routes/rooms.rs b/src/routes/rooms.rs index 00e6de6..0a540ee 100644 --- a/src/routes/rooms.rs +++ b/src/routes/rooms.rs @@ -7,8 +7,8 @@ use axum::{ use sqlx::PgPool; use uuid::Uuid; -use crate::auth::verify_jwt; use crate::db::user_id_from_uuid; +use crate::{auth::verify_jwt, db::room_id_from_uuid}; #[derive(sqlx::FromRow, serde::Serialize)] pub struct Room { @@ -75,6 +75,15 @@ async fn create_room( .await .map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create room")))?; + let room_id = room_id_from_uuid(&db, room_uuid).await?; + + sqlx::query("INSERT INTO membership_ (user_id, room) VALUES ($1, $2)") + .bind(user_id) + .bind(room_id) + .execute(&db) + .await + .map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create room")))?; + Ok(( StatusCode::CREATED, Json(Room {