diff --git a/src/sql.rs b/src/sql/bookings.rs similarity index 69% rename from src/sql.rs rename to src/sql/bookings.rs index 9c3180b..9e6aaa5 100644 --- a/src/sql.rs +++ b/src/sql/bookings.rs @@ -1,102 +1,9 @@ use hyper::StatusCode; -use crate::{ServiceInner, model::{Room, Booking, Person, Address, BookingBody, CleaningPlan, Clerk}, error::ServiceError}; +use crate::{ServiceInner, model::{Room, Booking, Person, Address, BookingBody}, error::ServiceError}; impl ServiceInner { - pub async fn get_rooms(&self) -> Result, ServiceError> { - let session = self.pool.get_session().await?; - let stmt = session.prepare(" - SELECT - roomNumber, - floor, - roomTyp, - \"size\", - accessibility, - beds - FROM room - ").await?; - - let rows = stmt.query("").await?; - - let mut rooms: Vec = vec![]; - - while let Some(row) = rows.next().await? { - - let acc: i32 = row.get(5)?; - let room = Room { - room_number: row.get(0)?, - floor: row.get(1)?, - size: row.get(3)?, - room_type: row.get(2)?, - beds: row.get(4)?, - accessibility: acc != 0, - }; - rooms.push(room); - } - - Ok(rooms) - } - - pub async fn get_room(&self, id: i32) -> Result, ServiceError> { - let session = self.pool.get_session().await?; - let stmt = session.prepare(" - SELECT - roomNumber, - floor, - roomTyp, - \"size\", - accessibility, - beds - FROM room WHERE roomNumber = :ID - ").await?; - - let row = stmt.query_single(id).await?; - - Ok(match row { - Some(row) => { - let acc: i32 = row.get(5)?; - Some(Room { - room_number: row.get(0)?, - floor: row.get(1)?, - size: row.get(3)?, - room_type: row.get(2)?, - beds: row.get(4)?, - accessibility: acc != 0, - }) - }, - None => None, - }) - } - - pub async fn get_room_cleaning_plans(&self, roomid: i32) -> Result, ServiceError> { - let session = self.pool.get_session().await?; - let stmt = session.prepare(" - SELECT - cleaningPlanId, - TO_CHAR(\"date\", 'YYYY-MM-DD'), - duration - FROM CleaningPlan - WHERE roomNumber = :ROOMID - ").await?; - - let rows = stmt.query(roomid).await?; - - let mut cleaning_plans: Vec = vec![]; - - while let Some(row) = rows.next().await? { - let cleaning_plan = CleaningPlan { - id: row.get(0)?, - date: row.get(1)?, - duration: row.get(2)?, - room_id: roomid, - }; - cleaning_plans.push(cleaning_plan); - } - - Ok(cleaning_plans) - } - pub async fn get_bookings(&self) -> Result, ServiceError> { let session = self.pool.get_session().await?; let stmt = session.prepare(" @@ -383,52 +290,4 @@ impl ServiceInner { Ok(()) } - pub async fn get_clerks(&self) -> Result, ServiceError> { - let session = self.pool.get_session().await?; - let stmt = session.prepare(" - SELECT - c.staff, - c.salary, - p.personId, - p.name, - p.lastName, - p.age, - ad.street, - ad.houseNumber, - ad.postalCode, - ad.city, - ad.country - FROM Clerk c - INNER JOIN Person p ON p.personId = c.personId - INNER JOIN Address ad ON p.addressId = ad.addressId - ").await?; - - let rows = stmt.query("").await?; - - let mut clerks: Vec = vec![]; - - while let Some(row) = rows.next().await? { - let clerk = Clerk { - staff_number: row.get(0)?, - salary: row.get(1)?, - person_data: Person { - id: row.get(2)?, - first_name: row.get(3)?, - last_name: row.get(4)?, - age: row.get(5)?, - address: Address { - street: row.get(6)?, - house_number: row.get(7)?, - postal_code: row.get(8)?, - city: row.get(9)?, - country: row.get(10)?, - }, - }, - }; - clerks.push(clerk); - } - - Ok(clerks) - } - } \ No newline at end of file diff --git a/src/sql/clerks.rs b/src/sql/clerks.rs new file mode 100644 index 0000000..56a6800 --- /dev/null +++ b/src/sql/clerks.rs @@ -0,0 +1,53 @@ +use crate::{ServiceInner, model::{Person, Address, Clerk}, error::ServiceError}; + +impl ServiceInner { + + pub async fn get_clerks(&self) -> Result, ServiceError> { + let session = self.pool.get_session().await?; + let stmt = session.prepare(" + SELECT + c.staff, + c.salary, + p.personId, + p.name, + p.lastName, + p.age, + ad.street, + ad.houseNumber, + ad.postalCode, + ad.city, + ad.country + FROM Clerk c + INNER JOIN Person p ON p.personId = c.personId + INNER JOIN Address ad ON p.addressId = ad.addressId + ").await?; + + let rows = stmt.query("").await?; + + let mut clerks: Vec = vec![]; + + while let Some(row) = rows.next().await? { + let clerk = Clerk { + staff_number: row.get(0)?, + salary: row.get(1)?, + person_data: Person { + id: row.get(2)?, + first_name: row.get(3)?, + last_name: row.get(4)?, + age: row.get(5)?, + address: Address { + street: row.get(6)?, + house_number: row.get(7)?, + postal_code: row.get(8)?, + city: row.get(9)?, + country: row.get(10)?, + }, + }, + }; + clerks.push(clerk); + } + + Ok(clerks) + } + +} \ No newline at end of file diff --git a/src/sql/mod.rs b/src/sql/mod.rs new file mode 100644 index 0000000..f43fdff --- /dev/null +++ b/src/sql/mod.rs @@ -0,0 +1,3 @@ +mod bookings; +mod rooms; +mod clerks; \ No newline at end of file diff --git a/src/sql/rooms.rs b/src/sql/rooms.rs new file mode 100644 index 0000000..72c7ad8 --- /dev/null +++ b/src/sql/rooms.rs @@ -0,0 +1,98 @@ +use crate::{ServiceInner, model::{Room, CleaningPlan}, error::ServiceError}; + +impl ServiceInner { + + pub async fn get_rooms(&self) -> Result, ServiceError> { + let session = self.pool.get_session().await?; + let stmt = session.prepare(" + SELECT + roomNumber, + floor, + roomTyp, + \"size\", + accessibility, + beds + FROM room + ").await?; + + let rows = stmt.query("").await?; + + let mut rooms: Vec = vec![]; + + while let Some(row) = rows.next().await? { + + let acc: i32 = row.get(5)?; + let room = Room { + room_number: row.get(0)?, + floor: row.get(1)?, + size: row.get(3)?, + room_type: row.get(2)?, + beds: row.get(4)?, + accessibility: acc != 0, + }; + rooms.push(room); + } + + Ok(rooms) + } + + pub async fn get_room(&self, id: i32) -> Result, ServiceError> { + let session = self.pool.get_session().await?; + let stmt = session.prepare(" + SELECT + roomNumber, + floor, + roomTyp, + \"size\", + accessibility, + beds + FROM room WHERE roomNumber = :ID + ").await?; + + let row = stmt.query_single(id).await?; + + Ok(match row { + Some(row) => { + let acc: i32 = row.get(5)?; + Some(Room { + room_number: row.get(0)?, + floor: row.get(1)?, + size: row.get(3)?, + room_type: row.get(2)?, + beds: row.get(4)?, + accessibility: acc != 0, + }) + }, + None => None, + }) + } + + pub async fn get_room_cleaning_plans(&self, roomid: i32) -> Result, ServiceError> { + let session = self.pool.get_session().await?; + let stmt = session.prepare(" + SELECT + cleaningPlanId, + TO_CHAR(\"date\", 'YYYY-MM-DD'), + duration + FROM CleaningPlan + WHERE roomNumber = :ROOMID + ").await?; + + let rows = stmt.query(roomid).await?; + + let mut cleaning_plans: Vec = vec![]; + + while let Some(row) = rows.next().await? { + let cleaning_plan = CleaningPlan { + id: row.get(0)?, + date: row.get(1)?, + duration: row.get(2)?, + room_id: roomid, + }; + cleaning_plans.push(cleaning_plan); + } + + Ok(cleaning_plans) + } + +} \ No newline at end of file