refactor: db assignment queries into files

This commit is contained in:
Max Hohlfeld 2025-07-07 15:37:15 +02:00
parent fc63464210
commit 8491491e25
6 changed files with 72 additions and 74 deletions

View File

@ -0,0 +1,2 @@
INSERT INTO assignment (eventId, availabilityId, function, startTimestamp, endTimestamp)
VALUES ($1, $2, $3, $4, $5);

View File

@ -0,0 +1,10 @@
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE
assignment.eventId = $1
AND assignment.availabilityId = $2;

View File

@ -0,0 +1,8 @@
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE assignment.AvailabilityId = $1;

View File

@ -0,0 +1,14 @@
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
JOIN
availability ON assignment.availabilityId = availability.id
WHERE
assignment.starttimestamp::date >= $1
AND assignment.starttimestamp::date <= $2
AND availability.userId = $3
ORDER BY assignment.starttimestamp;

View File

@ -0,0 +1,8 @@
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE assignment.eventId = $1;

View File

@ -1,5 +1,5 @@
use chrono::{NaiveDate, NaiveDateTime}; use chrono::{NaiveDate, NaiveDateTime};
use sqlx::{PgPool, query}; use sqlx::{PgPool, query, query_file};
use super::{AssignmentChangeset, Function, Result}; use super::{AssignmentChangeset, Function, Result};
@ -19,11 +19,8 @@ impl Assignment {
availability_id: i32, availability_id: i32,
changeset: AssignmentChangeset, changeset: AssignmentChangeset,
) -> Result<()> { ) -> Result<()> {
query!( query_file!(
r##" "sql/assignment/create.sql",
INSERT INTO assignment (eventId, availabilityId, function, startTimestamp, endTimestamp)
VALUES ($1, $2, $3, $4, $5);
"##,
event_id, event_id,
availability_id, availability_id,
changeset.function as Function, changeset.function as Function,
@ -40,23 +37,14 @@ impl Assignment {
pool: &PgPool, pool: &PgPool,
availability_id: i32, availability_id: i32,
) -> Result<Vec<Assignment>> { ) -> Result<Vec<Assignment>> {
let records = query!( let records = query_file!(
r##" "sql/assignment/read_all_by_availability.sql",
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE assignment.AvailabilityId = $1;
"##,
availability_id availability_id
) )
.fetch_all(pool) .fetch_all(pool)
.await?; .await?;
let assignemnets = records let assignments = records
.iter() .iter()
.map(|r| Assignment { .map(|r| Assignment {
event_id: r.eventid, event_id: r.eventid,
@ -67,27 +55,15 @@ impl Assignment {
}) })
.collect(); .collect();
Ok(assignemnets) Ok(assignments)
} }
pub async fn read_all_by_event(pool: &PgPool, event_id: i32) -> Result<Vec<Assignment>> { pub async fn read_all_by_event(pool: &PgPool, event_id: i32) -> Result<Vec<Assignment>> {
let records = query!( let records = query_file!("sql/assignment/read_all_by_event.sql", event_id,)
r##"
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE assignment.eventId = $1;
"##,
event_id,
)
.fetch_all(pool) .fetch_all(pool)
.await?; .await?;
let assignemnets = records let assignments = records
.iter() .iter()
.map(|r| Assignment { .map(|r| Assignment {
event_id: r.eventid, event_id: r.eventid,
@ -98,7 +74,7 @@ impl Assignment {
}) })
.collect(); .collect();
Ok(assignemnets) Ok(assignments)
} }
pub async fn read_all_by_daterange_and_user( pub async fn read_all_by_daterange_and_user(
@ -106,21 +82,8 @@ impl Assignment {
date_range: (&NaiveDate, &NaiveDate), date_range: (&NaiveDate, &NaiveDate),
user_id: i32, user_id: i32,
) -> Result<Vec<Assignment>> { ) -> Result<Vec<Assignment>> {
let records = query!( let records = query_file!(
r##" "sql/assignment/read_all_by_daterange_and_user.sql",
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
JOIN availability ON assignment.availabilityId = availability.id
WHERE assignment.starttimestamp::date >= $1
AND assignment.starttimestamp::date <= $2
AND availability.userId = $3
ORDER BY assignment.starttimestamp;
"##,
date_range.0, date_range.0,
date_range.1, date_range.1,
user_id user_id
@ -128,7 +91,7 @@ impl Assignment {
.fetch_all(pool) .fetch_all(pool)
.await?; .await?;
let assignemnets = records let assignments = records
.iter() .iter()
.map(|r| Assignment { .map(|r| Assignment {
event_id: r.eventid, event_id: r.eventid,
@ -139,7 +102,7 @@ impl Assignment {
}) })
.collect(); .collect();
Ok(assignemnets) Ok(assignments)
} }
pub async fn read( pub async fn read(
@ -147,26 +110,11 @@ impl Assignment {
event_id: i32, event_id: i32,
availability_id: i32, availability_id: i32,
) -> Result<Option<Assignment>> { ) -> Result<Option<Assignment>> {
let record = query!( let record = query_file!("sql/assignment/read.sql", event_id, availability_id)
r##"
SELECT
assignment.eventId,
assignment.availabilityId,
assignment.function AS "function: Function",
assignment.startTimestamp,
assignment.endTimestamp
FROM assignment
WHERE
assignment.eventId = $1 AND
assignment.availabilityId = $2;
"##,
event_id,
availability_id
)
.fetch_optional(pool) .fetch_optional(pool)
.await?; .await?;
let assignemnet = record.map(|r| Assignment { let assignment = record.map(|r| Assignment {
event_id: r.eventid, event_id: r.eventid,
availability_id: r.availabilityid, availability_id: r.availabilityid,
function: r.function, function: r.function,
@ -174,7 +122,7 @@ impl Assignment {
end: r.endtimestamp.naive_utc(), end: r.endtimestamp.naive_utc(),
}); });
Ok(assignemnet) Ok(assignment)
} }
pub async fn update( pub async fn update(
@ -183,7 +131,15 @@ impl Assignment {
availability_id: i32, availability_id: i32,
changeset: AssignmentChangeset, changeset: AssignmentChangeset,
) -> Result<()> { ) -> Result<()> {
query!("UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabilityId = $5;", changeset.function as Function, changeset.time.0.and_utc(), changeset.time.1.and_utc(), event_id, availability_id).execute(pool).await?; query!(
"UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabilityId = $5;",
changeset.function as Function,
changeset.time.0.and_utc(),
changeset.time.1.and_utc(),
event_id, availability_id
)
.execute(pool)
.await?;
Ok(()) Ok(())
} }