diff --git a/db/sql/assignment/create.sql b/db/sql/assignment/create.sql new file mode 100644 index 00000000..1eecc96b --- /dev/null +++ b/db/sql/assignment/create.sql @@ -0,0 +1,2 @@ +INSERT INTO assignment (eventId, availabilityId, function, startTimestamp, endTimestamp) +VALUES ($1, $2, $3, $4, $5); diff --git a/db/sql/assignment/read.sql b/db/sql/assignment/read.sql new file mode 100644 index 00000000..47f47af6 --- /dev/null +++ b/db/sql/assignment/read.sql @@ -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; diff --git a/db/sql/assignment/read_all_by_availability.sql b/db/sql/assignment/read_all_by_availability.sql new file mode 100644 index 00000000..8fa7770f --- /dev/null +++ b/db/sql/assignment/read_all_by_availability.sql @@ -0,0 +1,8 @@ +SELECT + assignment.eventId, + assignment.availabilityId, + assignment.function AS "function: Function", + assignment.startTimestamp, + assignment.endTimestamp +FROM assignment +WHERE assignment.AvailabilityId = $1; diff --git a/db/sql/assignment/read_all_by_daterange_and_user.sql b/db/sql/assignment/read_all_by_daterange_and_user.sql new file mode 100644 index 00000000..63039cc7 --- /dev/null +++ b/db/sql/assignment/read_all_by_daterange_and_user.sql @@ -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; diff --git a/db/sql/assignment/read_all_by_event.sql b/db/sql/assignment/read_all_by_event.sql new file mode 100644 index 00000000..ef0e3e9a --- /dev/null +++ b/db/sql/assignment/read_all_by_event.sql @@ -0,0 +1,8 @@ +SELECT + assignment.eventId, + assignment.availabilityId, + assignment.function AS "function: Function", + assignment.startTimestamp, + assignment.endTimestamp +FROM assignment +WHERE assignment.eventId = $1; diff --git a/db/src/models/assignment.rs b/db/src/models/assignment.rs index 90009407..97f1150a 100644 --- a/db/src/models/assignment.rs +++ b/db/src/models/assignment.rs @@ -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> { - 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> { - 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, - ) - .fetch_all(pool) - .await?; + 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> { - 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> { - 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 - ) - .fetch_optional(pool) - .await?; + 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(()) }