From 08d725cf71ec011f8de0cbd8500749bbbb904198 Mon Sep 17 00:00:00 2001 From: Jijo Bose Date: Sat, 6 Jan 2024 11:42:36 +0530 Subject: [PATCH] List Rooms in a Home (#18) --- src/app/actions/room.rs | 8 ++++++++ src/app/api/room.rs | 19 ++++++++++++++++++- src/app/models/room.rs | 6 ++++++ src/main.rs | 3 ++- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/app/actions/room.rs b/src/app/actions/room.rs index 154f133..998fa16 100644 --- a/src/app/actions/room.rs +++ b/src/app/actions/room.rs @@ -6,6 +6,14 @@ use crate::app::models::room; type DbError = Box; +pub fn list_rooms(conn: &mut PgConnection, uid: Uuid) -> Result, DbError> { + use crate::schema::rooms::dsl::*; + + let room_list = rooms.filter(home_id.eq(uid.to_string())).load(conn)?; + + Ok(room_list) +} + pub fn insert_new_room( conn: &mut PgConnection, form: &Json, diff --git a/src/app/api/room.rs b/src/app/api/room.rs index 2c207ef..b7185df 100644 --- a/src/app/api/room.rs +++ b/src/app/api/room.rs @@ -1,4 +1,4 @@ -use actix_web::{error, post, web, HttpResponse, Responder, Result}; +use actix_web::{error, get, post, web, HttpResponse, Responder, Result}; use diesel::{r2d2, PgConnection}; use crate::app::actions; @@ -20,3 +20,20 @@ async fn add_room( Ok(HttpResponse::Created().json(response)) } + +#[get("/room")] +async fn get_room( + pool: web::Data, + query: web::Query, +) -> Result { + let home_uid = query.home_id; + + let response = web::block(move || { + let mut conn = pool.get()?; + actions::room::list_rooms(&mut conn, home_uid) + }) + .await? + .map_err(error::ErrorBadRequest)?; + + Ok(HttpResponse::Ok().json(response)) +} diff --git a/src/app/models/room.rs b/src/app/models/room.rs index 42cd8f4..1be0e49 100644 --- a/src/app/models/room.rs +++ b/src/app/models/room.rs @@ -1,6 +1,7 @@ use diesel::prelude::*; use diesel::{prelude::Insertable, Queryable}; use serde::{Deserialize, Serialize}; +use uuid::Uuid; use crate::schema::rooms; use crate::app::models::home::Home; @@ -15,6 +16,11 @@ pub struct Room { pub home_id: String, } +#[derive(Deserialize)] +pub struct RoomQuery { + pub home_id: Uuid, +} + /// New room details. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NewRoom { diff --git a/src/main.rs b/src/main.rs index 2d799ca..a9ed99b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ use app::api::home::{ delete_home }; -use app::api::room::add_room; +use app::api::room::{add_room, get_room}; use app::db::{ initialize_db_pool, @@ -40,6 +40,7 @@ async fn main() -> std::io::Result<()> { .service(find_home) .service(delete_home) .service(add_room) + .service(get_room) }) .bind(("127.0.0.1", 8080))? .run()