diff --git a/src/sql/bookings.rs b/src/sql/bookings.rs index 299b97d..0415e89 100644 --- a/src/sql/bookings.rs +++ b/src/sql/bookings.rs @@ -1,6 +1,7 @@ use hyper::StatusCode; +use sibyl::Row; -use crate::{ServiceInner, model::{Booking, BookingBody, Room, Person, Address}, error::ServiceError}; +use crate::{ServiceInner, model::{Booking, BookingBody, Room, Person}, error::ServiceError}; impl ServiceInner { @@ -22,15 +23,7 @@ impl ServiceInner { let mut bookings: Vec = vec![]; while let Some(row) = rows.next().await? { - let booking = Booking { - id: row.get(0)?, - arrival_date: row.get(1)?, - depature_date: row.get(2)?, - cost: row.get(3)?, - pension_type: row.get(4)?, - client_id: row.get(5)?, - }; - bookings.push(booking); + bookings.push(Self::map_booking_row(row)?); } Ok(bookings) @@ -55,15 +48,7 @@ impl ServiceInner { let mut bookings: Vec = vec![]; while let Some(row) = rows.next().await? { - let booking = Booking { - id: row.get(0)?, - arrival_date: row.get(1)?, - depature_date: row.get(2)?, - cost: row.get(3)?, - pension_type: row.get(4)?, - client_id: row.get(5)?, - }; - bookings.push(booking); + bookings.push(Self::map_booking_row(row)?); } Ok(bookings) @@ -86,14 +71,7 @@ impl ServiceInner { Ok(match row { Some(row) => { - Some(Booking { - id: row.get(0)?, - arrival_date: row.get(1)?, - depature_date: row.get(2)?, - cost: row.get(3)?, - pension_type: row.get(4)?, - client_id: row.get(5)?, - }) + Some(Self::map_booking_row(row)?) }, None => None, }) @@ -191,17 +169,7 @@ impl ServiceInner { 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); + rooms.push(Self::map_room_row(row)?); } Ok(rooms) @@ -231,20 +199,7 @@ impl ServiceInner { let mut persons: Vec = vec![]; while let Some(row) = rows.next().await? { - let person = Person { - id: row.get(0)?, - first_name: row.get(1)?, - last_name: row.get(2)?, - age: row.get(3)?, - address: Address { - street: row.get(4)?, - house_number: row.get(5)?, - postal_code: row.get(6)?, - city: row.get(7)?, - country: row.get(8)?, - } - }; - persons.push(person); + persons.push(Self::map_person_row(row, 0)?); } Ok(persons) @@ -290,4 +245,15 @@ impl ServiceInner { Ok(()) } + pub fn map_booking_row(row: Row) -> Result { + Ok(Booking { + id: row.get(0)?, + arrival_date: row.get(1)?, + depature_date: row.get(2)?, + cost: row.get(3)?, + pension_type: row.get(4)?, + client_id: row.get(5)?, + }) + } + } \ No newline at end of file diff --git a/src/sql/clerks.rs b/src/sql/clerks.rs index 810c922..9af217e 100644 --- a/src/sql/clerks.rs +++ b/src/sql/clerks.rs @@ -1,3 +1,5 @@ +use sibyl::Row; + use crate::{ServiceInner, model::{Person, Address, Clerk}, error::ServiceError}; impl ServiceInner { @@ -27,24 +29,7 @@ impl ServiceInner { 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); + clerks.push(Self::map_clerk_row(row)?); } Ok(clerks) @@ -75,23 +60,7 @@ impl ServiceInner { Ok(match row { Some(row) => { - Some(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)?, - }, - }, - }) + Some(Self::map_clerk_row(row)?) }, None => None, }) @@ -122,26 +91,34 @@ impl ServiceInner { Ok(match row { Some(row) => { - Some(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)?, - }, - }, - }) + Some(Self::map_clerk_row(row)?) }, None => None, }) } + pub fn map_person_row(row: Row, offset: usize) -> Result { + Ok(Person { + id: row.get(0 + offset)?, + first_name: row.get(1 + offset)?, + last_name: row.get(2 + offset)?, + age: row.get(3 + offset)?, + address: Address { + street: row.get(4 + offset)?, + house_number: row.get(5 + offset)?, + postal_code: row.get(6 + offset)?, + city: row.get(7 + offset)?, + country: row.get(8 + offset)?, + } + }) + } + + pub fn map_clerk_row(row: Row) -> Result { + Ok(Clerk { + staff_number: row.get(0)?, + salary: row.get(1)?, + person_data: Self::map_person_row(row, 2)?, + }) + } + } \ No newline at end of file diff --git a/src/sql/rooms.rs b/src/sql/rooms.rs index 72c7ad8..42e94d7 100644 --- a/src/sql/rooms.rs +++ b/src/sql/rooms.rs @@ -1,3 +1,5 @@ +use sibyl::Row; + use crate::{ServiceInner, model::{Room, CleaningPlan}, error::ServiceError}; impl ServiceInner { @@ -20,17 +22,7 @@ impl ServiceInner { 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); + rooms.push(Self::map_room_row(row)?); } Ok(rooms) @@ -53,15 +45,7 @@ impl ServiceInner { 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, - }) + Some(Self::map_room_row(row)?) }, None => None, }) @@ -95,4 +79,16 @@ impl ServiceInner { Ok(cleaning_plans) } + pub fn map_room_row(row: Row) -> Result { + let acc: i32 = row.get(5)?; + Ok(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, + }) + } + } \ No newline at end of file