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