chore: split sql.rs to multiple files

This commit is contained in:
Timo Ley 2023-06-23 11:29:11 +02:00
parent c26872edb8
commit fc2e993d31
4 changed files with 155 additions and 142 deletions

View file

@ -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<Vec<Room>, 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<Room> = 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<Option<Room>, 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<Vec<CleaningPlan>, 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<CleaningPlan> = 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<Vec<Booking>, 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<Vec<Clerk>, 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<Clerk> = 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)
}
}

53
src/sql/clerks.rs Normal file
View file

@ -0,0 +1,53 @@
use crate::{ServiceInner, model::{Person, Address, Clerk}, error::ServiceError};
impl ServiceInner {
pub async fn get_clerks(&self) -> Result<Vec<Clerk>, 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<Clerk> = 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)
}
}

3
src/sql/mod.rs Normal file
View file

@ -0,0 +1,3 @@
mod bookings;
mod rooms;
mod clerks;

98
src/sql/rooms.rs Normal file
View file

@ -0,0 +1,98 @@
use crate::{ServiceInner, model::{Room, CleaningPlan}, error::ServiceError};
impl ServiceInner {
pub async fn get_rooms(&self) -> Result<Vec<Room>, 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<Room> = 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<Option<Room>, 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<Vec<CleaningPlan>, 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<CleaningPlan> = 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)
}
}