added global room creation in frontend and fixed global rooms

This commit is contained in:
2025-12-18 08:06:20 +01:00
parent d20962101e
commit 9114a1383b
2 changed files with 22 additions and 11 deletions

View File

@@ -13,8 +13,9 @@ use crate::{auth::verify_jwt, db::room_id_from_uuid};
#[derive(sqlx::FromRow, serde::Serialize)] #[derive(sqlx::FromRow, serde::Serialize)]
pub struct Room { pub struct Room {
pub uuid: Uuid, pub uuid: Uuid,
pub owner: i32, pub owner_name: String,
pub name: String, pub name: String,
pub global: bool,
} }
#[derive(serde::Deserialize)] #[derive(serde::Deserialize)]
@@ -33,13 +34,12 @@ pub fn routes() -> Router {
pub async fn is_member(user_id: i32, room_id: i32, db: &Pool<Postgres>) -> bool { pub async fn is_member(user_id: i32, room_id: i32, db: &Pool<Postgres>) -> bool {
sqlx::query_scalar( sqlx::query_scalar(
r#" r#"
SELECT r.global SELECT r.global OR EXISTS (
OR EXISTS ( SELECT 1
SELECT 1 FROM membership_ m
FROM membership_ m WHERE m.user_id = $1
WHERE m.user_id = $1 AND m.room = r.id
AND m.room = r.id )
)
FROM room_ r FROM room_ r
WHERE r.id = $2 WHERE r.id = $2
"#, "#,
@@ -65,8 +65,12 @@ async fn list_rooms(
let rooms = sqlx::query_as::<_, Room>( let rooms = sqlx::query_as::<_, Room>(
r#" r#"
SELECT r.uuid, r.owner, r.name SELECT r.uuid,
u.username AS owner_name,
r.name,
r.global
FROM room_ r FROM room_ r
JOIN user_ u ON u.id = r.owner
WHERE r.global OR EXISTS ( WHERE r.global OR EXISTS (
SELECT 1 SELECT 1
FROM membership_ m FROM membership_ m
@@ -115,12 +119,19 @@ async fn create_room(
.await .await
.map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create room")))?; .map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create room")))?;
let owner_name = sqlx::query_scalar("SELECT username FROM user_ WHERE id = $1")
.bind(user_id)
.fetch_one(&db)
.await
.map_err(|_| (StatusCode::BAD_REQUEST, format!("Could not create room")))?;
Ok(( Ok((
StatusCode::CREATED, StatusCode::CREATED,
Json(Room { Json(Room {
uuid: room_uuid, uuid: room_uuid,
owner: user_id, owner_name,
name: payload.name, name: payload.name,
global: payload.global,
}), }),
)) ))
} }

View File

@@ -80,7 +80,7 @@ async fn ws_handler(
Extension(realtime): Extension<Realtime>, Extension(realtime): Extension<Realtime>,
Extension(db): Extension<sqlx::PgPool>, Extension(db): Extension<sqlx::PgPool>,
) -> Result<impl IntoResponse, axum::http::StatusCode> { ) -> Result<impl IntoResponse, axum::http::StatusCode> {
tracing::info!("recieved ws handshake: {}", room_uuid); // tracing::info!("recieved ws handshake: {}", room_uuid);
let room_id = room_id_from_uuid(&db, room_uuid) let room_id = room_id_from_uuid(&db, room_uuid)
.await .await