refactor: db availability into own files
This commit is contained in:
parent
dcfb097114
commit
1b7a44b8cd
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications,\n area.name AS areaName\n FROM availability\n JOIN user_ ON availability.userId = user_.id\n JOIN area ON user_.areaId = area.id\n WHERE user_.areaId = $1 AND\n availability.starttimestamp::date >= $2 AND\n availability.starttimestamp::date <= $3;\n ",
|
||||
"query": "SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications,\n area.name AS areaName\nFROM availability\nJOIN\n user_ ON availability.userId = user_.id\nJOIN\n area ON user_.areaId = area.id\nWHERE\n user_.areaId = $1\n AND availability.starttimestamp::date >= $2\n AND availability.starttimestamp::date <= $3;\n",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -139,5 +139,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "a05ae42af4e579697f6ddae93aa52fbc826a58edb71a23b54a589c56e1b50378"
|
||||
"hash": "604c4d56e84c5b36a0c217a4b6fd6920d845b62bf05249e4f5fb4acad79fe2b2"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availability\n LEFT JOIN assignment ON availability.Id = assignment.availabilityId\n JOIN user_ ON availability.userId = user_.id\n WHERE availability.id = $1;\n ",
|
||||
"query": "SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\nFROM availability\nJOIN\n user_ ON availability.userId = user_.id\nWHERE\n availability.id = $1;\n",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -131,5 +131,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "1b85bca9dc5c0ec4568a07846ccda76468e81d9335548ef6f8b25c6e290b9cd0"
|
||||
"hash": "79daa9585c09f2f98db217067d7bd634440dfff960c34404fe7acc16fbc9b0fc"
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
SELECT
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
user_.salt,
|
||||
user_.role AS "role: Role",
|
||||
user_.function AS "function: UserFunction",
|
||||
user_.areaId,
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications,
|
||||
area.name AS areaName
|
||||
FROM availability
|
||||
JOIN
|
||||
user_ ON availability.userId = user_.id
|
||||
JOIN
|
||||
area ON user_.areaId = area.id
|
||||
WHERE
|
||||
user_.areaId = $1
|
||||
AND availability.starttimestamp::date >= $2
|
||||
AND availability.starttimestamp::date <= $3;
|
21
db/sql/availability/read_including_user.sql
Normal file
21
db/sql/availability/read_including_user.sql
Normal file
@ -0,0 +1,21 @@
|
||||
SELECT
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
user_.salt,
|
||||
user_.role AS "role: Role",
|
||||
user_.function AS "function: UserFunction",
|
||||
user_.areaId,
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications
|
||||
FROM availability
|
||||
JOIN
|
||||
user_ ON availability.userId = user_.id
|
||||
WHERE
|
||||
availability.id = $1;
|
@ -28,7 +28,7 @@ impl<'a> AsyncValidate<'a> for AssignmentChangeset {
|
||||
context: &'a Self::Context,
|
||||
) -> Result<(), crate::validation::AsyncValidateError> {
|
||||
let Some(availability) =
|
||||
Availability::read_by_id_including_user(context.pool, context.availability_id).await?
|
||||
Availability::read_including_user(context.pool, context.availability_id).await?
|
||||
else {
|
||||
return Err(AsyncValidateError::new(
|
||||
"Angegebener Verfügbarkeit des Nutzers existiert nicht.",
|
||||
|
@ -73,6 +73,7 @@ impl Availability {
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
/// loads availabilities for the area and the same day as the start date and which fully lie inside the daterange
|
||||
pub async fn read_all_by_daterange_and_area_including_user_for_event_planning(
|
||||
pool: &PgPool,
|
||||
date_range: (NaiveDateTime, NaiveDateTime),
|
||||
@ -116,34 +117,10 @@ impl Availability {
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn read_by_id_including_user(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
let record = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
user_.salt,
|
||||
user_.role AS "role: Role",
|
||||
user_.function AS "function: UserFunction",
|
||||
user_.areaId,
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications
|
||||
FROM availability
|
||||
LEFT JOIN assignment ON availability.Id = assignment.availabilityId
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
WHERE availability.id = $1;
|
||||
"##,
|
||||
id
|
||||
)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
pub async fn read_including_user(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
let record = query_file!("sql/availability/read_including_user.sql", id)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
|
||||
let availability = record.map(|r| Availability {
|
||||
id: r.id,
|
||||
@ -170,7 +147,7 @@ impl Availability {
|
||||
Ok(availability)
|
||||
}
|
||||
|
||||
pub async fn read_by_id(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
pub async fn read(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
let record = query!("SELECT * FROM availability WHERE id = $1", id)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
@ -187,37 +164,13 @@ impl Availability {
|
||||
Ok(availability)
|
||||
}
|
||||
|
||||
pub async fn read_for_export(
|
||||
pub async fn read_all_by_daterange_and_area_including_user_for_export(
|
||||
pool: &PgPool,
|
||||
date_range: (NaiveDate, NaiveDate),
|
||||
area_id: i32,
|
||||
) -> Result<Vec<Availability>> {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
user_.salt,
|
||||
user_.role AS "role: Role",
|
||||
user_.function AS "function: UserFunction",
|
||||
user_.areaId,
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications,
|
||||
area.name AS areaName
|
||||
FROM availability
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
JOIN area ON user_.areaId = area.id
|
||||
WHERE user_.areaId = $1 AND
|
||||
availability.starttimestamp::date >= $2 AND
|
||||
availability.starttimestamp::date <= $3;
|
||||
"##,
|
||||
let records = query_file!(
|
||||
"sql/availability/read_all_by_daterange_and_area_including_user_for_export.sql",
|
||||
area_id,
|
||||
date_range.0,
|
||||
date_range.1
|
||||
|
@ -125,7 +125,7 @@ async fn time_can_be_extended_if_edit(
|
||||
let mut common_time = (start.and_time(START_OF_DAY), end.and_time(END_OF_DAY));
|
||||
|
||||
for assignment in assignments_for_event {
|
||||
let availability = Availability::read_by_id(pool, assignment.availability_id)
|
||||
let availability = Availability::read(pool, assignment.availability_id)
|
||||
.await?
|
||||
.unwrap();
|
||||
let all_assignments =
|
||||
|
@ -1,4 +1,4 @@
|
||||
use sqlx::{query, PgPool};
|
||||
use sqlx::{PgPool, query};
|
||||
|
||||
use super::Result;
|
||||
|
||||
|
@ -10,7 +10,7 @@ pub async fn delete(
|
||||
pool: web::Data<PgPool>,
|
||||
path: web::Path<IdPath>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let Some(availability) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
let Some(availability) = Availability::read(pool.get_ref(), path.id).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
|
@ -14,7 +14,7 @@ pub async fn get(
|
||||
pool: web::Data<PgPool>,
|
||||
path: web::Path<IdPath>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let Some(availability) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
let Some(availability) = Availability::read(pool.get_ref(), path.id).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
|
@ -18,7 +18,7 @@ pub async fn post(
|
||||
path: web::Path<IdPath>,
|
||||
form: web::Form<AvailabilityForm>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let Some(availability) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
let Some(availability) = Availability::read(pool.get_ref(), path.id).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
|
@ -62,7 +62,7 @@ pub async fn get(
|
||||
};
|
||||
|
||||
let availabilities =
|
||||
Availability::read_for_export(pool.get_ref(), (start_date, end_date), area_id).await?;
|
||||
Availability::read_all_by_daterange_and_area_including_user_for_export(pool.get_ref(), (start_date, end_date), area_id).await?;
|
||||
|
||||
let export_availabilities = availabilities
|
||||
.into_iter()
|
||||
|
Loading…
x
Reference in New Issue
Block a user